vLLM/SGLang推理引擎部署大模型必加参数
根据在工作中部署模型踩的坑而总结的经验,整理部署模型时应该加的docker参数及vLLM/SGLang 推理引擎参数
环境变量
| 环境变量 | 说明 | 示例 |
|---|---|---|
CUDA_VISIBLE_DEVICES | 指定模型运行在的卡号 | CUDA_VISIBLE_DEVICES=3 或 CUDA_VISIBLE_DEVICES=2,3 |
TZ | 设置容器内时区,影响推理引擎输出日志中的时间戳 | TZ=Asia/Shanghai |
容器启动参数
vLLM 和 SGLang 的容器启动参数基本一致,统一整理如下:
| 参数 | 说明 |
|---|---|
--ipc=host | 使用主机 IPC 命名空间,PyTorch 多进程数据加载需要足够的共享内存 |
--network host | 使用主机网络,推理引擎直接绑定主机端口 |
--shm-size | 共享内存大小(/dev/shm);服务器资源充足情况下,建议至少256G+,可以设置成500G;实践发现这个值如果设置的比较小会导致有的模型输出”胡言乱语“,比如对于 DeepSeek-V4-Pro,设置成50G会胡言乱语,设置为128G+则正常 |
--gpus all | 分配所有 GPU;也支持--gpus '"device=2,3"' 来限制,但是实践过程中发现有时候并不能真的限制(比如使用 vLLM 时),还是需要使用CUDA_VISIBLE_DEVICES变量来限制 |
--privileged | 特权模式,允许容器访问主机所有设备(如 InfiniBand 设备) |
--cap-add=IPC_LOCK | 允许锁定内存页,防止被换出到 swap,对 RDMA/InfiniBand 通信必要 |
--cap-add=SYS_ADMIN | 系统管理权限,部分 NUMA 绑定操作需要 |
--cap-add=SYS_NICE | 允许调整进程优先级,推理引擎会设置线程的 CPU 亲和性和调度优先级 |
--ulimit memlock=-1 | 取消内存锁定限制(-1 表示无限制),配合 IPC_LOCK 使用 |
--ulimit stack=67108864 | 设置线程栈大小为 64MB(67108864 bytes),深度模型前向传播时栈需求大 |
--device=/dev/infiniband | 挂载 InfiniBand 设备,多节点分布式推理需要 RDMA 通信(如使用 NCCL/Ray) |
-v /data/model:/data/model | 挂载模型权重目录 |
-e TZ=Asia/Shanghai | 设置容器时区 |
--restart unless-stopped | 异常退出时自动重启 |
示例
以下仅展示容器参数,不包含引擎参数
docker run -itd --name vllm \
-v /data/model:/data/model \
-e TZ=Asia/Shanghai \
--ipc=host \
--network host \
--shm-size 500G \
--gpus all \
--privileged \
--cap-add=IPC_LOCK \
--cap-add=SYS_ADMIN \
--cap-add=SYS_NICE \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--restart unless-stopped \
vllm/vllm-openai:latest \
/data/model/DeepSeek-V3.2
vLLM
引擎必加参数
| 参数 | 默认值 | 说明 |
|---|---|---|
--served-model-name | 模型路径名 | 指定调用模型时使用的名称,客户端请求 API 时使用此名称 |
--enable-prefix-caching | True | 开启前缀缓存(Automatic Prefix Caching),相同前缀的请求可复用 KV Cache,显著提升多轮对话和系统提示词复用场景性能 |
--enable-auto-tool-choice | False | 自动选择工具,启用后模型可自动判断何时调用工具 |
--gpu-memory-utilization | 0.92 | GPU 显存利用率(0~1),vLLM 为模型执行器预留的显存比例,剩余用于 KV Cache |
--enable-chunked-prefill | 自动 | 启用分块预填充,将长 prompt 的 prefill 分块处理,降低首 token 延迟(TTFT) |
--max-num-batched-tokens | 自动 | 单次迭代最大批处理 token 数,控制 prefill 阶段的批大小上限 |
--enable-prompt-tokens-details | False | 在 API 响应的 usage.prompt_tokens_details 中返回缓存的 token 数等详细信息 |
--reasoning-parser | 无 | 推理内容解析器 |
--tool-call-parser | 无 | 工具调用解析器 |
--trust-remote-code | False | 允许执行 HuggingFace 远程代码(某些自定义模型需要) |
--host | 127.0.0.1 | 服务器监听地址,生产部署通常设为 0.0.0.0 |
--port | 8000 | 服务器监听端口 |
注意:
- vLLM 默认在主端口的
/metrics路径暴露 Prometheus 指标,无需额外参数
引擎常用参数
| 参数 | 默认值 | 说明 |
|---|---|---|
--max-num-seqs | 自动 | 单次迭代最大序列数,控制并发请求数上限 |
--kv-cache-dtype | auto | KV Cache 数据类型:auto/fp8_e4m3/fp8_e5m2/bfloat16。使用 FP8 可减少约一半 KV Cache 显存 |
--tensor-parallel-size / -tp | 1 | 张量并行数,跨 GPU 切分模型层,需相同数量 GPU |
--pipeline-parallel-size / -pp | 1 | 流水线并行数,跨 GPU 切分模型层,支持跨节点 |
--data-parallel-size / -dp | 1 | 数据并行数,每个 DP 副本独立处理请求 |
--enable-expert-parallel / -ep | False | 对 MoE 模型使用专家并行而非张量并行 |
--max-model-len | 自动推导 | 模型最大上下文长度(prompt + output),支持 k/m/g 格式如 8k、32k |
推测解码(Speculative Decoding / MTP)
vLLM 的推测解码参数统一通过 --speculative-config / -sc 以 JSON 对象传递,不再使用单独的 --speculative-* 顶层参数。
JSON CLI 参数传递方式:vLLM 支持两种等价的 JSON 参数传递方式——JSON 字符串或逐键点分写法,以下两种写法完全等价:
# 方式一:JSON 字符串 --speculative-config '{"method":"mtp","num_speculative_tokens":1}' # 方式二:逐键点分写法 --speculative-config.method mtp --speculative-config.num_speculative_tokens 1嵌套键用
.连接,例如--speculative-config.draft_tensor_parallel_size 1。
| 参数 | 默认值 | 说明 |
|---|---|---|
--speculative-config / -sc | 无 | 推测解码配置入口,接受 JSON 字符串或逐个键值对 |
--speculative-config JSON 通用键:
https://docs.vllm.ai/en/latest/api/vllm/config/speculative/#vllm.config.speculative
| 键名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
method | string | None | 推测方法:draft_model / ngram / suffix / mtp / eagle / eagle3 / dflash / custom_class。省略时 vLLM 尝试从配置自动推断 |
model | string | None | 草稿模型名称、EAGLE 头或辅助模型标识符。ngram/suffix/mtp 方法通常可省略 |
num_speculative_tokens | int > 0 | None | 每步提议的推测 token 数量。对于无法从模型元数据推断的方法为必填项 |
draft_tensor_parallel_size | int >=1 | None | 草稿模型的张量并行度,只能是 1 或与目标模型的 TP 相同 |
parallel_drafting | bool | false | 启用并行起草,所有推测 token 并行生成而非顺序生成。仅与 EAGLE 和 draft_model 方法兼容 |
Docker 启动示例
docker run -itd --name vllm \
-v /data/model:/data/model \
-v /model:/model \
-e TZ=Asia/Shanghai \
--ipc=host \
--network host \
--shm-size 500G \
--gpus all \
--privileged \
--cap-add=IPC_LOCK \
--cap-add=SYS_ADMIN \
--cap-add=SYS_NICE \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--restart unless-stopped \
vllm/vllm-openai:latest \
/model/DeepSeek-V3.2 \
--served-model-name deepseek-v3 \
--enable-prefix-caching \
--enable-auto-tool-choice \
--gpu-memory-utilization 0.95 \
--enable-prompt-tokens-details
进入容器调试:
vLLM 镜像中设置的 entrypoint 是 vllm serve,如果需要启动一个容器方便测试部署命令,可以在运行容器时通过 --entrypoint 指定 entrypoint:
docker run -itd --name vllm \
-v /data/model:/data/model \
-v /model:/model \
-e TZ=Asia/Shanghai \
--ipc=host \
--network host \
--shm-size 50G \
--gpus all \
--privileged \
--cap-add=IPC_LOCK \
--cap-add=SYS_ADMIN \
--cap-add=SYS_NICE \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--entrypoint /bin/bash \
--restart unless-stopped \
vllm/vllm-openai:latest
SGLang
引擎必加参数
| 参数 | 默认值 | 说明 |
|---|---|---|
--served-model-name | None | 覆盖 OpenAI API /v1/models 端点返回的模型名称 |
--enable-cache-report | False | 在返回结果的 usage.prompt_tokens_details 中返回 cached token 数量 |
--host | 127.0.0.1 | HTTP 服务器地址 |
--port | 30000 | HTTP 服务器端口 |
--enable-metrics | False | 启用 Prometheus 监控指标 |
--trust-remote-code | False | 允许执行 HuggingFace 远程代码 |
--context-length | None | 覆盖模型最大上下文长度,不指定则使用模型 config.json 中的值 |
--mem-fraction-static | None(自动) | 模型权重 + KV Cache 占用的显存比例,显存不足时可调小此值 |
--chunked-prefill-size | None | 分块预填充每个 chunk 的最大 token 数,设为 -1 则禁用分块预填充 |
--max-prefill-tokens | 16384 | 单个 prefill batch 最大 token 数 |
--reasoning-parser | None | 推理模型解析器:deepseek-r1/deepseek-v3/glm45/gpt-oss/kimi/qwen3/qwen3-thinking/step3 |
--tool-call-parser | None | 工具调用解析器:deepseekv3/deepseekv31/glm/glm45/glm47/gpt-oss/kimi_k2/llama3/mistral/pythonic/qwen/qwen25/qwen3_coder/step3 |
--allow-auto-truncate | False | 允许自动截断超出最大输入长度的请求,而不是返回错误 |
引擎常用参数
内存与调度/并行策略等
| 参数 | 默认值 | 说明 |
|---|---|---|
--max-running-requests | None | 最大同时运行的请求数 |
--max-queued-requests | None | 最大排队请求数 |
--max-total-tokens | None | 内存池中的最大 token 数,不指定则根据显存比例自动计算 |
--kv-cache-dtype | auto | KV Cache 数据类型:auto/fp8_e5m2/fp8_e4m3/bf16/bfloat16/fp4_e2m1 |
--tensor-parallel-size / --tp-size / --tp | 1 | 张量并行数 |
--pipeline-parallel-size / --pp-size | 1 | 流水线并行数 |
--data-parallel-size / --dp-size | 1 | 数据并行数 |
--expert-parallel-size / --ep-size / --ep | 1 | 专家并行数(MoE 模型) |
--moe-a2a-backend | none | MoE 专家并行 All-to-All 通信后端:none/deepep/mooncake/mori/nixl/ascend_fuseep |
--dist-init-addr / --nccl-init-addr | None | 多节点分布式初始化地址(如 192.168.0.2:25000) |
--nnodes | 1 | 多节点推理的节点数 |
--node-rank | 0 | 当前节点的 rank |
内核后端
| 参数 | 默认值 | 说明 |
|---|---|---|
--attention-backend | None | 注意力层内核后端:triton/flashinfer/fa3/fa4/flashmla/trtllm_mla 等 |
--fp8-gemm-backend | auto | FP8 GEMM 后端:auto/deep_gemm/flashinfer_trtllm/flashinfer_cutlass/cutlass/triton |
--moe-runner-backend | auto | MoE 计算后端:auto/deep_gemm/triton/flashinfer_trtllm/flashinfer_cutlass/cutlass |
推测解码
| 参数 | 默认值 | 说明 |
|---|---|---|
--speculative-algorithm | None | 推测解码算法:EAGLE/EAGLE3/NEXTN/STANDALONE/NGRAM |
--speculative-draft-model-path | None | 草稿模型路径 |
--speculative-num-steps | None | 草稿模型采样步数 |
--speculative-eagle-topk | None | EAGLE 每步采样的 token 数 |
Docker 启动示例
docker run -itd --name sgl \
-v /data/model:/data/model \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
--ipc=host \
--network host \
--shm-size 500G \
--gpus all \
--privileged \
--cap-add=IPC_LOCK \
--cap-add=SYS_ADMIN \
--cap-add=SYS_NICE \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
lmsysorg/sglang:latest \
sglang serve \
--model-path /data/model/MiniMax--MiniMax-M2.7 \
--enable-cache-report \
--enable-metrics \
--mem-fraction-static 0.9
两个引擎参数对照表
| 功能 | vLLM | SGLang |
|---|---|---|
| 模型路径 | 位置参数(如 /model/xxx) | --model-path |
| API 模型名称 | --served-model-name | --served-model-name |
| GPU 显存比例 | --gpu-memory-utilization (0.92) | --mem-fraction-static (自动) |
| KV Cache 数据类型 | --kv-cache-dtype | --kv-cache-dtype |
| 前缀缓存 | --enable-prefix-caching | 默认启用(RadixAttention) |
| 分块预填充 | --enable-chunked-prefill | --chunked-prefill-size |
| 张量并行 | --tensor-parallel-size / -tp | --tensor-parallel-size / --tp-size / --tp |
| 流水线并行 | --pipeline-parallel-size / -pp | --pipeline-parallel-size / --pp-size |
| 数据并行 | --data-parallel-size / -dp | --data-parallel-size / --dp-size |
| 量化方法 | --quantization / -q | --quantization |
| 监听地址 | --host (127.0.0.1) | --host (127.0.0.1) |
| 监听端口 | --port (8000) | --port (30000) |
| 推理解析器 | --reasoning-parser | --reasoning-parser |
| 工具调用 | --enable-auto-tool-choice + --tool-call-parser | --tool-call-parser |
| 缓存 token 报告 | --enable-prompt-tokens-details | --enable-cache-report |
| Prometheus 指标 | 默认在 /metrics 暴露 | --enable-metrics(需显式开启) |
| 信任远程代码 | --trust-remote-code | --trust-remote-code |
| 最大上下文长度 | --max-model-len | --context-length |
| 推测解码 | --speculative-config / -sc(JSON 对象) | --speculative-algorithm + 相关参数 |
| 最大并发序列数 | --max-num-seqs | --max-running-requests |