vLLM 等开源推理框架部署方案对比
对比 vLLM、TGI、Triton 与 SGLang 的部署入口和验证接口;其中 Triton 通过 vLLM backend 接收请求,帮助你按运行环境与模型约束确定部署路径。
要做部署方案对比,最实用的分组是:独立模型服务看 vllm serve 与 SGLang,容器服务看 TGI 与 SGLang,需要统一模型仓库和协议接入时看 Triton 的 vLLM backend。下面按准备、启动、验证和故障点给出各自路径;比较的是部署边界,不做速度排名,也不混用不同项目的参数。
vllm serve:安装、启动与验证
按 vLLM Quickstart,运行系统应为 Linux,Python 版本应为 3.10 到 3.13。推荐流程是在全新 Python 环境中安装,--torch-backend=auto 会检查已安装的 CUDA 驱动版本并选择相应的 PyTorch 索引。
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
激活环境后,用一个模型名启动服务:
vllm serve Qwen/Qwen2.5-1.5B-Instruct
服务默认监听 http://localhost:8000,可用 --host 和 --port 修改地址;当前一个服务进程一次托管一个模型。需要 API key 检查时,可使用 --api-key 或环境变量 VLLM_API_KEY,多个 key 可放在参数后用于轮换。
curl http://localhost:8000/v1/models
该请求用于确认服务已暴露模型列表。不要只看到进程存在就判断业务接口已经可用。
TGI:用 Docker 启动服务
Hugging Face 的 TGI README 已将 TGI 标为维护模式,仅继续接收小型错误修复、文档改进和轻量维护。使用 NVIDIA GPU 时需要 NVIDIA Container Toolkit,并建议使用 CUDA 版本为 12.2 或更高的驱动。
docker run --gpus all --shm-size 1g -p 8080:80 -v YOUR_VALUE:/data \
ghcr.io/huggingface/text-generation-inference:3.3.5 --model-id YOUR_VALUE
这里需要把两个 YOUR_VALUE 分别替换为数据目录和模型 ID。8080:80 把宿主机端口映射到容器端口,--shm-size 1g 为 NCCL 提供共享内存。容器启动后,可在宿主机端口 8080 查看 /docs 提供的 REST API OpenAPI 文档;TGI 支持 SSE token 流和连续批处理。受限或私有模型还需要设置 HF_TOKEN。
Triton:模型仓库与 vLLM backend
NVIDIA 的 Triton Inference Server README 推荐通过 Docker 镜像使用 Triton。下面的命令是服务器通用启动形式:/models 指向挂载的模型仓库,--load-model 指定要加载的仓库条目;HTTP/REST 与 GRPC 协议基于 KServe。
tritonserver --model-repository=/models \
--model-control-mode explicit \
--load-model densenet_onnx
采用 Triton vLLM Backend README 描述的组合时,请求会进入 vLLM 的 AsyncEngine,inflight batching 和 paged attention 仍由 vLLM 处理。model.json 保存传给 AsyncLLMEngine 的键值参数;多 GPU 模型在 config.pbtxt 中必须把 instance group 的 kind 设置为 KIND_MODEL。
还要留意显存参数:vLLM 默认最多使用 GPU 内存的 90%,该后端示例把 gpu_memory_utilization 设置为 50%。验证时应确认目标模型已经加载,再通过 Triton 对外协议发请求,不能直接把 vLLM 的接口路径套到所有 Triton 模型上。
SGLang:Python 与 Docker 路径
SGLang 安装文档 要求 Python 3.10 或更高版本以及兼容的 CUDA 13 环境。当前镜像使用 CUDA 13,CUDA 12 镜像已经停止发布;latest 标签指向最新稳定版。
uv pip install --prerelease=allow sglang
--prerelease=allow 不应省略:官方文档特别说明,版本低于 0.12.0 的 uv 在缺少该参数时可能静默安装旧版 SGLang 0.5.9。
也可使用容器:
docker pull lmsysorg/sglang:latest
docker run -it --gpus all \
--shm-size 32g \
-p 30000:30000 \
-v "YOUR_VALUE:/root/.cache/huggingface" \
--ipc=host \
lmsysorg/sglang:latest bash
进入容器或准备好的 Python 环境后,按 SGLang Quickstart 启动:
sglang serve YOUR_VALUE --host 0.0.0.0 --port 30000
把 YOUR_VALUE 替换为模型路径,并等待终端出现 The server is fired up and ready to roll!。随后向以下入口发送 POST 请求:
POST http://localhost:30000/v1/chat/completions
Content-Type: application/json
请求体应采用当前 Quickstart 中与所选模型对应的示例,不能只复制路径和请求头。
常见出错点:按启动层定位
- 环境层:先核对各节列出的 Python 与 CUDA 条件,不要假设同一基础镜像能直接运行全部框架。
- 启动层:检查 vLLM Quickstart 中的模型名、监听地址和端口;路径、模型名或占位值不一致都会阻断启动。
- 接口层:TGI 的 README 将
/docs作为 REST API 文档入口;SGLang 则要同时确认 Quickstart 的就绪提示和 POST 路径。 - 资源层:Triton 多 GPU 部署应按 vLLM Backend README 检查
KIND_MODEL和显存参数,不要只增加 GPU 数量而不调整模型配置。
这些步骤依据正文所链接的官方文档整理,使用前请对照当前版本复核;文中没有运行或测量。