欢迎光临
我们一直在努力

AI 推理引擎横向评测 2024:vLLM、TGI、llama.cpp 与 TensorRT-LLM 的综合对比

AI 推理引擎横向评测 2024:vLLM、TGI、llama.cpp 与 TensorRT-LLM 的综合对比

一、推理引擎选型的工程痛点

AI 推理引擎的选型不是"选最快的",而是在延迟、吞吐、显存、生态、部署复杂度五维空间中找到最优平衡点。四个主流引擎各有优势:vLLM 吞吐最高(PagedAttention)、TGI 生产稳定性最好(HuggingFace 生态)、llama.cpp 本地部署最灵活(无 GPU 依赖)、TensorRT-LLM 单请求延迟最低(NVIDIA 专用优化)。

七月对四个引擎进行了系统性基准测试,发现"性能排名"随场景变化——vLLM 在高并发场景吞吐最高,但单请求延迟不如 TensorRT-LLM;llama.cpp 在 CPU 场景无可替代,但 GPU 场景不如其他三个。

二、四个引擎的架构差异对比模型

从架构层面分析四个引擎的设计差异,理解性能差异的根因。

vLLM:吞吐优先的架构

vLLM 的核心创新是 PagedAttention——将 KV Cache 按虚拟内存式的页管理,消除了预分配浪费。combined with continuous batching,vLLM 的 GPU 利用率可达 90%+。架构特点:Python 为主 + CUDA kernel 优化,API 服务基于 FastAPI。

优势场景:高并发(QPS > 100)、变长序列(对话/生成)、显存容量有限(PagedAttention 减少浪费)。劣势场景:单请求延迟(continuous batching 的排队开销)、GPU 不可用场景(不支持 CPU 推理)、非 NVIDIA GPU(CUDA 专用)。

TGI:生态优先的架构

TGI(Text Generation Inference)是 HuggingFace 的推理服务,核心优势是生态集成——直接加载 HuggingFace Hub 的模型,支持 safetensors 格式,内置 token streaming。架构特点:Rust 服务框架 + Python 推理核心,Flash Attention 优化。

优势场景:HuggingFace 模型部署(一键加载)、生产稳定性(Rust 框架健壮)、token streaming(实时生成体验)。劣势场景:非 HuggingFace 模型(需转换格式)、极致吞吐(不如 vLLM 的 PagedAttention)、非 NVIDIA GPU(同样依赖 CUDA)。

llama.cpp:灵活优先的架构

llama.cpp 是纯 C++ 实现,无 Python/GPU 依赖。核心优势是灵活性——支持 CPU/Metal/CUDA/Vulkan 多后端,支持多种量化格式(Q4_0 到 FP16),单文件部署。架构特点:C++ 核心计算 + ggml 量化格式 + 多后端抽象。

优势场景:CPU 推理(无可替代)、Apple Silicon(Metal 加速)、边缘设备(无 GPU 环境)、开发调试(单文件快速启动)。劣势场景:高并发吞吐(无 continuous batching)、大模型推理(缺少 tensor parallel)、生产级服务化(无内置 API 服务)。

TensorRT-LLM:延迟优先的架构

TensorRT-LLM 是 NVIDIA 的专用推理引擎,核心优势是延迟——预编译的 CUDA kernel + Tensor Core 极致利用 + 静态形状优化。架构特点:模型编译为 TensorRT engine(预编译),运行时仅执行预编译的 kernel。

优势场景:单请求延迟最低、NVIDIA GPU 极致利用、延迟敏感的在线推理。劣势场景:编译时间长(模型编译需 10-30 分钟)、不支持动态形状(需固定 batch size 和序列长度)、非 NVIDIA GPU(完全不支持)、模型更新需重新编译。

三、基准测试框架与对比实现

以下代码展示系统性基准测试框架,覆盖延迟、吞吐、显存三维度。

/// 推理引擎基准测试配置
struct EngineBenchmark {
engine: InferenceEngine,
model: ModelSpec,
hardware: HardwareProfile,
// 测试场景配置
scenarios: Vec<TestScenario>,
}

enum InferenceEngine {
VLLM,
TGI,
LlamaCpp,
TensorRTLLM,
}

struct TestScenario {
name: String,
concurrency: u32,
prompt_length: u32,
max_output_length: u32,
}

/// 基准测试结果:三维度对比
struct BenchmarkResult {
engine: InferenceEngine,
scenario: TestScenario,
// 首 token 延迟(Time to First Token)
ttft_ms: f64,
// 每 token 生成延迟
tpot_ms: f64,
// P99 延迟
p99_latency_ms: f64,
// 吞吐量 tokens/s
throughput: f64,
// 显存占用峰值
peak_memory_gb: f64,
// 首次部署时间(模型加载+编译)
deployment_time_sec: f64,
}

/// 系统性基准测试:覆盖所有场景
fn run_systematic_benchmark(
engines: &[InferenceEngine],
model: &ModelSpec,
hardware: &HardwareProfile,
) -> Vec<BenchmarkResult> {
let scenarios = vec![
// 低并发短序列:延迟优先
TestScenario { name: "low_conc_short_seq", concurrency: 1, prompt_length: 128, max_output_length: 32 },
// 中并发中序列:通用场景
TestScenario { name: "mid_conc_mid_seq", concurrency: 10, prompt_length: 512, max_output_length: 128 },
// 高并发长序列:吞吐优先
TestScenario { name: "high_conc_long_seq", concurrency: 50, prompt_length: 2048, max_output_length: 512 },
// CPU 推理场景
TestScenario { name: "cpu_only", concurrency: 1, prompt_length: 128, max_output_length: 128 },
];

engines.iter().flat_map(|engine| {
scenarios.iter().map(|scenario| {
run_single_benchmark(*engine, model, hardware, scenario)
})
}).collect()
}

/// 场景推荐矩阵:根据场景选择最优引擎
fn recommend_engine(results: &[BenchmarkResult], target: OptTarget) -> InferenceEngine {
match target {
// 延迟优先:单请求最低延迟
OptTarget::LowLatency => {
results.iter()
.filter(|r| r.scenario.concurrency == 1)
.min_by_key(|r| OrderedFloat(r.p99_latency_ms))
.map(|r| r.engine)
.unwrap()
}
// 吞吐优先:最高 tokens/s
OptTarget::HighThroughput => {
results.iter()
.filter(|r| r.scenario.concurrency >= 10)
.max_by_key(|r| OrderedFloat(r.throughput))
.map(|r| r.engine)
.unwrap()
}
// 显存优先:最低显存占用
OptTarget::LowMemory => {
results.iter()
.min_by_key(|r| OrderedFloat(r.peak_memory_gb))
.map(|r| r.engine)
.unwrap()
}
// 生态优先:HuggingFace 模型
OptTarget::Ecosystem => InferenceEngine::TGI,
}
}

四、引擎选型的场景匹配矩阵

vLLM 适用场景:高并发推理(QPS > 50)、对话/生成类应用(变长序列)、显存有限(PagedAttention 减少浪费)、GPU 集群部署。禁用场景:单请求延迟极度敏感(排队开销)、CPU 推理(不支持)、非 NVIDIA GPU。

TGI 适用场景:HuggingFace 模型一键部署、生产稳定性优先、需要 token streaming、中等并发(QPS 10-50)。禁用场景:极致吞吐需求(不如 vLLM)、非 HuggingFace 模型、CPU 推理。

llama.cpp 适用场景:CPU 推理(无可替代)、Apple Silicon 本地推理、边缘/嵌入式部署、开发调试。禁用场景:高并发生产推理(无 continuous batching)、大模型 GPU 推理(无 tensor parallel)。

TensorRT-LLM 适用场景:延迟极度敏感(< 50ms P99)、NVIDIA GPU 极致优化、固定形状推理(分类/检测)、编译后长期运行。禁用场景:变长序列(不支持动态形状)、模型频繁更新(每次需重新编译 10-30 分钟)、非 NVIDIA GPU。

结论

  • 四个推理引擎的架构差异决定性能差异:vLLM 吞吐优先、TGI 生态优先、llama.cpp 灵活优先、TensorRT-LLM 延迟优先。
  • vLLM 的 PagedAttention 是高并发吞吐的核心优势,但单请求延迟不如 TensorRT-LLM。
  • llama.cpp 在 CPU 场景无可替代,但在 GPU 高并发场景不如 vLLM/TGI/TensorRT-LLM。
  • TensorRT-LLM 的预编译 kernel 实现最低延迟,但不支持动态形状且每次模型更新需重新编译。
  • 选型应根据场景匹配矩阵而非单一性能排名——不同场景的最优引擎不同。
  • 赞(0)
    未经允许不得转载:171主机测评 » AI 推理引擎横向评测 2024:vLLM、TGI、llama.cpp 与 TensorRT-LLM 的综合对比
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址