评测 AI 芯片推理性能时,先固定模型文件、精度、输入形状、Batch、运行时版本和功耗模式,再分别记录延迟、吞吐量、峰值内存以及正确性结果。任何一项没有固定,两个数字就可能来自不同任务,不能据此判断哪块芯片更快。
先冻结 8 个会改变结果的变量
| 变量 | 记录示例 | 为什么必须固定 |
|---|---|---|
| 模型与哈希 | resnet50.onnx + SHA-256 | 防止权重或图优化不同 |
| 精度 | FP32、FP16 或 INT8 | 不同精度的速度与误差不同 |
| 输入名和形状 | input:1x3x224x224 | 分辨率会直接改变计算量 |
| Batch | 1、8 分开测试 | 低延迟与高吞吐场景不同 |
| 运行时 | TensorRT/驱动/CUDA 版本 | 编译器与算子实现会变化 |
| 预热与时长 | 预热 200 毫秒、测量 30 秒 | 避免初始化时间混入稳定阶段 |
| 功耗与温度 | 功耗模式、起始温度 | 降频会造成结果漂移 |
| 并发方式 | 单流或多流 | 并发会改变延迟与吞吐量 |
MLCommons 的 MLPerf Inference为不同推理场景提供参考实现和规则。自建小型测试不必冒充 MLPerf 成绩,但应学习它把模型、数据集、准确性和场景分开的做法。

先验证正确性,再跑速度
- 准备一小批固定输入和参考输出,保存输入文件哈希。
- 在基准实现中运行,保存类别、概率或任务对应指标。
- 在目标芯片运行同一输入,按模型任务定义允许误差。
- 如果精度转换后结果超过误差边界,先修复正确性,不能继续用更快的错误输出做结论。
分类模型可以核对 Top-1/Top-5 或逐样本结果,检测模型要使用它自己的 mAP 流程,大模型则需要固定提示词、生成长度和采样配置。不存在一种准确率指标能覆盖所有模型。
用 trtexec 跑一个 NVIDIA 示例
NVIDIA 的 TensorRT 性能最佳实践把评测和优化描述为“先测量、再优化、再复测”的循环,并要求控制软硬件环境。下面命令是基于其 trtexec 工作流的命令模板,未在你的 GPU 上执行;输入张量名必须替换成模型真实名称。
trtexec --onnx=resnet50.onnx \
--shapes=input:1x3x224x224 \
--warmUp=200 \
--duration=30
trtexec --onnx=resnet50.onnx \
--shapes=input:8x3x224x224 \
--warmUp=200 \
--duration=30
第一条用于 Batch 1,第二条用于 Batch 8。实际比较时保存完整日志,不要只抄一个 Throughput 数字。至少记录主机延迟、设备计算时间、吞吐量、构建配置和内存占用。如果换成其他厂商芯片,应使用该厂商官方运行时与分析工具,但仍保持模型、输入、精度和场景一致。
延迟和吞吐量要按场景解释
- 在线单请求:重点看 Batch 1 的中位延迟和高分位延迟,避免平均值掩盖偶发卡顿。
- 离线批处理:重点看单位时间完成多少样本,同时记录 Batch 和队列方式。
- 并发服务:在固定到达率下同时记录吞吐量、超时率和高分位延迟。
- 边缘设备:还要记录持续运行后的温度、功耗和是否降频。
使用这张结果表避免“数字对不上”
测试编号:
芯片/设备:
驱动与运行时:
模型文件 SHA-256:
精度与量化方法:
输入名/形状/Batch:
预热时间/测量时间:
并发与功耗模式:
正确性结果:
延迟(中位/高分位):
吞吐量:
峰值内存:
完整日志路径:
异常与重跑原因:
同一配置至少重复三次;如果结果差异很大,先检查温度、后台任务、动态频率、数据传输和构建缓存。修复后重新完整测试,不能挑最快的一次作为最终结果。
何时不能下结论
模型正确性未通过、两边精度不同、Batch 不同、输入分辨率不同、只测一次或日志缺失时,都不能写“某芯片快多少”。本文的 trtexec 命令只适用于 NVIDIA TensorRT 路径,没有在实际芯片上运行,也没有提供任何芯片排名。读者下一步是选定一个真实模型,先填写冻结变量表并跑出可重复基线,再谈优化或跨芯片比较。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/29723.html