Ascend平台模型迁移方法和步骤(PyTorch)

Ascend平台模型迁移方法和步骤(PyTorch)

1.NPU&Davinci硬件架构介绍

在这里插入图片描述

NPU又叫AI芯片,是一种嵌入式神经网络处理器,其与CPU、GPU明显区别之一在于计算单元的设计,如图所示,在AI Core内部计算单元进一步划分为矩阵运算,向量运算和标量运算。下面详细介绍一下各部分:

  • Cube,负责矩阵运算,每次可完成一个fp16类型的16 * 16与16 * 16大小的两个矩阵相乘,相关操作包括matmul,Conv2d,linear等运算。
  • Vector,负责向量运算,算力低于Cube,但灵活度高。Vector运算类型包括fp16,fp32,int32,int8
  • Scalar,负责标量运算和程序流程控制,功能上类似于一个小型cpu

2.Ascend-Pytorch(1.8)安装

放一个Ascend官方安装教程,具体不再赘述。

3.Pytorch模型迁移指导

注意:这里所说的迁移只是指用Pytorch搭建的模型在Ascend系列硬件上训练,并不直接涉及MindSpore。

Pytorch的模型迁移共有三种方式,根据源代码的不同修改的难易程度也不同,因此修改时需要因‘’地‘’制宜

自动迁移

  • 难度系数:一颗心

  • 操作方式:只需要在训练脚本中添加下面一行代码即可跑通整个模型

    from torch_npu.contrib import transfer_to_npu
    

脚本转换工具迁移

  • 难度系数:三颗心

  • 操作方式:

    # 进入脚本转换工具所在路径(即脚本工具的安装路径)
    cd Ascend-cann-toolkit安装目录/ascend-toolkit/tools/ms_fmk_transplt/
    # 执行脚本转换
    ./pytorch_ _gpu2npu.sh -i 原始脚本路径 -0 脚本转换结果输出路径 -V 原始脚本框架
    # 查看结果
    

手工迁移,需要注意的点,已在下面列出

第一步——迁移准备(DDP&混合精度方式修改)

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

第二步:单卡模型迁移(训练设备修改)

  • 将设备从cuda切换至npu(具体示例参见文尾链接)

    torch.cuda→torch.npu
    

第三步:多卡模型迁移

  • 将分布式通讯方式“nccl”改为“hccl”(具体示例参见文尾链接)

个人经验:可以先试着使用自动迁移的方式,在训练脚本中添加添加那一行代码,若不行的话则直接进行手动迁移

4.总结

  • 了解了Pytorch是如何适配到昇腾平台上的

  • 了解了Davinci硬件架构以及什么样的模型在昇腾上更亲和

  • 了解了软件术语和Ascend-Pytorch的安装步骤

  • 了解了如何将原生Pytorch的模型代码适配到Ascend-Pytorch

5.链接
在这里插入图片描述
昇腾CANN应用开发和Pytorch网络迁移学习文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值