多数开发者了解如何优化模型推理速度,却较少掌握定位性能瓶颈的系统化方法。本文基于AWS专有AI芯片Trainium及其开源PyTorch后端TorchNeuron,详解系统级性能分析流程,并通过RMSNorm优化展示达6倍的延迟降低。
在机器学习工程中,许多开发者了解让模型快速运行的基本直觉,但面对推理变慢时,往往缺乏系统化的排查手段。本文将以 AWS 专有深度学习芯片 Trainium 为基础,结合其开源原生 PyTorch 后端 TorchNeuron,从零介绍如何分析推理性能瓶颈并定位耗时分布。
TorchNeuron 支持在 Trainium 芯片上执行标准 PyTorch 工作流(包括即时模式、torch.compile 及原生 API),且集成了 Neuron Kernel Interface (NKI) 用于自定义算子开发。
在开始分析前,需要了解 Neuron 的接入机制。Neuron 后端基于 PyTorch 的 PrivateUse1 扩展接口运行。该机制允许外部加速硬件接入框架,而无需像 CUDA 那样侵入框架核心引入独立的调度键。
采集 Neuron 上的性能数据主要依赖两个核心对象:
NeuronConfig:指定采集的 Neuron 数据流和 NeuronCore 核心,并设置输出目录。配置 correlate_device_time=True 可以将芯片侧的执行时间同步映射到 PyTorch 性能统计表中。NeuronProfiler:接收配置并提供导出回调,将框架层轨迹文件 trace.json 与底层系统轨迹一并保存。配套的可视化工具 Neuron Explorer 是基于 Web 的时间线查看器。分析完成后,产物目录会生成系统轨迹以及成对的 .neff(编译后的可执行文件)与 .ntff(底层硬件指令执行轨迹)文件。将这些数据导入 Neuron Explorer 即可清晰查看硬件指令序列。
为了直观展示性能差异,测试选用大模型中常见的 RMSNorm 结构,分别测试三种实现:
torch.rms_norm():在后端融合成单一 Neuron 内核。torch.compile 编译的基础组合。在代码中使用独立的 PyTorch 算子进行计算。调用 torch.profiler 时,必须传入 ProfilerActivity.PrivateUse1 并在循环内执行 torch.neuron.synchronize(),确保芯片执行完毕后再导出数据。
分析导出的 key_averages() 表格并按设备耗时排序,结果如下:
| 算子名称 | 调用次数 | CPU 自身耗时 | Neuron 设备耗时 | 耗时占比 |
|---|---|---|---|---|
| aten::mul | 3 | 60.9 μs | 1,164.5 μs | 49.5% |
| aten::add | 1 | 26.6 μs | 434.6 μs | 18.5% |
| aten::rsqrt | 1 | 15.6 μs | 415.0 μs | 17.6% |
| aten::mean | 1 | 21.1 μs | 340.8 μs | 14.5% |
设备端总耗时:2.355 ms

在 Neuron Explorer 的时间线中,事件从上到下依次穿过框架调度、运行时(Runtime)队列,最后到达硬件执行通道(NeuronCore)。未融合的代码中,每个算子都经历了完整的调度链路,在各个操作之间留下了明显的硬件空闲间隙。
免费获取企业 AI 成熟度诊断报告,发现转型机会


将算子替换为 PyTorch 原生的 torch.rms_norm,后端直接下发单一融合内核:
| 算子名称 | 调用次数 | CPU 自身耗时 | Neuron 设备耗时 | 耗时占比 |
|---|---|---|---|---|
| aten::_fused_rms_norm | 1 | 47.6 μs | 403.3 μs | 100% |
设备端总耗时:403.3 μs


整段计算仅触发一次框架到硬件的调度,硬件连续执行,消除了中间小算子的调度开销。
在原始拆解代码上添加 @torch.compile(backend='neuron', fullgraph=True) 修饰器。TorchDynamo 提取 FX 图并传递给 Neuron 编译器,编译器自动识别算子并进行融合编译:
| 算子名称 | 调用次数 | CPU 自身耗时 | Neuron 设备耗时 | 耗时占比 |
|---|---|---|---|---|
| Torch-Compiled Region | 1 | 98.4 μs | 375.5 μs | 100% |
设备端总耗时:375.5 μs


编译器自动完成了内核融合与显存访问优化,Neuron 执行耗时进一步压缩至 375.5 μs。
| 实现方案 | Neuron 设备耗时 | CPU 耗时 | 算子调度次数 |
|---|---|---|---|
| 基础分散算子 | 2,355 µs | 约 125 µs | 6 |
| torch.rms_norm | 403 µs | 约 48 µs | 1 |
| 基础算子 + torch.compile | 376 µs | 约 98 µs | 1 |
测试数据显示,无论是采用内置融合算子还是通过 torch.compile 编译,设备耗时均降至基础实现的六分之一左右。算子融合不仅消除了多次硬件调度之间的间隙,还避免了中间张量在显存与片上缓存间的重复读写。
这套“表格发现热点、轨迹验证瓶颈、融合消除开销”的方法同样适用于大规模模型的调优过程。
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断