跳到主要内容

推理运行时

TensorRT LLM 本地部署:显存怎么算,哪张卡真的跑得动

NVIDIA 官方开源的 LLM 推理加速库,Apache 2.0。1.2 版之后它已经不是你记忆里那个「先编译 engine」的框架了——这页讲清楚它现在长什么样、吃多少显存、该租哪张卡。

TensorRT LLM 是 NVIDIA 维护的开源推理库,仓库在 github.com/NVIDIA/TensorRT-LLM,Apache 2.0 许可。它最重要的变化发生在 1.0 到 1.2 这条线上:PyTorch 原生后端从「可选」变成「默认」,再变成 **唯一**。1.2 的发行说明写得很直接——`LLM(backend="tensorrt")` 现在会直接抛 ValueError。也就是说,网上那一大批教你 `trtllm-build` 把 checkpoint 编译成 `.engine` 再加载的 2024 年教程,今天照抄会失败在第一步。这是搜「TensorRT-LLM 本地部署」最容易踩的坑,没有之一。当前稳定线是 1.2,main 分支已经推到 1.3.0rc。

TensorRT LLM 本身不是模型,它没有固定显存占用;真正要算的是三笔账:权重 + KV cache + 激活峰值。绝大多数人第一次 OOM 不是权重放不下,而是栽在 KV cache 上——`free_gpu_memory_fraction` 默认就是 0.9,它会把当前空闲显存的 90% 直接圈走做 KV 池。8B 的 FP8 权重只有 9GB 左右,塞进 24GB 卡绰绰有余,但默认配置下服务一起来显存就见底了,压测稍微上并发就崩。把这个值调到 0.80~0.85,再配合 `--max_num_tokens` 卡住单批 token 上限,是每次部署都要做的第一件事。KV cache 的块复用(`enable_block_reuse`)和部分复用默认是开的,多轮对话和共享前缀场景能省下相当可观的一块。

另一条硬约束是量化格式和卡的代际死死绑定,这决定了你该租哪张卡而不是反过来。Ampere(A100、A6000、3090)没有 FP8 张量核,只能走 W4A16 的 AWQ / GPTQ 或者干脆 BF16;Ada(4090)和 Hopper(H100)才有 FP8;NVFP4、MXFP4 这些新格式要 Blackwell,其中 sm120(RTX 5090)支持 NVFP4、MXFP4 和 FP8 per-tensor。系统层面也别抱幻想:官方只支持 Linux x86_64 和 aarch64,没有 Windows;当前支持矩阵里 Turing 和 Volta 都不在列,官方明确说不在列表里的架构他们不开发也不测试。NexGPU 上最便宜的可用卡恰好也是最便宜的卡——RTX 3090 24GB,$0.193/卡·时,按秒计费。

01 —

版本线:先搞清楚你看的教程是哪一代

TensorRT LLM 的 API 在 1.x 这条线上动过刀,版本错了整套命令都对不上。

版本参数量显存上下文说明
TensorRT LLM 1.3.0rc(main 开发线)PyTorch 原生后端 + AutoDeploy betaNVFP4 / MXFP4 / NVFP4 KV Cache,需 BlackwellCUDA 13.1 · PyTorch 2.10 · Python 3.12 · Ubuntu 24.04追新用。DFlash、PARD、后缀自动机(SA)等新投机解码方法先落在这条线上;rc 版本 API 随时可能改,别拿去做生产基线。
TensorRT LLM 1.2(当前稳定线)PyTorch 唯一执行后端FP8 权重可把 70B 压进单张 80GBLinux x86_64 / aarch64,无 Windows破坏性变更集中在这里:TRT 后端彻底移除,`LLM(backend="tensorrt")` 抛 ValueError;CLI 参数优先级高于 YAML 配置。新项目从这条线起步。
TensorRT LLM 1.1PyTorch 与 TRT 后端并存的最后一版FP8 KV Cache 可用,显存再省一截同 1.0 依赖加入 GPT-OSS、Hunyuan 支持和 KV Cache Connector API(分离式服务的地基)。C++ TRTLLM sampler 变成默认,新增 `sampler_type` 参数。
TensorRT LLM 1.0LLM API 正式宣布稳定与 1.1 一致PyTorch 架构定为默认后端分水岭版本。运行时初始化从「首次调用时」挪到了 `__init__`,第一次 generate 不再有长时间卡顿,但开销提前到构造函数。
TensorRT LLM 0.21 及更早trtllm-build 编译 engine 流程engine 构建期有额外显存峰值TensorRT 10.x 依赖历史流程:转 checkpoint → `trtllm-build` 出 `.engine` → 加载。1.2 起已彻底移除。网上绝大多数中文教程停留在这一代,识别方法是看有没有 `trtllm-build`。

02 —

选卡:量化格式决定代际,不是显存大就行

FP8 要 Ada 以上,NVFP4 要 Blackwell,Ampere 只能走 INT4——按你要跑的精度倒推卡。

  • 8B 级 FP8 单卡起服务、跑通链路

    RTX 4090 24GB$0.540/卡·时

    Ada(sm89)是能吃 FP8 的最便宜档,nvidia/Qwen3-8B-FP8 权重约 9GB,剩下 15GB 做 KV 池够撑起像样的并发。

  • 20B–32B 跑 MXFP4 / NVFP4 新格式

    RTX 5090 32GB$0.723/卡·时

    sm120 是支持 NVFP4、MXFP4 和 FP8 KV Cache 的消费级 Blackwell,GPT-OSS-20B 这类原生 MXFP4 权重在这张卡上才是原生速度。

  • 70B 级 W4A16 AWQ、长上下文推理

    A100 PCIE 80GB$0.824/卡·时

    Ampere 没有 FP8,70B 只能走 INT4 AWQ / GPTQ;权重约 40GB,80GB 显存留下的余量正好喂饱长上下文的 KV cache。

  • 生产级 FP8 吞吐、大 MoE 张量并行与分离式服务

    H100 SXM 80GB$3.582/卡·时

    FP8 block scaling、rowwise 全套只在 Hopper 齐活,NVLink 让 `--tp_size 2/4` 和 prefill-decode 分离的 KV 传输不被互联拖死。

03 —

四步把 trtllm-serve 跑起来

全程走官方容器,绕开 CUDA 13.1 / PyTorch 2.10 的版本地狱。

  1. 01

    开卡,拉 NGC 官方容器

    别用裸机 pip 装第一次。官方发布镜像在 nvcr.io,已经把 CUDA、PyTorch、OpenMPI 全部对齐好了。`--ipc=host` 和两个 ulimit 是官方文档要求的,缺了会在多进程和大 KV 池上翻车。想走 pip 路线的话顺序是:先 `pip3 install torch==2.10.0 torchvision --index-url https://download.pytorch.org/whl/cu130`,再 `apt-get install libopenmpi-dev`,最后 `pip3 install tensorrt_llm`。

    docker run --rm -it --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc24
  2. 02

    起 OpenAI 兼容服务,第一件事是压住 KV cache

    `trtllm-serve` 直接吃 HuggingFace 模型 ID,不需要任何预编译。注意这里显式写了 `--kv_cache_free_gpu_memory_fraction 0.85`——默认 0.9 会把空闲显存吃到只剩渣,是新手 OOM 的头号原因。`--max_num_tokens` 卡住单批 token 上限,`--backend pytorch` 在 1.2 之后其实是唯一选项,写出来是为了让配置自解释。

    trtllm-serve serve nvidia/Qwen3-8B-FP8 --tp_size 1 --max_batch_size 32 --max_num_tokens 8192 --kv_cache_free_gpu_memory_fraction 0.85 --backend pytorch --host 0.0.0.0 --port 8000
  3. 03

    验证接口,确认它就是个 OpenAI 端点

    服务起来后是标准的 `/v1/chat/completions` 和 `/v1/completions`,任何 OpenAI SDK 直接改 base_url 就能接。这一步的意义是确认权重加载、tokenizer 和 chat template 都对——如果模型输出乱码或者不停止,八成是 chat template 没匹配上,用 `--chat_template` 显式指定。

    curl -X POST http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "nvidia/Qwen3-8B-FP8", "messages":[{"role": "user", "content": "用一句话说明你是谁"}], "max_tokens": 64, "temperature": 0}'
  4. 04

    用 trtllm-bench 压出真实容量,再决定租几张卡

    这是 TensorRT LLM 相比其他运行时最值钱的一步:官方自带压测工具,先合成一份符合你业务分布的数据集,再跑吞吐。`--input-mean` / `--output-mean` 按你真实的 prompt 和回复长度填,压出来的 TTFT、TPOT 和 tokens/s 才有意义。拿到 `--report_json` 的结果,你就能算出「一张卡撑多少 QPS」,进而算出该开几张——而不是拍脑袋。

    trtllm-bench --model nvidia/Qwen3-8B-FP8 throughput --dataset /tmp/synth.jsonl --max_batch_size 32 --concurrency 16 --streaming --report_json /tmp/report.json

一轮完整验证到底花多少钱

以 Qwen3-8B-FP8 在 RTX 4090 24GB 上跑通并压测为例。开机、拉 nvcr.io 官方镜像、下载权重、第一次 `trtllm-serve` 起服务并跑完 warmup,按 30 分钟算:0.5 小时 × $0.540 = $0.27。接着用 `trtllm-bench` 跑三组并发(8 / 16 / 32)各 40 分钟,合计 2 小时:2 × $0.540 = $1.08。这一轮总共 $1.35,你换回来的是这张卡上真实的 TTFT、TPOT 和吞吐曲线,而不是别人博客里的数字。 往上走一档:70B 级 W4A16 AWQ 换 A100 PCIE 80GB,$0.824/卡·时,跑满一个 12 小时的调参日是 12 × $0.824 = $9.89。如果业务必须用 FP8——Ampere 做不到,只能上 Hopper——H100 SXM 80GB 开 `--tp_size 2` 就是 2 × $3.582 = $7.164/时,一轮 6 小时的压测 6 × $7.164 = $42.98。对照一下:光是买一张 H100 的钱,够你在这里压测好几年。 权重存储单独算。70B 的 INT4 权重约 40GB,$0.414/GB·月 × 40 = $16.56/月,折合每天约 $0.55。计算按秒计费、停机即停止计费,但存储会一直算到你把它销毁为止——调完参记得把不再用的权重卷删掉。无最低消费、无开通费、不用申请配额。

04 —

常见问题

TensorRT-LLM 还需要 trtllm-build 编译 engine 吗?为什么我按教程做全是报错

不需要了,而且是硬性移除。PyTorch 后端从 1.0 起成为默认,到 1.2 已经是唯一后端,`LLM(backend="tensorrt")` 会直接抛 ValueError,`.engine` 那套流程连入口都没了。你看到的报错八成是因为教程停留在 0.21 及更早。现在的正确姿势就是 `trtllm-serve serve <HF模型ID>`,一条命令起服务。想快速验证这件事,在 NexGPU 开一张 RTX 3090 24GB($0.193/卡·时)拉官方镜像跑一遍,几毛钱的事。

TensorRT-LLM 需要多大显存?为什么模型才 9GB 却 OOM

显存 = 权重 + KV cache + 激活峰值,OOM 通常出在第二项。`free_gpu_memory_fraction` 默认 0.9,服务启动时就把 90% 空闲显存圈走做 KV 池,再叠加 `--max_num_tokens` 对应的激活开销就爆了。把它降到 0.80~0.85,同时把 `--max_num_tokens` 从默认值往下压,绝大多数 OOM 当场消失。粗算法:FP8 权重约等于参数量(8B ≈ 9GB),W4A16 约等于参数量的一半多一点(70B ≈ 40GB),剩下的全留给 KV。想按真实并发把这条曲线压出来,NexGPU 从 24GB 到 141GB 的卡都能按秒开,压完就停。

Tesla V100、Tesla T4、Tesla P40 能跑 TensorRT-LLM 吗

不能,别浪费时间。当前官方支持矩阵覆盖的是 Blackwell、Hopper、Ada Lovelace、Ampere 以及 GB200 NVL72、Grace Hopper,Turing(T4)和 Volta(V100)都不在列,Pascal(P40)更早就出局了;官方对未列出的架构明确表态不开发也不测试。好消息是在 NexGPU 上,最便宜的**受支持**卡恰好也是全场最便宜的卡:RTX 3090 24GB,$0.193/卡·时,比 T4 的 $0.298 还低,而且是 Ampere,AWQ / GPTQ 全都能跑。

RTX 4090 和 RTX 5090 分别能用哪些量化格式,FP8 和 NVFP4 有什么区别

RTX 4090 是 Ada(sm89),有 FP8 张量核,跑 FP8 per-tensor 和 FP8 KV Cache 没问题,也支持 W4A16 的 AWQ / GPTQ,但没有 NVFP4。RTX 5090 是消费级 Blackwell(sm120),除 FP8 per-tensor 和 FP8 KV Cache 外,还支持 NVFP4 和 MXFP4——GPT-OSS 这类原生 MXFP4 权重放在 5090 上才是原生路径,不用反量化。注意 sm100/sm103 的数据中心 Blackwell 才有全套 FP8 block scaling、rowwise 和 NVFP4 KV Cache。这两张卡 NexGPU 都有现货:4090 $0.540/卡·时,5090 $0.723/卡·时,想对比就同时开两张跑同一份 trtllm-bench 数据集。

TensorRT-LLM 和 vLLM 该选哪个

TensorRT LLM 的优势在于它是 NVIDIA 自己写的:attention、GEMM、MoE 的定制 kernel,FP8 / NVFP4 的完整量化链路(配合 ModelOpt),以及 prefill-decode 分离式服务、Wide Expert Parallelism 这些在超大 MoE 上真正拉开差距的能力,投机解码也支持到 EAGLE-3、MTP、PARD、NGram 一大排。代价是环境更挑剔——CUDA 13.1、PyTorch 2.10、只支持 Linux。vLLM 上手快、模型覆盖广,适合快速验证。理性做法是两个都跑一遍同样的压测再决定。NexGPU 的 2000+ 预置镜像里 vLLM 和 PyTorch 都是现成的,开两台按秒计费的实例横向对比,一顿饭钱的事。

TensorRT-LLM 装不上、CUDA 版本对不上怎么办

先确认三件事:只支持 Linux x86_64 或 aarch64(没有 Windows 版本,这是最常见的死因);当前开发线要求 CUDA 13.1、PyTorch 2.10.0、Python 3.12,官方在 Ubuntu 24.04 上验证;pip 安装必须先锁死 torch 版本再装 tensorrt_llm,否则 pip 会在解依赖时把 torch 换掉。最省事的办法是根本不装——直接用 nvcr.io 的官方发布镜像。NexGPU 的实例支持 SSH、Jupyter、Web 终端和 REST API,拉镜像开跑,环境问题一次性消失;真卡住了 Telegram 上有中英文双语支持,不排队。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。