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 迁移阶段任务表
| 迁移阶段 | 迁移任务 | 任务描述 |
|---|---|---|
| 迁移前准备 | 模型选取 |
|
| 迁移前分析 |
|
|
| 模型迁移与训练 | 模型迁移 | 提供三种迁移方式,实现GPU至NPU的接口替换、NPU分布式框架改造。 |
| 混合精度适配 | 在训练时如需混合使用单精度(float32)与半精度(float16)数据类型。 | |
| 模型训练 | ||
| 模型保存 |
保存模型用于后续加载权重、恢复训练或在线推理。
|
|
| 精度调试 |
|
性能调优
性能调优请参见性能调优。
性能数据采集与评测:
- 在NPU环境上,参考性能调优工具介绍章节对模型进行性能拆解。
- 基于性能拆解得到的数据,分析瓶颈模块,明确性能优化方向。
模型性能优化实施:
依据性能瓶颈模块的类型,从性能调优方法寻求优化方法,具体方法包括数据加载优化、NPU亲和适配优化、内存优化、通信优化和调度优化。
此外,本章节还提供了通信优化的建议和可以使能的通信算法,以及调度优化方法。