
# 调优流程
PyTorch在昇腾AI处理器的加速实现方式是以算子为粒度进行调用（OP-based），即通过Python与C++调用CANN层接口Ascend Computing Language（AscendCL）调用一个或几个亲和算子组合的形式，代替原有GPU的实现方式，具体逻辑模型请参考[PyTorch自动迁移](https://www.hiascend.com/document/detail/zh/canncommercial/80RC3/devaids/devtools/migrationtools/atlasfmkt_16_0008.html)。
在PyTorch模型迁移后进行训练的过程中，CPU只负责算子的下发，而NPU负责算子的执行，算子下发和执行异步发生，性能瓶颈在此过程中体现。在PyTorch的动态图机制下，算子被CPU逐个下发到NPU上执行。一方面，理想情况下CPU侧算子下发会明显比NPU侧算子执行更快，此时性能瓶颈主要集中在NPU侧；另一方面，理想情况下NPU侧算子计算流水线一直执行，不会出现NPU等待CPU算子下发即NPU空转的场景，如果存在，则CPU侧算子下发存在瓶颈。
图1Host算子下发和Device算子执行   
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001749527217.png "点击放大")
综上所述，性能优化的总体原则为：减少Host算子下发时间、减少Device算子执行时间。
训练代码迁移完成后，如存在性能不达标的问题，可参考下图所示流程进行优化。建议按照单卡、单机多卡、多机多卡的流程逐步做性能调优。
图2性能调优总体思路   
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001818864860.png "点击放大")
性能调优可以先将重点放在NPU不亲和的问题处理上，确保一些已知的性能问题和优化方法得到较好的应用。通用的训练任务调优、参数调优可以通过可观测数据来进行分析与优化，一般来说分段对比GPU的运行性能会有比较好的参考。算子级的调优某些情况下如果是明显的瓶颈或者性能攻坚阶段，可以联系华为工程师获得帮助。
为了便于用户快速进行迁移调优，降低调优门槛，ModelArts提供了MA-Advisor性能自动诊断工具。用户采集性能profiling数据后，可通过该工具自动扫描profiling数据，工具分析完数据后会给出可能的性能问题点及调优建议，用户可以根据调优建议做相应的修改适配。目前该工具对CV类模型给出的调优建议较多，LLM类建议稍少，但是总体都有性能提升，实测大约可提升10%\~30%的性能，并且已经在多个迁移性能调优项目中实际应用。
