通用模型迁移适配可以分为四个阶段:迁移分析、迁移适配、精度调试与性能调优。
-
迁移分析
迁移支持度分析:- 准备NPU环境,获取模型的源码、权重和数据集等文件;
- 使用迁移分析工具采集目标网络中的模型/算子清单,识别第三方库及目标网络中算子支持情况,分析模型迁移的可行性;
- 在迁移支持度分析中如果存在平台未支持的算子,可通过修改模型脚本,使用等价支持的算子替换的方式解决,或者进行算子适配
-
迁移适配
- 通过模型脚本迁移,实现GPU -> NPU的接口替换、NPU分布式框架改造;
- 配置训练相关环境变量,以保证模型训练可以在昇腾NPU上正常运行;根据实际场景选择相应操作完成模型脚本和启动脚本配置;
- 数据类型为BF16或FP32的模型训练;混合使用单精度(float32)与半精度(float16)数据类型
- 保存模型文件用于在线推理,使用模型文件导出ONNX模型通过ATC工具将其转换为适配昇腾AI处理器的.om文件用于离线推理
-
精度调试
- 确保迁移前后模型精度差异在可接受范围之内,数据无异常溢出;如果出现精度相关问题,需要借助精度问题分析工具分析
-
性能调优
- 在NPU环境上,使用性能分析工具介绍对模型进行性能拆解;基于性能拆解得到的数据,分析瓶颈模块,明确性能优化方向
- 数据加载加速、模型代码亲和适配、内存优化、融合算子、融合优化器;通信优化
1 迁移分析
进行模型迁移之前,需要做以下准备与分析工作:
- 选取合适的模型,在三方平台运行成功,并获取精度/性能基线
- 在昇腾设备上搭建环境,并使用迁移分析工具分析模型在昇腾设备上的支持度
分析流程:
1.1 模型选取与约束说明
- 模型选取
在选取迁移模型时,尽可能选取权威PyTorch模型实现仓,包括但不限于PyTorch(imagenet/vision等)、facebookresearch(Detectron/detectron2等)、open-mmlab(MMDetection/mmpose等)。
对于大模型,使用较为广泛的资源仓库是huggingface社区、Megatron-LM、Llama-Factory等仓库。
-
约束说明
- 迁移前要保证选定的模型能在GPU或CPU上运行,并输出精度和性能基线
- 模型迁移前需要完成昇腾PyTorch训练环境安装,以完成迁移支持度分析与后续的模型训练
包括NPU驱动固件、CANN软件toolkit、二进制算子包以及PyTorch框架的安装
-
目前已知的不支持场景:
- 不支持使用DP(distributed parallel)模式的模型迁移。若用户训练脚本中包含昇腾NPU平台不支持的torch.nn.parallel.DataParallel接口,则需手动修改该接口为torch.nn.parallel.DistributedDataParallel接口,以执行多卡训练。原脚本需要在GPU环境下基于Python3.8及以上跑通。
- APEX库中的FusedAdam融合优化器,目前不支持使用自动迁移或PyTorch GPU2Ascend工具迁移该优化器,需用户手工进行迁移
- 大模型迁移暂不支持bmtrain框架的迁移
- 大模型迁移暂不支持使用了bitsandbytes的迁移
- 大模型迁移暂不支持colossai三方库中HybridAdam优化器相关接口的迁移
- 目前暂不原生支持xFormers训练,需要使用xFormers中的FlashAttentionScore融合算子的迁移
- 当前NPU不支持grouped_gemm第三方库安装
- 当前NPU支持composer第三方库安装,但NPU未做适配,无法使用
2 迁移适配
迁移适配流程总体可分为模型脚本迁移、环境变量和脚本配置和关键特性适配三部分,主要包含以下工作:
- 模型脚本迁移:把三方平台上的PyTorch模型代码映射到昇腾设备上。推荐使用自动迁移,通过导入一键迁移库的形式,将三方平台上的代码映射为昇腾设备代码。
- 自动迁移:在训练脚本中导入脚本转换库,然后拉起脚本执行训练。训练脚本在运行时,会自动将脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口。整体过程为边训练边转换。
- 工具迁移:使用迁移工具(pytorch_gpu2npu或PyTorch GPU2Ascend),自动将训练脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为先转换脚本,再进行训练。
- 手工迁移:通过分析模型,对比GPU与NPU接口,手动对训练脚本进行修改,以支持在昇腾AI处理器上执行训练。
- 定义NPU为训练设备,将训练脚本中适配GPU的接口切换至适配NPU的接口。
- 多卡迁移需修改芯片间通信方式为昇腾支持的hccl。
- 环境变量和脚本配置:在昇腾设备上运行PyTorch模型代码时,必须的适配操作,包括环境变量配置和模型脚本与启动脚本配置。
- 关键特性适配:在昇腾设备上运行PyTorch模型代码时,可选的适配操作。用户需要查看特性是否适用于当前训练场景与设备,根据具体情况选择性适配。
TO BE CONTINUED…