趋近智
尽管 GPU 和专用加速器通常处理大部分机器学习 (machine learning)工作负载的计算,但 CPU 仍是重要的组成部分。它执行模型图的一部分,驱动加速器,管理运行时系统,处理数据加载和预处理,以及运行控制流逻辑。因此,优化 CPU 性能对应用程序整体速度非常重要。详细介绍了如何使用专门的 CPU 性能分析工具,特别是 Intel VTune Profiler 和 Linux perf,来分析在 CPU 上运行的已编译机器学习代码的性能。
如本章开头所述,对机器学习编译器转换后的代码进行性能分析带来特有的挑战。函数名可能被修改或对应于大型、融合的计算核心,这使得直接与原始模型关联变得困难。此外,大量使用库(如 MKL-DNN/oneDNN、OpenBLAS)意味着性能通常依赖于这些预优化的例程。有效的 CPU 性能分析需要能够超出源代码层面,并分析实际硬件执行细节的工具。
Intel VTune Profiler 是一款功能强大的性能分析工具,用于理解 CPU(以及 GPU/FPGA)的行为。它提供图形界面和多种分析类型,适合用于分析机器学习 (machine learning)工作负载。
您通常通过在其控制下启动机器学习应用程序或将其附加到已运行的进程来运行 VTune。VTune 收集数据并以各种视图(例如,摘要、自下而上、调用者/被调用者)呈现。您通常可以从函数级摘要向下查看源代码或汇编代码,尽管将高度优化、生成的代码关联回原始机器学习图操作需要理解编译器的转换。寻找直接显示汇编指令上 PMU 事件计数的注释,以进行精细分析。
VTune 微架构审查的 CPU 时间细分示例,显示了潜在的瓶颈,例如内存停滞(L1/L2/L3 限制)或指令不足(前端限制)与有效工作(指令完成)的对比。
KernelA_Fused显示了可能因内存访问而停滞的大量时间。
perfLinux perf 是一个功能强大、用途广泛的命令行性能分析工具,内置于 Linux 内核中。它使用 CPU 的性能监测单元(PMU)以低开销对硬件事件进行采样或计数。
perf 的常见用法perf stat: 为命令或进程 ID 提供常见硬件事件(周期、指令、缓存未命中、分支未命中)的总计计数。对快速了解性能特点很有用。
# 统计整个机器学习推理脚本执行期间的事件
perf stat python run_inference.py --model compiled_model.bin
perf record: 对程序的执行进行采样。它定期记录指令指针和其他信息(例如使用 -g 选项的调用堆栈)。这会生成一个 perf.data 文件。
# 记录带有调用图的性能数据
perf record -g ./my_compiled_ml_app --input data.npy
perf report: 分析由 perf record 生成的 perf.data 文件。它以分层视图显示在每个函数、库甚至单个指令中收集到的样本百分比。您可以在终端中交互式浏览此报告,以查看热点和调用链。
perf annotate: 反汇编由 perf report 发现的热点函数,并用在每条指令处发生的样本百分比来标注汇编代码。这对于确定导致停滞或消耗周期的具体指令非常重要,尤其是在编译器生成的代码中。
perf 的优点和缺点perf 用于已编译的机器学习 (machine learning)与 VTune 类似,您可以使用 perf record 在已编译模型执行时捕获数据。perf report 通常会显示机器学习运行时执行引擎内部、机器学习编译器生成的特定核心或 oneDNN 或 OpenBLAS 等供应商库中的热点。在这些热点函数上使用 perf annotate 可以让您检查汇编代码,并查看硬件事件(例如通过 perf record -e cache-misses ... 记录的缓存未命中)频繁发生的位置。这可以直接为编译器开发或调整提供信息。例如,在生成的循环嵌套中看到加载指令上的大量缓存未命中可能表明编译器的分块或预取策略需要调整。
VTune 和 perf 都提供数据;技巧在于结合机器学习 (machine learning)编译的背景来解释这些数据。
通过系统地应用这些 CPU 性能分析工具,您可以摆脱猜测,获得关于已编译机器学习代码如何与硬件交互的具体数据。这些数据对于诊断性能限制以及指导本课程中讨论的复杂编译器和运行时优化非常重要。
这部分内容有帮助吗?
perf 及其用于详细 CPU 性能分析和瓶颈识别的高级功能。© 2026 ApX Machine Learning用心打造