跳到内容

在线服务

vLLM 提供了一个兼容多种接口的 HTTP 服务器!

兼容 OpenAI 的服务器

我们目前支持以下 OpenAI API

Anthropic API

  • Anthropic 消息 API (/v1/messages, /v1/messages/count_tokens)

Cohere API

Pooling API

有关 pooling 模型的更多详情,请参考 此页面

语音转文本 (Speech to Text) API

有关语音转文本的更多详情,请参考 此页面

自定义 API

Instrumentator API

基础 API

  • /version - 版本信息
  • /load - 服务器负载指标
  • /v1/models - 列出可用模型
  • /health - 健康检查

指标 (Metrics) API

有关指标的更多详情,请参考 此页面

  • /metrics - 兼容 Prometheus 的指标 HTTP 端点

离线 API 文档

FastAPI 的 /docs 端点默认需要互联网连接。要在离线(气隙)环境中启用访问,请使用 --enable-offline-docs 标志

vllm serve NousResearch/Meta-Llama-3-8B-Instruct --enable-offline-docs

LoRA 动态加载

API 服务器中启用了 LoRA 动态加载和卸载。这应当仅用于本地开发!

  • /v1/load_lora_adapter - LoRA 动态加载
  • /v1/unload_lora_adapter - LoRA 动态卸载

性能分析 API

有关 vLLM 性能分析的更多详情,请参考 此页面

  • /start_profile - 启动 PyTorch 分析器
  • /stop_profile - 停止 PyTorch 分析器

SageMaker API

  • /ping - SageMaker 健康检查
  • /invocations - 兼容 SageMaker 的端点(路由到与 /v1 端点相同的推理函数)

水平扩展 API

Tokens 输入输出 (IN <> OUT) API

  • /inference/v1/generate - 生成补全
  • /abort_requests - 中止进行中的请求(仅当同时设置 --tokens-only 时)

渲染器 (Renderer) API

有关渲染器 API 的更多详情,请参考 此页面

Derenderer API

  • /v1/completions/derender - Derenderer 文本补全请求
  • /v1/chat/completions/derender - Derenderer 对话补全请求

分词 (Tokenize) API

  • /tokenize - 文本分词
  • /detokenize - 词元 (tokens) 反分词
  • /tokenizer_info - 获取完整的分词器信息,包括对话模板和配置

弹性专家并行 (EEP)

  • /scale_elastic_ep - 触发缩放操作
  • /is_scaling_elastic_ep - 检查是否正在进行缩放

开发模式下的服务器

使用 VLLM_SERVER_DEV_MODE=1 标志时,你将启用开发端点。

安全警告:这些端点不应用于生产环境!

缓存管理 API

  • /reset_prefix_cache - 重置前缀缓存(可能会中断服务)
  • /reset_mm_cache - 重置多模态缓存(可能会中断服务)
  • /reset_encoder_cache - 重置编码器缓存(可能会中断服务)

权重传输 API (强化学习训练)

有关权重传输的更多详情,请参考 此页面

  • /pause - 暂停生成(会导致拒绝服务)
  • /resume - 恢复生成
  • /is_paused - 检查生成是否已暂停
  • /abort_requests - 在不暂停调度程序的情况下中止进行中的请求(所有请求或给定的 request_ids
  • /init_weight_transfer_engine - 为 RLHF 初始化权重传输引擎
  • /start_weight_update - 为权重更新准备推理引擎。
  • /update_weights - 更新模型权重(可能会改变模型行为)
  • /finish_weight_update - 完成权重更新
  • /get_world_size - 获取分布式 World Size

集体 RPC (Collective RPC)

  • /collective_rpc - 在引擎上执行任意 RPC 方法(极端危险)

服务器信息

  • /server_info - 获取详细的服务器配置

睡眠模式 API

有关睡眠模式的更多详情,请参考 此页面

  • /sleep - 使引擎进入睡眠状态(会导致拒绝服务)
  • /wake_up - 将引擎从睡眠中唤醒
  • /is_sleeping - 检查引擎是否处于睡眠状态

对话模板

为了使语言模型支持对话协议,vLLM 要求模型在其分词器配置中包含对话模板。对话模板是一个 Jinja2 模板,它规定了角色、消息和其他对话特定词元在输入中是如何编码的。

NousResearch/Meta-Llama-3-8B-Instruct 的对话模板示例可以在 这里 找到

有些模型虽然经过了指令/对话微调,但并未提供对话模板。对于这些模型,你可以通过 --chat-template 参数手动指定其对话模板(文件路径或字符串形式)。如果没有对话模板,服务器将无法处理对话,所有对话请求都会报错。

vllm serve <model> --chat-template ./path-to-chat-template.jinja

vLLM 社区为热门模型提供了一系列对话模板。你可以在 examples 目录下找到它们。

随着多模态对话 API 的加入,OpenAI 规范现在接受一种新格式的对话消息,该格式同时指定了 typetext 字段。示例如下

completion = client.chat.completions.create(
    model="NousResearch/Meta-Llama-3-8B-Instruct",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Classify this sentiment: vLLM is wonderful!"},
            ],
        },
    ],
)

大多数 LLM 的对话模板期望 content 字段是一个字符串,但一些较新的模型(如 meta-llama/Llama-Guard-3-1B)期望内容按照请求中的 OpenAI 架构进行格式化。vLLM 提供尽力而为的自动检测支持,并会记录类似于 "Detected the chat template content format to be..." 的日志,且会在内部转换传入请求以匹配检测到的格式。格式可能是以下之一:

  • "string":字符串。
    • 示例:"Hello world"
  • "openai":字典列表,类似于 OpenAI 架构。
    • 示例:[{"type": "text", "text": "Hello world!"}]

如果结果不符合预期,你可以设置 --chat-template-content-format 命令行参数来覆盖所使用的格式。

Ray Serve LLM

Ray Serve LLM 可实现 vLLM 引擎的可扩展、生产级推理服务。它与 vLLM 紧密集成,并扩展了自动缩放、负载均衡和反压 (back-pressure) 等功能。

关键能力

  • 提供兼容 OpenAI 的 HTTP API 以及 Pythonic API。
  • 无需修改代码即可从单 GPU 扩展到多节点集群。
  • 通过 Ray 仪表板和指标提供可观测性和自动缩放策略。

以下示例展示了如何使用 Ray Serve LLM 部署像 DeepSeek R1 这样的大型模型: examples/ray_serving/ray_serve_deepseek.py

通过官方的 Ray Serve LLM 文档 了解更多信息。