vllm 大模型推理框架

vLLM 通过命令行工具 python -m vllm.entrypoints.api_server 启动 OpenAI 兼容的 API 服务器,其参数涵盖了模型加载、推理、调度和服务的各个方面。

启动命令基本结构

bash
python -m vllm.entrypoints.api_server \
    --model <model_name_or_path> \
    [其他参数]

A. 核心模型参数

这些参数决定了加载哪个模型以及如何服务。

参数名类型默认值说明
model str (必填) 要服务的模型标识符。可以是 Hugging Face 模型 ID(如 meta-llama/Llama-3.1-8B-Instruct)、本地模型路径、或 vLLM 支持的其他仓库的模型。
tokenizer str None 指定要使用的分词器。如果未设置,则使用与 model 相同的值。这在模型和分词器位于不同路径时有用。
tokenizer-mode str auto 指定如何加载分词器。选项:auto(自动检测), slow(使用 Hugging Face 慢速但准确的分词器)。通常不需要更改。
trust-remote-code action="store_true" False 安全注意:是否信任远程代码(例如,从 Hugging Face 加载模型时,如果模型有自定义的 modeling_xxx.py 文件)。必须显式传递此参数才允许执行。
download-dir str None 下载模型和分词器的目录。默认为 Hugging Face 的缓存目录。
load-format str auto 模型的加载格式。选项:auto(自动), pt(PyTorch weights), safetensors(安全张量), npcache(拆分后的张量缓存), dummy(随机权重,用于基准测试)。
dtype str auto 模型权重的数据类型。选项:auto(自动), half(float16), bfloat16float(float32)。为了性能和内存,通常使用 bfloat16 或 float16
seed int 0 随机数生成器的种子,用于可重复的采样。

B. 推理与性能参数

这些参数控制着生成文本的方式和质量。

参数名类型默认值说明
max-model-len int None 重要:模型上下文窗口的最大长度(token 数)。如果不指定,vLLM 会尝试从模型配置自动检测,但有时会出错,导致 OOM。如果遇到 OOM,应手动设置一个更小的值。
gpu-memory-utilization float 0.9 重要:GPU 内存利用率。介于 0 和 1 之间。如果遇到 CUDA OOM 错误,可以降低此值(如 0.8),为系统预留更多内存。
swap-space float 4 CPU 和 GPU 之间交换的存储空间大小(GiB)。当 GPU 内存不足时,使用 CPU 内存作为交换空间。
pipeline-parallel-size int 1 分布式:流水线并行(PP)大小。用于跨多个 GPU 对模型层进行拆分。
tensor-parallel-size int 1 分布式:张量并行(TP)大小。用于将单个层的权重拆分到多个 GPU 上。对于大模型(如 70B+)至关重要。
block-size int 16 PagedAttention 关键参数:KV Cache 中每个块(block)的 token 数量。通常不需要修改,除非进行深度优化。
max-num-batched-tokens int None 一次预填充操作中 token 数量的上限。可用于防止单个巨大请求影响整个系统的吞吐量。
max-num-seqs int 256 最大并发请求数(序列数)。如果收到的请求超过此值,将被排队。
max-paddings int 256 最大填充数量。当启用动态批处理时,为了对齐序列而添加的填充 token 数上限。
max-lora-rank int 16 最大 LoRA 适配器的秩(rank)。
max-cpu-loras int 4 保留在 CPU 内存中的 LoRA 适配器的最大数量。

C. 调度与优化参数

这些参数控制着 vLLM 的核心调度器。

参数名类型默认值说明
scheduler str vllm 重要:调度策略。选项:vllm(默认,最优吞吐量), fcfs(先到先服务,最优延迟)。
disable-log-stats action="store_true" False 禁用日志统计。
log-requests action="store_true" False 记录所有收到的请求。用于调试。
quantization str None 量化方法。选项:awq(激活感知权重量化), squeezellmgptqfp8(实验性)等。用于减少显存占用,提高推理速度。
enforce-eager action="store_true" False 强制使用 eager 模式而不是 CUDA graph。用于调试或某些不兼容 CUDA graph 的模型。
max-log-len int None 请求日志的最大长度。

D. API 服务器参数

这些参数控制着 API 服务器本身的行为。

参数名类型默认值说明
host str 0.0.0.0 API 服务器绑定的网络地址。0.0.0.0 表示监听所有网络接口。
port int 8000 API 服务器监听的端口。
uvicorn-log-level str info Uvicorn 服务器的日志级别。选项:debuginfowarningerrorcritical
allowed-origins list ["*"] 安全:允许的 CORS 源。可以传入一个 URL 列表来限制哪些前端可以访问 API。默认 ["*"] 允许所有,生产环境应限制。
allowed-methods list ["*"] 安全:允许的 HTTP 方法。
allowed-headers list ["*"] 安全:允许的 HTTP 头。
served-model-name str None 在 OpenAI API 响应中返回的模型名称。如果未设置,则使用 model 参数的值。
chat-template str None 与模型一起使用的聊天模板的路径。如果不指定,vLLM 将尝试从分词器自动加载。
response-role str assistant 聊天响应中使用的默认角色。通常不需要修改。
ssl-keyfile str None SSL 密钥文件路径(.key),用于启用 HTTPS。
ssl-certfile str None SSL 证书文件路径(.crt),用于启用 HTTPS。
root-path str None 设置 ASGI 根路径,当服务器位于代理之后时有用。

E. 工具调用相关参数

参数名类型默认值说明
enable-auto-tool-choice action="store_true" False 启用后,模型可以自主决定是否需要调用工具。
tool-call-parser str auto 指定如何解析模型输出的工具调用。选项:autojsongrammar

完整示例命令

结合以上参数,一个典型的生产环境启动命令可能如下所示:

vllm serve meta-llama/Llama-3.1-8B-Instruct \
    --host 0.0.0.0 \
    --port 8000 \
    --tensor-parallel-size 2 \          # 在两个 GPU 上张量并行
    --gpu-memory-utilization 0.85 \     # 预留一些 GPU 内存给系统
    --max-model-len 8192 \              # 限制上下文长度以防止 OOM
    --max-num-seqs 128 \                # 限制最大并发请求数
    --scheduler vllm \                  # 使用 vLLM 调度器以获得高吞吐
    --dtype bfloat16 \                  # 使用 bfloat16 节省显存
    --trust-remote-code \               # 允许加载自定义模型代码
    --enforce-eager \                   # 如果遇到 CUDA graph 问题则启用
    --allowed-origins "https://myapp.com" "https://staging.myapp.com" # 限制 CORS
    --enable-auto-tool-choice           # 启用自动工具调用

 

posted @ 2025-10-15 11:28  wangssd  阅读(55)  评论(0)    收藏  举报