使用 OpenLLM 构建和部署大模型应用
1. LLM 爆发与部署背景
2023 年见证了大语言模型(LLM)的繁荣发展。从商用的 Claude、GPT 到开源的小模型,参数量从几个 B 到几百个 B 不等。BentoML 在与客户互动时发现,许多开发者在开发过程中利用 OpenAI 的能力进行推理,但在将模型部署到生产环境时面临挑战。
1.1 核心诉求
大部分客户有以下诉求:
- 高可控性/灵活性:期望通过自行训练或微调,利用积累的用户数据得到属于自己的模型,实现更灵活的推理需求。
- 数据安全性:私有数据输入公共网络模型可能导致泄露,企业级应用需要本地化部署。
- 成本效益:商业模型按 Token 计费,庞大的 Prompt 会导致成本增加。拥有自己的大模型应用可仅涉及硬件费用,且小模型可能达到相同准确度。
1.2 生产环境部署挑战
自主部署大语言模型通常面临以下挑战:
- 可操作性:硬件成本高,如 13B 参数模型需约 26GB 显存,单卡 A10G 难以应对,需多卡或多机部署。
- 可扩展性:包括硬件扩展(自动启用多卡/多机)和软件扩展(方便在不同模型间切换测试)。
- 吞吐量:LLM 推理输入非同时到达,输出非同时产生,传统批处理模式不适用。
- 延迟:延迟与吞吐量往往相互制衡,需优化平衡。
2. OpenLLM 介绍与应用
OpenLLM 于 2023 年 6 月开源,是一个用于部署大语言模型的框架。GitHub 星标超过 6800 个。其初衷是通过一行代码轻松在不同的大语言模型之间切换。
2.1 支持模型
OpenLLM 目前支持几乎所有常用的开源大语言模型,包括 ChatGLM、百川、Dolly-V2 等。对于每个模型,框架提供多个不同的参数量和部署 ID 供选择。
2.2 快速启动示例
启动一个 LLM 服务非常简单。安装工具后运行以下命令即可启动应用:
start dolly-v2
如果计算机上未下载过该模型,它将自动下载。启动后,可以通过命令行直接与服务交互:
# 提问示例
地球的重量是多少?
若需提升准确度,可切换模型,例如使用 LlaMA2:
start llama2
尽管使用方法一致,但不同模型的回答质量会有所差异。LlaMA2 相比 Dolly-V2 通常能提供更准确的答案。
2.3 API 与 SDK
在实际部署中,应用需要提供 HTTP 或 gRPC 接口。OpenLLM 框架支持内置的开箱即用的 HTTP API。在服务首页显示 Swagger 页面,列出所有支持的 HTTP 端点,可直接进行测试。
此外,OpenLLM 提供了 Python SDK,允许在 Python 代码中直接与服务交互:
from openllm.client import Client
client = Client('http://localhost:3000')
response = client.generate(prompt='地球的重量是多少?')
print(response)
这使得在 Python 环境中集成和使用 OpenLLM 的服务更加便捷。
3. OpenLLM 核心优势与优化
使用 OpenLLM 具有以下显著优势:
- :用户能够方便地在不同的模型之间进行切换。


