PyTorch训练模型迁移调优指南

什么是模型迁移

模型迁移是指将原本运行在GPU或其他硬件平台的深度学习模型迁移至NPU,并保障模型在合理精度误差范围内高性能运行。

为什么要做模型迁移

将模型从其他硬件平台迁移到NPU时,由于硬件架构和库的不同,涉及到一系列底层到上层的适配操作。以GPU为例,模型迁移至NPU需要适配的原因可分为三方面:

  • 硬件特性和性能特点差异

    由于NPU和GPU的硬件特性和性能特点不同,模型在NPU上可能需要进一步的性能调试和优化,以充分发挥NPU的潜力。

  • 计算架构差异

    NVIDIA GPU采用CUDA(Compute Unified Device Architecture)的并行计算架构,而华为NPU采用CANN(Compute Architecture for Neural Networks)的异构计算架构。

  • 深度学习框架差异

    为了支持NPU硬件,需要通过Ascend Extension for PyTorch对PyTorch框架进行适配:包括适配张量运算、自动微分等功能,以便在NPU上高效执行。此外,PyTorch正持续原生支持NPU,以提供给用户更好的模型体验,实现迁移修改最小化。

如何进行模型迁移

模型迁移指导请参见表1

表1 模型迁移指导

类别 组件 迁移指导
传统模型 已适配传统模型 Ascend Extension for PyTorch 请参见支持模型列表,并根据对应模型的README进行训练和推理。
未适配传统模型 请参见本文档进行迁移训练。

目录导航

  • 迁移前准备:介绍模型选取、迁移前分析和常见准备工作。
  • 模型迁移:介绍自动迁移、工具迁移和手工迁移。
  • 混合精度适配:介绍混合精度训练适配和典型样例。
  • 模型训练:介绍训练环境、启动方式和训练调试。
  • 模型保存:介绍模型权重保存方法。
  • 精度调试:介绍精度问题分析方法和调优工具。
  • 性能调优:介绍性能指标、分析流程和调优方法。
  • 附录:收录 pdb 参数、多卡启动示例和常见迁移接口。
  • 图片资源:存放文档引用的图片资源。

迁移流程

本手册的内容章节是根据迁移阶段与其对应任务设计的,如表1所示。

表 1 迁移阶段任务表

迁移阶段 迁移任务 任务描述
迁移前准备 模型选取
  1. 调研业务需求场景,选取主流仓库模型。
  2. 保证选定的模型能在三方平台(如GPU)上运行。
  3. 明确迁移前模型运行的硬件型号、精度、性能基线。从权威网站或数据平台获取源模型的性能值基线,或在三方平台实测性能基线。
迁移前分析
  • 借助PyTorch Analyse工具采集目标网络中的模型/算子清单,识别第三方库及目标网络中算子支持情况,分析模型迁移的可行性。
    • 在迁移支持度分析中如果存在平台未支持的算子,需进行算子替换或者开发适配。
    • 是否调用模型套件或第三方库,需要关注NPU的支持情况。
  • 确认是否存在目前已知未支持场景。
模型迁移与训练 模型迁移 提供三种迁移方式,实现GPU至NPU的接口替换、NPU分布式框架改造。
混合精度适配 在训练时如需混合使用单精度(float32)与半精度(float16)数据类型。
模型训练
  1. 配置训练相关环境变量,以保证模型训练可以在NPU上正常运行,可参考环境变量配置
  2. 根据实际场景选择相应操作完成模型脚本配置和拉起训练,可参考执行训练
  3. 提供训练过程中常见问题的调试方法,便于用户确认问题发生位置及原因等,可参考模型调试
模型保存

保存模型用于后续加载权重、恢复训练或在线推理。

  • 保存模型文件(pth文件和pth.tar文件)用于后续加载权重、恢复训练或在线推理。
精度调试
  1. 训练过程中的模型精度问题分析,及时处理训练不稳定问题。
  2. 分析并评估迁移前后模型在loss/ppl和模型下游评测的任务得分,评估迁移前后的精度差异。
  3. 确保迁移前后模型精度差异在可接受范围之内,数据无异常溢出;如果出现精度相关问题,需要借助精度问题分析工具分析。

性能调优

性能调优请参见性能调优

性能数据采集与评测:

  1. 在NPU环境上,参考性能调优工具介绍章节对模型进行性能拆解。
  2. 基于性能拆解得到的数据,分析瓶颈模块,明确性能优化方向。

模型性能优化实施:

依据性能瓶颈模块的类型,从性能调优方法寻求优化方法,具体方法包括数据加载优化、NPU亲和适配优化、内存优化、通信优化和调度优化。

此外,本章节还提供了通信优化的建议和可以使能的通信算法,以及调度优化方法。