AI时代的性能分析:GPU Profiling初探
Quality Score: 4
English
在CPU优化的过程中,例如我们遇到CPU打满的情况,我们可以通过perf等工具进行Profiling,然后将数据可视化成火焰图等形式进行分析;同样的,在GPU的优化过程中,我们也可以通过Profiling来进行性能优化。例如在大热的DeepSeek的推理系统中,就提到用Profiling来优化:本文主要介绍一些常见的GPU Profiling工具和可视化工具。由于笔者对GPU领域了解甚少,抛砖引玉,欢迎读者多多交流。公众号回复加群即可添加笔者微信拉入性能交流群。Profiling工具GPU profiling作为英伟达官方,就提供了一套GPU Profiling工具,叫做Nsight Systems,我们可以在官网进行下载使用:ngight system在Windows上,该系统主要由一个GUI系统和一个叫做nsys的工具组成:nsys我们可以使用nsys进行采样并将数据给到GUI进行展示:nsys结果输出当然,我们也可以直接用GUI来发起任务:nsys gui这里就不过多展开,读者可以尝试通过文档了解更多信息。Pytorch Profiler作为训练框架,Pytorch自身也提供了Profiler,可以通过在代码框架中显式的开启Profiling来进行采样:pytorch profiling运行以后,这里我们打印了占GPU时间最多的几个函数,可以看到输出了诸多信息:pytorch profiler结果这里我们还生成了一份json数据,具体分析可以看后续的可视化部分。相关代码已开源,参见文末。可视化chrome://tracing对于Pytorch Profiler生成的结果,我们可以通过在chrome里输入chrome://tracing来打开一个追踪界面,然后导入生成的json文件:DeepSeek开源数据通过这个,我们可以看到在时间尺度上各个模块的调用关系来帮助我们分析。tensorboard除了chrome://tracing,我们也可以通过tensorboard来可视化Pytorch Profiler生成的json文件。pip直接安装tensorboard,然后通过命令启动:tensorboard启动以后打开http://localhost:6006/#pytorch_profiler,就会看到在logs下的json在左侧展示,可以选择并查看结果,这里我们依然以DeepSeek开源的数据来展示:tensorboard除了展示这些信息,还可以选择多个维度数据:tensorboard数据还是一个比较强大的可视化工具。AI火焰图作为性能分析领域的大师,Gregg在博客中提到了一款AI火焰图,通过不同的颜色将CPU和GPU的调用栈混合在一起进行分析:绿色框是 AI 或 GPU 加速器上运行的实际指令,浅绿色显示这些函数的源代码,红色(C)、黄色(C++)和橙色(内核)显示启动这些 AI/GPU 程序的 CPU 代码路径。灰色“-”框只是帮助突出显示 CPU 和 AI/GPU 代码之间的边界。针对pytorch,则进行了专门的适配,通过粉色来标记pytorch的函数:通过这种方式,我们可以将多个设备的调用栈做一个混合,从而能够帮助我们更好的进行性能分析。总结本文主要介绍了两种GPU采样工具和三种可视化工具,作为对于GPU profiling的一个鸟瞰,后续将会有更多的深入介绍。本文使用到的两个python文件见github(https://github.com/AshinZ/perf-workshop/tree/main/introduce-to-gpu-profiling)参考资料https://docs.nvidia.com/nsight-systems/UserGuide/index.htmlhttps://zhuanlan.zhihu.com/p/27181462601https://github.com/deepseek-ai/profile-datahttps://pytorch.ac.cn/tutorials/recipes/recipes/profiler_recipe.htmlhttps://www.brendangregg.com/blog/2024-10-29/ai-flame-graphs.html
中文
[翻译内容:在CPU优化的过程中,例如我们遇到CPU打满的情况,我们可以通过perf等工具进行Profiling...]