从零开始的完整讲解
从数学算子到硬件执行,中间还有很多选择
同一个矩阵乘法可以用不同精度、分块、布局和内核执行。模型代码表达“要计算什么”,推理系统还要选择“怎样在这块硬件上执行”。TensorRT-LLM 的学习重点是模型与硬件之间的这层优化,包括内核选择、融合、量化、缓存和调度,而不是仅记一个导出命令。
不同版本和后端的工作流可能不同,不能假设所有用法都必须先手工构建同一种 engine。开始前核对所选后端、模型架构、硬件和精度的支持组合,并保存版本信息。
量化先从一把有限刻度的尺子理解
浮点权重可以取很多数值;量化用较少位数存储近似值。最简单的对称量化可写成 q=clip(round(x/s),q_min,q_max),重建值约为 s*q。Scale s 决定刻度间隔。间隔大,细节误差大;间隔小,大数值容易越界被截断。
假设整数范围 [-7,7],最大绝对值为 1.4,取 s=0.2。权重 0.31 变为整数 2,重建为 0.4,误差 0.09。这里故意使用简化的对称范围,实际格式和 kernel 的表示约定需要单独核对。
values = [0.31,-0.62,1.4]
scale = 0.2
q = [max(-7,min(7,round(x/scale))) for x in values]
restored = [scale*x for x in q]
print(q, restored)
print('MSE:',sum((a-b)**2 for a,b in zip(values,restored))/len(values))
Weight-only 与 activation 量化影响不同
只压缩权重主要减少权重存储和读取;激活量化还影响中间计算的数据格式。KV 量化则针对随上下文增长的缓存。一个模型权重缩小,不代表 KV 自动缩小,也不代表所有运算都使用低位宽。
Scale 可以按整个张量、通道或分组设置,细粒度常能减小误差,但需要额外元数据及处理。某些激活分布有极端值,少量 outlier 会影响刻度选择;校准数据必须覆盖真实输入,而不能只拿几条很短的英文句子代表多语言长文档。
为什么“少一半 bytes”不等于“快一倍”
如果当前瓶颈是权重带宽,压缩可能明显获益;若瓶颈是通信、排队或其他未量化算子,收益就有限。量化与反量化自身也有成本,硬件是否有匹配的高效内核很关键。Amdahl's Law 提醒我们:只加速总时间的一部分,整体提升有上界。
例如某环节占 60% 时间,即便它快 2 倍,总时间也从 1 变为 0.4+0.6/2=0.7,整体约快 1.43 倍。真实系统的瓶颈还可能随着优化迁移,所以这个公式是分析起点。
正确性验证需要超过一条聊天回答
保存未量化基线,比较固定输入的 logits 或任务指标,再检查长上下文、罕见词、数字、代码和多语言子集。生成文本相同只是弱证据,平均准确率相近也可能隐藏某一子集明显退化。对业务可接受的质量变化先定义阈值,再看速度和内存是否值得。
性能测试区分首次准备、预热和稳态。记录输入输出长度、batch、并行策略和精度组合。不要拿一个优化后的窄 shape 区间结果,代表任意动态请求。
从浏览器练习走向设备验证
上面的量化算术可直接放入 Notebook,改变 scale 观察误差。下一步在真实硬件环境固定 checkpoint,对比两种受支持精度,收集质量与延迟。网页中的 CPU 实验不宣称测量了 TensorRT-LLM;它先让你知道设备上的每个性能数字应该回答什么问题。
把模型映射到硬件执行
TensorRT-LLM 提供 NVIDIA 平台上的 LLM 推理组件与高层接口。不同版本、后端和模型支持不同执行路径;不能把它永远等同于“先离线编译一个 engine”。阅读当前 quickstart 后,再决定采用高层 LLM API、服务命令还是特定 engine 工作流。
优化涉及 kernel 选择、操作融合、量化、缓存管理与 batch 调度。把 LayerNorm 等多个小操作融合,可能减少 kernel launch 和 HBM 往返,但也可能增加寄存器占用。是否加速仍取决于形状与硬件。
量化减少字节,不直接承诺相同质量
对称 per-tensor 示意是 ,恢复为 。真实格式可能有 zero point、分组 scale、混合精度以及不同激活策略。INT4 权重每参数约半字节是原始 payload 下界,实际存储还包含尺度与打包开销。
import torch
x = torch.tensor([-1.2, -.2, .1, .8])
scale = x.abs().max() / 127
q = (x / scale).round().clamp(-127, 127).to(torch.int8)
x_hat = q.float() * scale
print('max error:', (x-x_hat).abs().max().item())
这是数值示例,不是 TensorRT-LLM 的量化实现。真实收益需要对应硬件 kernel,否则解量化和不合适的 shape 会吞掉带宽节约。
一个正确的对比矩阵
固定模型 revision、请求长度、并发、输出策略和质量集,分别测 BF16 与受支持的低精度配置。先检查 perplexity/任务准确率或偏好,再看吞吐、TTFT、ITL、内存与错误率。只在一个短 prompt 上得到“快两倍”不足以说明生产收益。
还要记录运行路径和准备成本:权重转换、构建或初始化是否计入 cold-start?动态 shape 是否触发额外开销?若应用包含 vision encoder,不能只计语言 decoder。
自测
问题: 模型权重从 16-bit 变成 4-bit,端到端延迟一定变成四分之一吗?
展开答案
不会。只有部分数据量变化,计算、KV、激活、调度与通信仍存在。量化 kernel、scale 读取和解量化也有成本;质量约束可能要求保留某些层高精度。原始资料与继续阅读
资料核对:2026-09-10。教学示例不代表生产基准;框架 API 和模型支持请以所链接版本为准。