基于香橙派 KunpengPro学习CANN(3)——pytorch 模型迁移

通用模型迁移适配可以分为四个阶段:迁移分析、迁移适配、精度调试与性能调优。

在这里插入图片描述

  • 迁移分析
    迁移支持度分析:

    • 准备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…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值