NVIDIA TensorRT-LLM 基准测试
Jan 现在除了支持 llama.cpp (opens in a new tab) 之外,还支持 NVIDIA TensorRT-LLM (opens in a new tab),这使得 Jan 成为一个多引擎、对 Nvidia GPU 用户而言速度超快的应用。
我们对 TensorRT-LLM 期待已久,并且在实现它的过程中获得了很多乐趣 (opens in a new tab)。作为这个过程的一部分,我们进行了一些基准测试,以了解 TensorRT-LLM 在消费级硬件(例如,我们在 Jan 的硬件社区 (opens in a new tab)中常见的 4090 (opens in a new tab) 和 3090 (opens in a new tab))上的表现如何。
快来试试吧!Jan 的 TensorRT-LLM 扩展已在 Jan v0.4.9 中提供。我们为您预编译了一些 TensorRT-LLM 模型供您试用:Mistral 7b、TinyLlama-1.1b、TinyJensen-1.1b 😂
有 Bug 或反馈?请通过 GitHub (opens in a new tab) 或 Discord (opens in a new tab) 告诉我们。
一个有趣的旁注:Jan 实际上于 2023 年 6 月开始时是基于 NVIDIA FastTransformer (opens in a new tab) 构建的,它是 TensorRT-LLM 的前身库。TensorRT-LLM 于 2023 年 9 月发布,使其成为一个非常年轻的库。我们很高兴看到其发展路线图!
主要发现

TensorRT-LLM 的表现是:
- 在相同硬件上比 llama.cpp 快 30-70%
- 在连续运行时消耗更少的内存,并且 GPU VRAM 利用率略高于 llama.cpp
- 编译后的模型大小比 llama.cpp 小 20% 以上
- 便利性较低,因为模型必须针对特定的操作系统和 GPU 架构进行编译,而 llama.cpp 则具有“一次编译,到处运行”的可移植性
- 可及性较低,因为它不支持旧代 NVIDIA GPU
为何选择 TensorRT-LLM?
TensorRT-LLM (opens in a new tab) 是 Nvidia 的开源推理库,它集成了 Nvidia 在开源 cuBLAS (opens in a new tab) 库之外的专有优化。
与如今作为跨平台推理引擎主导桌面 AI 的 llama.cpp (opens in a new tab) 相比,TensorRT-LLM 针对 Nvidia GPU 进行了高度优化。llama.cpp 将模型编译成一个单一、通用的 CUDA “后端” (opens in a new tab),可以在多种 Nvidia GPU 上运行;而 TensorRT-LLM 则将模型编译成一个针对特定 GPU 的执行图 (opens in a new tab),该图针对特定 GPU 的张量核心(Tensor Core)、CUDA 核心、显存(VRAM)和内存带宽进行了高度优化。
TensorRT-LLM 通常用于数据中心级的 GPU,在 NVIDIA H100 张量核心 GPU (opens in a new tab) 上可产生令人瞠目结舌的 10,000 tokens/s (opens in a new tab)。我们很好奇 TensorRT-LLM 在消费级 GPU 上的表现如何,并进行了尝试。
| Llama.cpp | TensorRT-LLM |
|---|---|
| 基准 | 速度极快(快 30-70%) |
| 一次编译,跨平台运行 | 针对特定 GPU 架构进行编译和高度优化 |
| 通用且可移植 | 高度优化 |
| 模型编译成单一、通用的 CUDA“后端” (opens in a new tab) | 模型编译成针对特定 GPU 的执行图 (opens in a new tab) |
实验设置
我们在沙盒环境中使用标准化的推理请求进行实验。
- 模型:Mistral 7b 模型,以可比较的
int4量化进行编译和量化。 - 测试运行:每个推理引擎在裸机 PC 上进行 5 批次测试,每批次运行 10 次,期间没有其他应用程序运行。
- 参数:用户默认值,即
batch_size 1,input_len 2048和output_len 512。 - 测量指标:
- CPU、内存数据来自 Jan 系统监视器。
- GPU 显存利用率指标来自
nvidia-smi,并在 14 秒的时间间隔内采集。 - 吞吐量(token/秒)使用 Jan 内置的 Tokens/秒 性能统计 (opens in a new tab)。
我们选择了 批处理大小为 1 (opens in a new tab) 来模拟真实的现实世界用例,因为 Jan 用户很可能一次只发出一个推理请求。我们还使用了 2048 的 input_len 和 512 的 output_len 来模拟典型的聊天机器人用例。
进一步研究:我们发现 GPU 显存利用率难以测量,Windows 上的 nvidia-smi 与 Windows 任务管理器的资源监视器对 NVIDIA GPU 的测量结果不同。经过一番研究 (opens in a new tab)后,我们决定采用 nvidia-smi 的测量值。
硬件选择
我们根据用户的偏好选择了以下 GPU
| NVIDIA GPU | 显存 (GB) | CUDA 核心数 | 张量核心数 | 显存位宽 (bit) | 显存带宽 (GB/s) | 连接速度 (GB/s) |
|---|---|---|---|---|---|---|
| GeForce RTX 4090 (Ada) | 24 | 16,384 | 512 | 384 | ~1000 | PCIe4.0 x16 (约 32) |
| GeForce RTX 3090 (Ampere) | 24 | 10,496 | 328 | 384 | 935.8 | PCIe4.0 x16 (约 32) |
| GeForce RTX 4070 笔记本电脑 GPU (Ada) | 8 | 7680 | 144 | 192 | 272 | PCIe4.0 x4 (约 8) |
| GeForce RTX 4090 eGPU (Ada) | 24 | 16,384 | 512 | 384 | ~1000 | 通过 USB4 USB-C 端口连接的雷电 3(约 1.25-5? (opens in a new tab)) |
llama.cpp 设置
- llama.cpp commit 15499eb (opens in a new tab)
- 我们使用了
GGUF格式的Mistral-7b-q4_k_m,并将ngl设置为100
注意:ngl 是 Number of GPU Layers(GPU 层数)的缩写,其范围从 0(无 GPU 加速)到 120(某些大型模型完全使用 GPU)。
TensorRT-LLM 设置
- TensorRT-LLM 版本 0.7.1 (opens in a new tab) 并在 Windows 上构建
- 对于 TensorRT-LLM,我们使用了
Mistral-7b-int4 AWQ - 我们使用
free_gpu_memory_fraction运行 TensorRT-LLM,以测试其在最低显存消耗下的表现。 - 注意:我们选择 TensorRT-LLM 的 AWQ 量化,是为了更接近地与 GGUF 的 Q4 量化进行比较。
结果
NVIDIA GeForce RTX 4090 GPU
Jan 就是在这台双 4090 工作站上构建的,它最近升级了一个漂亮的机箱。
我们双 4090 集群的原始机箱(或者说没有机箱),发布在 r/localllama (opens in a new tab)
硬件详情
- CPU: Intel 13代
- GPU: NVIDIA GeForce RTX 4090 (Ada - sm 89)
- 内存: 32GB
- 操作系统: Windows 11 Pro
模型详情
- llama.cpp 模型: Mistral 7B v0.2 GGUF Q4_K_M
- TensorRT-LLM 模型: Mistral 7B v0.2 AWQ, 针对单 GPU (Ada) 量化
在这次测试中,我们使用了 Jan 的双 4090 工作站 (opens in a new tab),我们的工程师们分时使用它来构建 Jan。
NVIDIA GeForce RTX 4090 (opens in a new tab) 是最新的顶级桌面 GPU,建议零售价为 1599 美元,采用 Ada 架构。它的显存内内存带宽约为 1000 GB/s,GPU 与 CPU 之间的 PCIe 4.0 x16 通道带宽约为 32 GB/s。
| 指标 | GGUF (使用 CPU) | GGUF (使用 GPU) | TensorRT-LLM | TensorRT-LLM 对比情况 |
|---|---|---|---|---|
| 吞吐量 (token/s) | 14.0 | 100.43 | 170.63 | ✅ 快了 69.89% |
| 最大 GPU 利用率 (%) | 不适用 | 83.50 | 88.50 | 高出 5.99% |
| 最大显存利用率 (%) | 不适用 | 64 | 72.1 | 高出 12.66% |
| 平均内存使用量 (GB) | 0.611 | 7.105 | 4.98 | ✅ 减少 29.88% |
| 磁盘大小 (GB) | 4.07 | 4.06 | 3.05 | ✅ 小了 24.88% |
TensorRT-LLM 通过为 GeForce RTX 4090 GPU 的 Ada 架构构建模型以实现最佳图执行,充分利用其 512 个张量核心、16,384 个 CUDA 核心和 1,000 GB/s 的内存带宽,速度比 llama.cpp 快了近 70%。
llama.cpp 速度较慢的直观原因在于,它将模型编译成一个单一、通用的 CUDA “后端” (opens in a new tab),可以在多种 NVIDIA GPU 上运行。这样做需要 llama.cpp 放弃 TensorRT-LLM 通过编译为特定 GPU 执行图所做的所有优化。
NVIDIA GeForce RTX 3090 GPU
我们的 3090 机器,现在由我们的一位工程师用于构建 Jan
硬件详情
- CPU: Intel 13代
- GPU: NVIDIA GeForce RTX 3090 (Ampere - sm 86)
- 内存: 64GB
- 操作系统: Windows 11 Pro
模型详情
- llama.cpp 模型: Mistral 7B v0.2 GGUF Q4_K_M
- TensorRT-LLM 模型:Mistral 7B v0.2 AWQ,针对单 GPU(Ampere)量化
NVIDIA 的 GeForce RTX 3090 (opens in a new tab) 是一款广受欢迎的桌面 GPU,截至 4 月 24 日,零售价约为 1500 美元。它采用 NVIDIA Ampere 架构。与其后续产品 GeForce RTX 4090 相比,它的 CUDA 核心数(10,496)和张量核心数(328)减少了 33%,内存带宽(约 930 GB/s)减少了 7%。
| 指标 | GGUF (使用 CPU) | GGUF (使用 GPU) | TensorRT-LLM | TensorRT-LLM 对比情况 |
|---|---|---|---|---|
| 吞吐量 (token/s) | 11.42 | 88.70 | 144.19 | ✅ 快了 62.57% |
| 最大 GPU 利用率 (%) | 不适用 | 80.40 | 89.10 | 高出 10.82% |
| 最大显存利用率 (%) | 不适用 | 66.80 | 76.20 | 高出 14.07% |
| 平均内存使用量 (GB) | 0.611 | 2.60 | 0.98 | 减少 62.41% |
| 磁盘大小 (GB) | 4.07 | 4.06 | 3.05 | ✅ 小了 24.88% |
有趣的是,GeForce RTX 3090 仅比 GeForce RTX 4090 慢 16.6%。在 TPS 方面,TensorRT-LLM 比 llama.cpp 快了 62.57%。奇怪的是,在初始模型预热后,它在后续的推理请求中使用的内存可以忽略不计。
NVIDIA GeForce RTX 4070 笔记本电脑 GPU

硬件详情
- 笔记本电脑: Razer Blade 14
- CPU: AMD Ryzen™ 9 8945HS, 8核/16线程
- GPU: NVIDIA GeForce RTX 4070 笔记本电脑 GPU (Ada - sm 89) on PCIe 4.0 x16 (32 GB/s)
- 内存: 32GB
- 操作系统: Windows 11 Pro
模型详情
- llama.cpp 模型: Mistral 7B v0.2 GGUF
Q4_K_M - TensorRT-LLM 模型: Mistral 7B v0.2 AWQ, 针对单 GPU (Ada) 量化
我们还对配备 8GB 显存的 NVIDIA GeForce RTX 4070 笔记本电脑 GPU 进行了基准测试,这是 Jan 用户中一种流行的配置。笔记本电脑 GPU 的性能不如其台式机版本,因为它们为了便携性而牺牲了能耗和散热性能。
| 指标 | GGUF (使用 CPU) | GGUF (使用 GPU) | TensorRT-LLM | 在 GPU 上的差异 |
|---|---|---|---|---|
| 吞吐量 (token/s) | 11.57 | 39.70 | 51.57 | ✅ 快了 29.9% |
| 最大 GPU 利用率 (%) | 不适用 | 80.00 | 84.67 | 高出 5.83% |
| 最大显存利用率 (%) | 不适用 | 72.78 | 81.22 | 高出 11.60% |
| 平均内存使用量 (GB) | 4.49 | 4.44 | 1.04 | ✅ 减少 76.55% |
| 磁盘大小 (GB) | 4.07 | 4.06 | 3.05 | ✅ 小了 24.88% |
在笔记本电脑的独立 GPU 上,TensorRT-LLM 的每秒 token 吞吐量比 llama.cpp 快了 29.9%,但明显慢于台式机 GPU。
其原因很简单:与 4090 相比,GeForce RTX 4070 笔记本电脑 GPU 的 CUDA 核心和张量核心数量减少了 53.1%,显存也更少(8GB 对 24GB)。这减少了 TensorRT-LLM 进行 GPU 特定优化的空间。
GeForce RTX 4070 笔记本电脑 GPU 也比 GeForce RTX 4090 台式机 GPU 慢了约 70%,这显示了较低功耗、较少显存和散热限制对推理速度的硬件影响。
配备 NVIDIA GeForce RTX 4090 eGPU 的笔记本电脑

硬件详情
- 笔记本电脑: Razer Blade 14
- eGPU 盒子: AORUS RTX 4090 GAMING BOX
- CPU: AMD Ryzen™ 9 8945HS, 8核/16线程
- GPU: NVIDIA GeForce RTX 4090 (Ada - sm 89) on eGPU with Thunderbolt 3 connection
- 内存: 32GB
- 操作系统: Windows 11 Pro
模型详情
- llama.cpp 模型: Mistral 7B v0.2 GGUF
Q4_K_M - TensorRT-LLM 模型:Mistral 7B v0.2 AWQ,针对单 GPU(Ampere)量化
我们最后一个基准测试是实验一台 Asus RTX 4090 eGPU (opens in a new tab),它通过一个 雷电 3 端口 (opens in a new tab) 连接到 Razer Blade 14 的 USB4 端口 (opens in a new tab)。理论上,结果应该与 GeForce RTX 4090 桌面 GPU 相当,因为它们具有相同的底层 GPU,但连接速度却大相径庭。
我们认为,观察 TensorRT-LLM 如何处理 CPU 和 GPU 之间通信带宽减少 68.4% 的情况会很有趣。
- eGPU 的雷电 3 连接(1.25-5 GB/s?)
- “设备上”台式机的 PCIe 4.0 x4(约 8 GB/s)
需要帮助:我们实际上不 100% 确定雷电 3 到 USB4 之间的实际连接速度 (opens in a new tab)是多少,因为实际速度似乎与宣传的 5 GB/s 不同。这其中似乎涉及到很多因素,包括实际的线缆本身。如果社区中有人能指导我们,我们将不胜感激!
总的来说,我们在测试中使用了中高端的 NVIDIA 桌面 GPU,因为 TensorRT-LLM 的性能提升在显存更大的设备上最为明显。对于配置较低的机器用户来说,llama.cpp 更好。
| 指标 | GGUF (使用 CPU) | GGUF (使用 GPU) | TensorRT-LLM | 在 GPU 上的差异 |
|---|---|---|---|---|
| 吞吐量 (token/s) | 11.56 | 62.22 | 104.95 | ✅ 快了 68.66% |
| 最大显存利用率 (%) | 0 | 65 | 99 | 高出 52.31% |
| 内存使用量 (GB) | 0.611 | 5.38 | 4.11 | ✅ 减少 23.61% |
| 磁盘大小 (GB) | 4.07 | 4.06 | 3.05 | ✅ 小了 24.88% |
与 PCIe 4.0 x16 连接的 GPU 相比,雷电 3 eGPU 的 tokens/s 降低了 38.5%。但与 llama.cpp 相比,速度提升百分比相似,约为 69%。
有趣的是,eGPU 使用的显存量变化较大且更高。我们的假设是,较慢的通信带宽导致分配了更多的显存,因为内存释放也相应变慢。
结论
Token 生成速度

| 吞吐量(越高越好) | TensorRT-LLM | Llama.cpp | 百分比差异 |
|---|---|---|---|
| GeForce RTX 4090 桌面 GPU | ✅ 170.63t/s | 100.43t/s | 快了 69.89% |
| GeForce RTX 3090 桌面 GPU | ✅ 144.19t/s | 88.70t/s | 快了 62.57% |
| GeForce RTX 4090 eGPU | ✅ 104.95t/s | 62.22t/s | 快了 68.66% |
| GeForce RTX 4070 笔记本电脑 GPU | ✅ 51.57t/s | 39.70t/s | 快了 29.90% |
| 笔记本电脑 AMD Ryzen™ 9 8945HS, 8核/16线程 | (不支持) | ✅ 11.57t/s |
- 在桌面 GPU(如 3090 GPU、4090 GPU)上,TensorRT-LLM 比 llama.cpp 快了高达 70%,同时使用的 RAM 和 CPU 更少(但更充分地利用了 VRAM)。
- 在笔记本电脑 GPU(如 4070 GPU)上,TensorRT-LLM 在显存较小的情况下快了高达 30%。
最大显存(VRAM)利用率
| 平均 VRAM 利用率 % | TensorRT-LLM | Llama.cpp | 百分比差异 |
|---|---|---|---|
| GeForce RTX 4090 桌面 GPU | 72.10 | 64.00 | 高出 12.66% |
| GeForce RTX 3090 桌面 GPU | 76.20 | 66.80 | 高出 14.07% |
| GeForce RTX 4070 笔记本电脑 GPU | 81.22 | 72.78 | 高出 11.06% |
| GeForce RTX 4090 eGPU | 不适用 | 不适用 | 不适用 |
- 与 llama.cpp 相比,TensorRT-LLM 在峰值利用率下使用的平均 VRAM 略高(高达 14%)。不过,这可能对长期耗电量产生有趣的影响。
- 注意:我们使用了可比较(但非完全相同)的量化方式,TensorRT-LLM 的
AWQ INT4与 llama.cpp 的q4_k_m实现方式不同。
最大内存(RAM)使用量
| 最大内存利用率 | TensorRT-LLM | Llama.cpp | 百分比差异 |
|---|---|---|---|
| GeForce RTX 4090 桌面 GPU | ✅ 4.98 | 7.11 | ✅ 减少 29.88% |
| GeForce RTX 3090 桌面 GPU | ✅ 0.98 | 2.60 | ✅ 减少 62.41% |
| GeForce RTX 4070 笔记本电脑 GPU | ✅ 1.04 | 4.44 | ✅ 减少 76.55% |
| GeForce RTX 4090 eGPU | ✅ 4.11 | 5.38 | ✅ 减少 23.61% |
在较慢的连接(PCIe 3.0 或雷电 3)上,由于更好的内存管理和高效地将任务委托给显存,TensorRT-LLM 使用的最大内存远少于 llama.cpp。在更快的连接上,它至少与 llama.cpp 持平。
编译后模型大小与文件数量
- 与普遍看法相反,TensorRT-LLM 预编译的模型并没有那么大。
- Mistral 7b int4 在 TensorRT-LLM 中实际上小了 25%,为 3.05gb,而 llama.cpp 为 4.06gb。
- 注意:这些是近似比较,因为 TensorRT-LLM 的 AWQ INT4 与 llama.cpp 的 q4_k_m 实现方式不同。
- 更重要的结论是,编译后的模型大小大致在同一范围内,而 TensorRT-LLM 的文件数量是 GGUF 文件数量的 7 倍。
| 模型大小(越低越好) | TensorRT-LLM AWQ int4 | Llama.cpp GGUF Q4 | 百分比差异 |
|---|---|---|---|
| Mistral 7B | ✅ 3.05GB | 4.06GB | ✅ 小了 24.88% |
便利性
- 在跨平台通用性和“一次编译,到处运行”的便利性方面,Llama.cpp 仍然胜出。
- TensorRT-LLM 仍需要针对特定操作系统和架构进行编译,不过这个问题可以通过在 Nvidia 的 NGC 模型目录 (opens in a new tab)上预编译并发布模型来解决。
可及性
- 在可及性方面,Llama.cpp 毫无悬念地击败了 TensorRT-LLM。
- TensorRT-LLM 不支持较旧的 NVIDIA GPU,并且在显存较小的显卡(例如 2-4GB VRAM)上运行效果不佳。
结语
我们的基准测试并非完美。我们评估了十几种工具(llmperf (opens in a new tab)、psutil (opens in a new tab)、gpustat (opens in a new tab)、原生工具等),发现每种工具测量 TPS 和通用指标的方式都不同。我们最终决定使用 Jan 中自己的工具,这些工具在任何推理引擎和硬件上都是一致的。至于运行时参数,我们采用了默认设置,这可能代表了典型用户的体验。
我们也没有为这次基准测试进行超频,因为它不是大多数用户的默认设置。但我们在测试中发现,通过一些调整,TensorRT-LLM 可以运行得更快。我们认为这是一个非常令人兴奋的未来方向。
如何超频:通过以下方式,我们发现 TensorRT-LLM 的性能额外提升了 15%:
- 启用 XMP (opens in a new tab)
- 在 BIOS 中将内存总线速度从
3600超频到5600。
我们还将发布底层的原始实验数据 (opens in a new tab),并鼓励社区进行审查并帮助我们改进。
特别感谢来自 Nvidia 的 Asli Sabanci Demiroz、Annamalai Chockalingam、Jordan Dodge,以及来自 llama.cpp 的 Georgi Gerganov 提供的反馈、审查和建议。
新机器的灵魂
要了解 Jan 的所有最新研究,请订阅《新机器的灵魂》