其他
使用 OpenLLM 构建和部署大模型应用
导读 本次分享主题为:使用 OpenLLM 快速构建和部署大语言模型的应用。OpenLLM 是一个开源的大语言模型(LLM)开发框架。它支持多种开源的 LLM 模型,并且具有内建的两个关键的 LLM 优化,能够优化内存使用。此外,它与 LangChain 和 BentoML 都有很好的集成,可以快速地构建和部署大语言模型的应用。
今天的分享会围绕下面五点展开:1. BentoML 公司简介
2. OpenLLM 产品背景
3. OpenLLM 介绍、应用举例与使用优势
4. BentoML 介绍与应用举例
5. OpenLLM 总结
分享嘉宾|明希 BentoML 高级软件工程师
编辑整理|张阳
内容校对|李瑶
出品社区|DataFun
OpenLLM 产品背景
高可控性/灵活性:如果将所有数据作为一个 prompt 输入到 OpenAI 的模型中进行推理,这种方法可能并不太切实际。最终,他们期望能够通过自行训练或微调,利用多年来积累的用户数据得到一个属于自己的模型,实现更加灵活的推理需求。 数据安全性:如果将自己的数据用于模型推理,就需要关注数据安全性的问题。因为如果使用的是公共网络上的模型,就不可避免地需要将自己的私有数据输入到这个公共网络的模型中。这可能导致数据泄露的问题,在一些注重数据安全性的企业中,这是无法接受的。 成本效益:正如之前提到的,如果使用通用模型并采用经过优化的 prompt,可能需要一个庞大的 prompt。举例来说,如果要进行文档的推理,可能需要将整个文档或一本书输入到 prompt 中。目前大多数商业模型是按 Token 计费的,如果提示非常庞大,成本就会相应增加。然而,如果你能够拥有自己的大模型应用,那么成本可能只涉及硬件费用。并且,其精确度可能更高,这意味着你可能只需使用更小的模型就能达到相同的推理准确度,从而进一步降低成本。
3. 生产环境中部署 LLMs 的挑战
可操作性:主要涉及到硬件成本,即一个大型模型是否能够有效地部署在特定硬件上。我们都知道,一些优秀的显卡可能不太容易获取。举例来说,一个拥有 13B 参数的模型,其参数总量可能需要 26GB,这就使得单卡 A10G 显卡难以应对。因此,可能需要考虑使用多卡或多机部署来解决硬件上的限制。 可扩展性:包含硬件可扩展性和软件可扩展性两个方面。首先是硬件的可扩展性,指的是在请求量和并发数较低时,可以只需一颗显卡或一台机器来满足需求,而在用户量增大时,希望系统能够自动启用多颗显卡或多台机器进行并发推理。第二方面是软件的可扩展性。考虑到现在有许多大型语言模型,你可能在开发或测试阶段希望方便地在不同模型之间切换,以观察它们的效果并进行比较。这就需要软件方面的可扩展性。 吞吐量:大型语言模型的应用与传统的机器学习应用有一些区别。传统的机器学习应用,比如图像分类任务,通常可以进行批处理,即一次性处理多个输入,同时返回结果。但是大型语言模型在推理时,其输入不是同时到达,输出也不是同时产生,这给吞吐量带来了更大的挑战。 延迟:我们自然希望延迟越低越好,但在机器学习应用中,延迟有时与吞吐量是一对相互制衡的指标。换句话说,如果要达到较大的吞吐量,可能需要在一定程度上牺牲延迟。
OpenLLM 介绍、应用举例与使用优势
模型切换。用户能够方便地在不同的模型之间进行切换。 内置多种优化技术。首先是量化,通过减少参数精度来降低整体内存使用,特别适用于大型语言模型。OpenLLM 支持几乎所有模型的量化。其次是 Token Streaming 技术,在典型的聊天机器人场景中表现出色,允许边产生边接收答案,词汇逐个生成。还有 continuous batching(持续批跑)和 paged attention 等重要优化。 多卡支持。用户可以指定多个 GPU,并根据需要选择运行方式,甚至可以指定特定的GPU。 模型表现监测。基于公司产品 BentoML,支持 Metrics 测量和性能指标监控。 支持模型微调推理。OpenLLM 支持 Fine-tune,同时也支持与 LoRA Layer 进行合作的推理。 与其他 AI 工具如 BentoML、LangChain 和 Hugging Face 集成良好,提供了更全面的功能和应用场景。
BentoML 介绍与应用举例
开源 AI 部署框架:BentoML 提供了一整套的开发、部署和打包解决方案。 模型与代码的版本控制:BentoML 引入了模型和版本的控制概念,使得模型可以像 GitHub 的提交一样进行版本控制。由此可以轻松追踪和回退之前的指定版本,特别是在模型出错时非常有用。 通过 Metrics、Traces 和 Logs 提供开箱即用的可观察性:BentoML 内置了开箱即用的可观测性功能,包括测量指标、追踪和日志功能,帮助用户更好地监测和理解模型的性能。 容器化为标准的 OCI 镜像:BentoML 支持将整个机器学习应用打包为标准的容器镜像。 多种部署目标:可以将应用轻松部署在各种云服务器上,例如 AWS。 分布式部署与扩容:BentoML 支持分布式的部署与扩容,为处理高负载提供了便利。 Serverless BentoCloud:这是 BentoML 最新支持的功能之一,允许以 Serverless 方式的部署。这意味着应用在没有任何请求时不占用任何资源,只有在第一个请求到达时才进行冷启动。
版本管理:BentoML 模型具有版本管理功能,这意味着可以轻松地追踪、管理和回滚模型的不同版本。这对于模型的迭代和更新非常有用。 团队协作:在开发 AI 应用时,通常会有研究团队负责训练模型。一旦模型被训练并保存为 BentoML 模型,就可以被推送到远程平台,供工程团队下载和使用。这种分工和协作的方式使得团队可以更加高效地合作,研究和工程团队可以专注于各自的任务。通过这种方式,团队成员不需要担心模型的具体来源,只需通过 BentoML 平台下载并使用相应的模型。这种团队协作的概念有助于提高整个开发过程的效率和协同工作的流畅性。
Remote Worker:Runner 将模型封装成一个远程对象,使其可以对外提供服务。这种分离的设计允许模型独立于应用部署,提高了系统的模块化性和可维护性。 独立扩容:由于 AI 应用的模型部分通常需要大量 GPU 资源,而其他任务如 API 接口、数据预处理和 IO 操作等则可能只需要 CPU。通过独立部署,它们可以相互独立地扩容。CPU 资源相对便宜,可以自由扩展,而 GPU 资源可能有限,例如只有 2 到 3 个。这种方式可以确保将 GPU 资源专注于模型推理,而将 CPU 资源用于其他任务,提高了整体的资源利用率。 支持主流 ML 框架直接转化为 Runner:BentoML 支持几乎所有主流的机器学习框架,包括 PyTorch 和 TensorFlow。模型可以直接转换为 Remote Runner,并在独立的进程中进行部署。
负载均衡层:负载均衡层接收到所有的请求,并负责将它们分发给 API 服务器。这一层可以进行请求的智能分发,确保每个 API 服务器负载均衡。 API 服务器:API 服务器是 BentoML 应用的入口,负责接收来自负载均衡层的请求。API 服务器可能会横向扩展,即创建多个实例以处理大量的并发请求。一旦 API 服务器接收到请求,它会进行一些预处理,然后将请求转发给 Runner。 Runner:Runner 是对模型的封装,负责实际的模型推理。在这一层,模型推理支持批处理功能。当 Runner 接收到一个请求时,它会等待一段时间,看是否有其他请求到达。只有当等待时间达到最大值或者达到了规定的批处理容量时,Runner 才会一次性提交这批请求给模型进行推理。这个过程对用户是无感知的,而且可以提高推理的效率。
OpenLLM 总结
分享嘉宾
INTRODUCTION
明希
BentoML
高级软件工程师
BentoML 全栈工程师,Python 玩家,开源爱好者。负责 BentoML 项目的开发。著名 Python 包管理器 PDM 作者。
往期推荐
点个在看你最好看