外观
LitServe
LitServe
有了 vLLM,我们现在已经拥有了一种可靠、高效的方式来提供 LLM 服务。它处理了批处理、KV 缓存管理、路由这些推理过程中的核心难题,同时让我们能够对外暴露一个简单的 API 端点。
然而,部署往往不只是把模型跑起来这么简单。
真实的系统通常还需要一些额外的组件,比如:
- 请求校验
- 预处理与后处理
- 自定义路由
- 身份验证
- 日志记录与监控
为了支持这些环节,我们通常会把模型包装进一个更大的应用服务器里。
LitServe 提供了一种简单的方式来搭建这一层。
它是一个开源框架,让你可以搭建属于自己的定制化推理引擎。
它让你能够掌控请求的处理方式——批处理、流式输出(streaming)、路由,以及协调多个模型或组件之间的配合。
正因为它工作在这个层面,LitServe 几乎能为各种类型的模型提供服务,包括视觉、音频、文本以及多模态系统。
为了让这一点更具体,我们先从一个最简示例开始,然后逐步拆解它。

这个示例用 LitServe 部署了一个 Llama 3 模型,实现了一个简单的端到端流程。服务的每个环节都对应 API 类中的一个函数。
接下来,我们逐一拆解每个环节,把 LitServe 的模式彻底搞清楚。
1)加载模型
LitServe 会在服务器启动时调用一次 setup()。

这里我们把 Llama 3 模型加载进内存,让它随时可以用于推理。
2)解析请求
接收到的请求以 JSON 格式到达。

这个方法会从请求中提取模型需要的部分——在这个例子里,就是 prompt。
3)执行推理
这里就是真正调用模型的地方。

predict() 可以通过不断 yield 生成的 token 来实现流式输出。
4)返回响应
predict() 产出的内容,最终都会被转换成响应结果。

这里我们把每个流式输出的片段包装成一个简单的 JSON 对象。
5)启动服务器
最后,我们创建 API 实例并运行服务器。

这样模型就被暴露成了一个 HTTP 端点。
部署,是把一个训练好的模型转变为一个持续运行的服务,让应用能够与它进行实时交互的过程。
一旦模型通过 API 对外暴露,它就要直面真实流量、波动的负载,以及生产环境中的各种运维约束。
到了这个阶段,关注的重点就从「如何提供模型服务」转向了「理解系统在运行过程中的实际表现」。
要想可靠地运营一个 LLM,我们现在需要的是可观测性(observability)。