【2023 · CANN训练营第一季】晟腾AI入门课(PyTorch)第二章晟腾平台PyTorch模型迁移与调优——模型迁移方法和步骤

目标

  • 了解PyTorch是如何适配到晟腾平台上的
  • 了解Davinci硬件架构以及生么样的模型在晟腾上更亲和
  • 了解软件术语和Ascend-PyTorch的安装步骤
  • 了解如何将原生PyTorch的模型代码适配到Ascend-PyTorch

前置知识

  • 对原生PyTorch的软件架构有一定了解
  • 对晟腾芯片及CANN软件栈有一定了解
  • 对原生PyTorch的使用方法有一定了解
  • 对混合精度训练有一定了解

介绍——PyTorch全景

在这里插入图片描述

介绍——达芬奇架构介绍

在这里插入图片描述

介绍——软件架构及Ascend-PyTorch(1.8)安装

在这里插入图片描述
参考链接

前提条件

  • 已完成CANN开发或运行环境的安装,确保相应os依赖(如python、numpy等)已安装
  • 需确保Cmake >= 3.12.0,gcc >= 7.3.0
  • 建议用户直接在安装环境中进行编译。如果在其他环境中编译,需要编译环境和安装环境的os版本、依赖版本一致

步骤

  • 安装依赖 pip3 install pyyaml wheel
  • 安装官方torch包 pip3 install torch==1.8.1+cpu
  • 编译生成pytorch插件的二进制安装包 git clone -b master https://gitee.com/ascend/pytorch.git;cd pytorch && bash ci/build.sh -python=3.7
  • 安装插件torch_npu包 pip3 install -upgrade dist/torch_npu-1.8.1-xxx.whl
  • 安装混合精度模块(可选)https://gitee.com/ascend/apex

PyTorch模型迁移(三种方法)

  • 手工迁移
  • 脚本转换工具(msFmkTransplt)
  • 自动迁移(推荐)

手工迁移

迁移前的准备

  • 关于分布式:由于NPU上的一些限制,PyTorch需要使用DistributedDataParallel(DDP),若原始代码使用的是DataParallel(DP)则需要修改为DDP,DP相应的一些实现例如torch.cuda.commom,则可以替换为torch.distributer相关操作
  • 关于混合精度:由于NPU天然的混合精度属性,我们需要使用apex对原始代码进行修改
    在这里插入图片描述

单P模型迁移

单P代码迁移的主要修改点

  • 设备设备从cuda切换至npu
  • torch.cuda --> torch.npu
    在这里插入图片描述

多P模型迁移

在这里插入图片描述

Extra 报错排查

在这里插入图片描述

脚本转换工具迁移

功能介绍

  • 脚本转换工具根据适配规则,对用户脚本给出修改建议并提供转换功能,大幅度提高了脚本迁移速度,降低了开发者的工作量
  • 原脚本需要在GPU环境下且基于Python3.7及以上能够跑通
  • 脚本转换后的执行逻辑与转换前保持一致
  • 此脚本转换工具当前支持PyTorch1.5.0和1.8.1版本的训练脚本转换

执行转换

  • 进入脚本转换工具所在路径 cd Ascend-cann-toolkit安装目录/ascend-toolkit/latest/ms_fmk_transplt/
  • 执行脚本转换 ./pytorch_gup2npu.sh -i 原始脚本路径 -o 脚本转换结果输出路径 -v 原始脚本框架
  • 完成脚本转换
    在这里插入图片描述
    参考文档

自动迁移(推荐)

简介

仅PyTorch 1.8.1版本及以上使用,自动迁移方式较简单,且修改内容最少,只需在训练脚本中导入库代码。

使用方法

  • 配置环境变量
    export PYTHONPATH={CANN包安装目录}/ascend-toolkit/latest/tools/ms_fmk_transplt/torch_npu_bridge:$PYTHONPATH
    
  • 在训练脚本中引入以下头文件
    import torch
    import torch_npu
    .....
    import transfer_to_npu
    
  • 参考模型训练执行训练。查看训练后是否生成权重文件,生成了如下图文件则说明迁移训练成功。

Demo获取&运行

Modelzoo地址 https://gitee.com/ascend/modelzoo

本章总结

  • 介绍了PyTorch在晟腾上的适配原理
    • 新增npu的device类型,开辟新的路径
    • 通过npu的device类型,结合适配层,调用npu底层计算能力
    • 通过适配npu上的内存管理和流管理机制等,使任务运行
    • 通过适配HCCL通讯协议,使能分布式训练
  • 介绍了芯片硬件架构及相应的影响
  • 介绍了晟腾的软件栈及PyTorch的安装向导
  • PyTorch模型迁移的三种方法
    • 手工迁移(前期准备-单P迁移-多P迁移-Debug)
    • 脚本转换工具迁移
    • transfer_to_npu 自动迁移(推荐)

学习推荐

PyTorch https://www.hiascend.com/software/ai-frameworks
ModelZoo https://www.hiascend.com/software/modelzoo
晟腾社区 https://www.hiascedn.com/

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星火飞花

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值