Skip to content

LitServe

LitServe

有了 vLLM,我们现在已经拥有了一种可靠、高效的方式来提供 LLM 服务。它处理了批处理、KV 缓存管理、路由这些推理过程中的核心难题,同时让我们能够对外暴露一个简单的 API 端点。

然而,部署往往不只是把模型跑起来这么简单。

真实的系统通常还需要一些额外的组件,比如:

  • 请求校验
  • 预处理与后处理
  • 自定义路由
  • 身份验证
  • 日志记录与监控

为了支持这些环节,我们通常会把模型包装进一个更大的应用服务器里。

LitServe 提供了一种简单的方式来搭建这一层。

它是一个开源框架,让你可以搭建属于自己的定制化推理引擎。

它让你能够掌控请求的处理方式——批处理、流式输出(streaming)、路由,以及协调多个模型或组件之间的配合。

正因为它工作在这个层面,LitServe 几乎能为各种类型的模型提供服务,包括视觉、音频、文本以及多模态系统。

为了让这一点更具体,我们先从一个最简示例开始,然后逐步拆解它。

llm deployment p366 1

这个示例用 LitServe 部署了一个 Llama 3 模型,实现了一个简单的端到端流程。服务的每个环节都对应 API 类中的一个函数。

接下来,我们逐一拆解每个环节,把 LitServe 的模式彻底搞清楚。

1)加载模型

LitServe 会在服务器启动时调用一次 setup()。

llm deployment p367 1

这里我们把 Llama 3 模型加载进内存,让它随时可以用于推理。

2)解析请求

接收到的请求以 JSON 格式到达。

llm deployment p367 2

这个方法会从请求中提取模型需要的部分——在这个例子里,就是 prompt。

3)执行推理

这里就是真正调用模型的地方。

llm deployment p368 1

predict() 可以通过不断 yield 生成的 token 来实现流式输出。

4)返回响应

predict() 产出的内容,最终都会被转换成响应结果。

llm deployment p368 2

这里我们把每个流式输出的片段包装成一个简单的 JSON 对象。

5)启动服务器

最后,我们创建 API 实例并运行服务器。

llm deployment p369 1

这样模型就被暴露成了一个 HTTP 端点。

部署,是把一个训练好的模型转变为一个持续运行的服务,让应用能够与它进行实时交互的过程。

一旦模型通过 API 对外暴露,它就要直面真实流量、波动的负载,以及生产环境中的各种运维约束。

到了这个阶段,关注的重点就从「如何提供模型服务」转向了「理解系统在运行过程中的实际表现」。

要想可靠地运营一个 LLM,我们现在需要的是可观测性(observability)。

本站内容仅供学习交流,版权归原作者所有。