大模型推理引擎决定了部署成本和响应延迟,TensorRT-LLM和vLLM是当前工程实践中最主流的两个选项。本文从部署流程、性能基准、功能覆盖三个维度做对比,给出不同场景下的选型建议。
推理引擎核心架构差异
TensorRT-LLM是NVIDIA推出的推理加速库,底层基于TensorRT构建,将大模型计算图编译为NVIDIA GPU原生执行计划。其核心优势在于算子级融合(如Flash Attention、KV Cache量化)和Int4/Int8量化推理,能够将LLaMA、Qwen等模型在A100/H100上的推理吞吐推到硬件上限。
vLLM由UC Berkeley团队开源,核心创新是PagedAttention机制——借鉴操作系统虚拟内存分页管理KV Cache,消除显存碎片,使batch size在保持低延迟的同时显著增大。vLLM对硬件中立性更好,支持NVIDIA GPU和AMD GPU。
TensorRT-LLM部署流程
TensorRT-LLM的部署链路较长,需要先将模型权重转换为TensorRT引擎格式,再通过C++ Runtime或Python API加载执行。
# 安装TensorRT-LLM
pip install tensorrt-llm
# 转换HuggingFace模型为TensorRT引擎
python build.py --model_dir ./Qwen2-7B-Chat \
--dtype float16 \
--use_gpt_attention_plugin \
--use_gemm_plugin \
--paged_kv_cache \
--remove_input_padding \
--output_dir ./qwen2-7b-engine
# 启动Triton Inference Server
docker run --gpus all -v $(pwd)/qwen2-7b-engine:/models \
-p 8000:8000 -p 8001:8001 -p 8002:8002 \
nvcr.io/nvidia/tritonserver:24.09-py3 \
tritonserver --model-repository=/models
引擎构建阶段支持的关键参数:
--paged_kv_cache:启用PagedAttention,与vLLM类似--use_gemm_plugin:融合矩阵乘法算子,减少kernel launch开销--int8_kv_cache:将KV Cache压缩为Int8,节省约50%显存--tp_size=2:张量并行度,对大于13B的模型需要多卡
vLLM部署流程
vLLM的部署更简洁,直接加载HuggingFace模型,无需编译引擎:
# 安装vLLM
pip install vllm
# 启动OpenAI兼容API服务
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2-7B-Chat \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--max-model-len 32768 \
--enable-prefix-caching \
--dtype float16
# 或使用Docker部署
docker run --gpus all -p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai:latest \
--model Qwen/Qwen2-7B-Chat \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9
性能基准压测对比
在统一测试条件下对两个引擎做基准压测。测试环境:单卡A100 80GB,模型Qwen2-7B-Chat,输入128 tokens,输出256 tokens,FP16精度。
| 指标 | TensorRT-LLM | vLLM |
|---|---|---|
| 首Token延迟 (P50) | 18ms | 23ms |
| 首Token延迟 (P99) | 35ms | 52ms |
| 吞吐 (tokens/s) | 4,200 | 3,800 |
| 最大并发请求 | 512 | 480 |
| 显存利用率 | 82% | 90% |
压测脚本使用vLLM自带benchmark工具,TensorRT-LLM使用Triton Performance Analyzer:
# vLLM基准测试
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2-7B-Chat &
python benchmark_serving.py \
--backend vllm \
--model Qwen/Qwen2-7B-Chat \
--num-prompts 500 \
--request-rate 20
# Triton Performance Analyzer
perf_analyzer -m tensorrt_llm \
-u localhost:8001 \
--concurrency-range 1,256,32 \
--input-data prompt.json
功能特性对比
| 功能 | TensorRT-LLM | vLLM |
|---|---|---|
| FP16/BF16 | 支持 | 支持 |
| INT8/INT4量化 | 原生支持(SmoothQuant, AWQ) | 支持(AWQ, GPTQ) |
| Prefix Caching | 支持 | v0.5+支持 |
| 多模态模型 | 有限支持 | 支持LLaVA等 |
| AMD GPU | 不支持 | 支持 |
| LoRA动态加载 | 支持 | v0.5+支持 |
| Speculative Decoding | 支持 | 支持 |
选型建议
如果生产环境全部使用NVIDIA GPU且追求极致吞吐,TensorRT-LLM的算子融合和量化推理能拿到10%-30%的额外性能收益。代价是引擎编译耗时较长,模型升级或prompt模板变更需要重新构建引擎,迭代周期通常为30-60分钟。
vLLM的优势在于部署简单和迭代速度快,从拉取权重到API可用通常在5分钟以内。对于中小团队、多模型A/B测试场景、需要频繁切换模型版本的环境,vLLM的工程效率优势明显。
实际部署中可以两者结合:开发验证阶段用vLLM快速迭代,生产上线时用TensorRT-LLM榨取硬件性能。关键前提是两端对齐模型版本、tokenizer和prompt模板,避免推理结果不一致。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/da-mo-xing-tui-li-yin-qing-xuan-xing-shi-zhan-tensorrtllm/