【2023 · CANN训练营第一季】新手班 昇腾AI入门课(PyTorch)

news2024/11/24 10:57:12

1 昇腾AI全栈架构

昇腾计算产业是基于昇腾系列处理器和基础软件构睫的全栈Al计算基础设施.行业应用及服务,包括昇腾系列处理器、Atlas系列硬件、CANN (Compute Architecture for Neural Networks,异构计算架构》、Al计算框架、应用使能、全流程开发工具链.管理运排工具、行业应用及服务等全产业链。

2 Altas系列硬件

Atlas系列硬件基于昇腾系列AI处理器,(其中Ascend 310用于推理场景,Ascend 910用于训练场景),通过模块标卡、小站、服务器.集群等丰富的产品形态。打造面向“端、边、云”的全场景A基础设施方窝。

3 NPU

昇腾Al处理器的计算核心主要由Al Core构成,其基本结构如下图所示,包括了三种基础计算资源:矩阵计算单元.向量计算单元和标最计筒单元

  • Cube,负责执行矩阵运算,每次可以执行完成一个fpl6的1616与1616的矩阵乘。相关操作包括matmul, conv2d, linca等。
  • Veetor。负责执行向量运算,算力低于Cube ,但灵活度高。Vectot覆盖各种基本的计算类型和许多定制的计算类型,主要包括fp16,fp32,int32,int8等。
  • Scalar。负责各类型的标量运算和程序的流程控制。功能上可以看做一个小CPU.

4 PyTorch适配昇腾AI处理器方案

PyTorch框架实现的对接适配昇腾Al处理器的方案为在线对接方案。当前选择在线对接适配方案的主要原因有以下几点:

  • 最大限度的继承PyTorch框架动态图的特性
  • 最大限度的继承GPU在PyTorch上的使用方式,可以使用户在将模型移植到昇腾AI处理器设备进行训练时,在开发方式和代码重用方面做到最小的改动。
  • 最大限度的继承PyTorch原生的体系结构,保留框架本身出色的特性,比如自动微分、动态分发、Debug、Profiling.Storage共享机制以及设备侧的动态内存管理等。
  • 扩展性好。在打通流程的通路之上,对于新增的网络类型或结构,只需涉及相关计算类算子的开发和实现。框架类算子。反向图建立和实现机制等结构可保持复用。
  • 与GPU的使用方式和风格保持一致。用户在使用在线对接方案时,只需在Python侧和device相关操作中,指定device为昇腾AI处理器,即可完成用昇腾Al处理器在PyTorch对网络的开发、训练以及调试。用户无需进一步关注昇腾Al处理器具体的底层细节。

5 PyTorch模型迁移介绍

将基于PyTorch的训练脚本迁移到昇腾Al处理器上进行训练,目前有以下3种方式:自动迁移(推荐)、工具迁移、手工迁移,且迁移前要保证该脚本能在GPU、CPU上运行。

5.1 自动迁移

训练时,在训练脚本中导入脚本转换库,导入后执行训练。训练脚本在运行的同时,会自动将脚本中的CUDA接口替换为昇腾Al处理器支持的NPU接口。整体过程为:边训练边转换。

5.2工具迁移

训练前,通过脚本迁移工具,自动将训练脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为:先转换脚本,再进行训练。

5.2.1 功能介绍

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

5.2.2 执行转换

  • 进入脚本转换工具所在路径
    cd Ascend-cann-toolkit安装目录/ascend-toolkit/latest/tools/ms_fmk_transplt/
  • 执行脚本转换
    /pytorch_gpu2npu.sh -i原始脚本路径-o脚本迁移结果输出路径-v原始脚本框架版本.完成脚本转换
  • 完成脚本转换

5.3 手工迁移

算法工程师通过对模型的分析、GPU与NPU代码的对比进而对训练脚本进行修改,以支持在昇腾Al处理器上执行训练。迁移要点如下:
定义NPU为训练设备,或将适配GPU的接口切换至适配NPU的接口。多卡迁移需修改芯片间通信方式为hccl。

5.3.1 手工迁移——Step1迁移前的准备

  • 关于分布式
    由于NPU上的一些限制,PyTorch需要使用DistributedDataParallel(DDP),若原始代码使用的DataParalle(DP)则需要修改为DDP,DP相应的一些实现例如torch.cuda.common,则可以替换为torch.distributed相关操作。###
  • 关于混合精度
    由于NPU天然的混合精度属性,我们需要使用apex对原始代码进行修改
#导入混合精度模块
from apex import amp
model = model.cuda()
optimizer = torch.optim.SGDmodel.parametcrs(),Ir=0.1)
#在模型和优化器定义后初始化APEX模块〔新增}
model, optimizer = amp.initialize(model, optimizer,opt_level="O2",loss_scale=128.0)
#梯度反向传播loss.backward()(修改)
with amp.scalc_loss(loss,optimizcry as scaled_loss:
scaled_loss.back ward 

5.3.2 手工迁移-Step2单卡模型迁移

单卡迁移的主要修改点:定义NPU为训练设备,并将适配GPU的接口切换至适配NPU的接口。

  • GPU原生代码
导入Py Torch
import torch

#指定GPU作为训练设备
CALCULATE_DEVICE - "cuda:O"
torch.euda.set_device(CALCULATE_DEVICE

#将模型放到device的两种方法
model = model.cuda0#写法一
model = model.to(CALCULATE_DEVICE)#写法二

#将输入也从host放到device上
images = images.to(CALCULATE_DEVICE)
target = target.to(CALCULATE_DEVICE)
  • NPU迁移代码
导入NPU相关库①
import torch
import torch_npu

#指定NPU作为训练设备②
CALCULATE_DEVICE= " npu:o"
torch_npu.npu.set_device(CALCULATE_DEVICE)

#将模型放到device的两种方法③
model= model.npu()#写法—
model= model.to(CALCULATE_DEVICE)写法二

#将输入t也从host放到device上
imagcs = images.to(CALCULATE_DEVICE)target = target.toiCALCULATE_DEVICE)

5.3.3 手工迁移——Step3多卡模型迁移

多卡代码迁移的主要修改点:除单卡迁移包含的3个修改要点外,在分布式场景下,还需要切换通信方式

  • GPU原生代码
GPU原生代码
#**为端口号,根据实际选择一个闲置端口填写dist.init process_group( backend='nccl,
init_mcthod = "tep/;127.0.0.1:".word_size=args.world.size,
rank = args.rank)

  • NPU迁移代码
#*为端口号,根据实际选择一个闲置端口填写dist.init_process_group( backend=heel" ,
init_method = "tcpff:127.0.0.1:,word_size=args.world.size,
rank - args.rank)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/552903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nRF52832 定时器REPEATED模式,导致异常重启的问题排查全过程

文章目录 一、遇到问题二、JLink连接时,无法复现三、查看日志四、回退改动五、解决问题六、问题剖析 一、遇到问题 nRF52832项目增加一个功能,自测没问题就发出去了。结果300台机器,有7台出现异常,无法正常使用。细看了一遍提价上…

论文阅读_音频生成_AudioLM

论文信息 name_en: AudioLM: a Language Modeling Approach to Audio Generation name_ch: AudioLM:一种音频生成的语言建模方法 paper_addr: http://arxiv.org/abs/2209.03143 doi: https://doi.org/10.48550/arXiv.2209.03143 date_read: 2023-04-25 date_publis…

打开数据结构大门——实现小小顺序表

文章目录 前言顺序表的概念及分类搭建项目(Seqlist):apple:搭建一个顺序表结构&&定义所需头文件&&函数:banana:初始化:pear:打印:watermelon:数据个数:smile:检查容量:fireworks:判空:tea:在尾部插入数据:tomato:在尾部删除数据:lemon:在…

封装Appium启动参数,提高自动化测试效率的关键

目录 前言: 一、开发环境搭建 二、代码实现 1.导入Appium相关的库文件。 2.创建Appium的启动参数对象,并设置相关参数。 3.启动测试服务。 4.执行测试用例。 5.结束测试服务。 三、总结 前言: Appium是一款广泛使用的自动化测试工具…

Microsoft Office 2007的安装

哈喽,大家好。今天一起学习的是office2007的安装,有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统:Windows 7 不建议win10及以上操作系统使用 系统类型:64位 演示版本:cn_office_ultimate_2007_D…

从 SIEM 到下一代 SIEM 的演变

在此文中,我们详细介绍了下一代 SIEM 的演变。传统的 SIEM 主要用于提高网络可见性和网络安全性,同时支持合规性。它们跨应用程序、网络和系统摄取、收集和存储日志数据。 SIEM 使捕获和搜索数据变得更加容易,这些数据有助于组织进行审计、取…

详解RGB和XYZ色彩空间转换之下

前言 首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R,G,B,而是波长分别为700nm,546.1nm,435.8nm的单色红光,单色绿光,单色蓝光。sRGB中的RGB中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB…

Docker数据目录迁移方法

文章目录 前言一、停掉Docker服务?二、迁移docker数据到数据盘目三、备份原数据目录四、添加软链接五、重启docker服务六、确认服务没有问题后,删除备份的目录总结 前言 服务器上安装的docker服务,数据默认存储在/var/lib/docker目录&#x…

html5网页播放器视频切换、倍速切换、视频预览的代码实例

本文将对视频播放相关的功能进行说明,包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。 图 / html5视频播放器调用效果(倍速切换) 初始…

网络知识点之-动态路由

动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。 中文名:动态路由外文名:dynamic routing 简述 动态路由是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息…

usb摄像头驱动-core层USB集线器(Hub)驱动

usb摄像头驱动-core层USB集线器(Hub)驱动 文章目录 usb摄像头驱动-core层USB集线器(Hub)驱动usb_hub_inithub_probehub_eventport_eventhub_port_connect_changehub_port_connectusb_new_deviceannounce_device 在USB摄像头驱动中…

20.04Ubuntu换源:提升软件下载速度和更新效率

在使用Ubuntu操作系统时,一个常见的优化措施是更改软件源,以提高软件下载速度和更新效率。软件源是指存储软件包的服务器,通过更换软件源,你可以选择更靠近你所在地区的服务器,从而加快软件下载速度,并减少…

Android Compose Bloom 项目实战 (五) : 使用Navigation实现页面跳转

1. 前言 上几篇文章 我们分别实现了 Compose Bloom项目的各个页面,包括欢迎页、登录页和主页,但是各个页面都是单独独立的,并没有关联页面跳转,而本篇文章的任务就是实现各个页面见的跳转。 2. Navigation 要实现页面跳转&#…

Jetpack Compose动画实现原理详解

一、简介 Jetpack Compose是Google推出的用于构建原生界面的新Android 工具包,它可简化并加快 Android上的界面开发。Jetpack Compose是一个声明式的UI框架,随着该框架的推出,标志着Android 开始全面拥抱声明式UI开发。Jetpack Compose存在很…

【数据结构】红黑树封装map和set

文章目录 1.前置知识2.结构的改写与封装2.1 map和set的结构框架2.2 RBTreeNode结构的改写2.3 RBTree结构改写(仿函数的引入) 3. 迭代器3.1 RBTree的迭代器3.2 map和set的迭代器封装 4. 插入的改写和operatorp[]的重载4.1 insert的改写4.2 map::operator[…

【2023 · CANN训练营第一季】进阶班 应用开发深入讲解→DVPP

1 数据预处理概述 1.1 典型使用场景 受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制。在计算视觉领域,这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不—致时…

pytest-编写插件

pytest 0 、文档1、钩子函数分类1.4 测试运行钩子 2、本地编写插件:conftest.py3、外部插件:setuptools4、实战 0 、文档 官方文档 中文文档 1、钩子函数分类 pytest中的钩子函数按功能一共分为6类:引导钩子,初始化钩子、用例收…

rtl仿真器-incisive安装和测试

需要的文件 安装文件 incisive : http://pan.baidu.com/s/1dFC9KZn 提取码 k3cb path: license: IScape: 安装的图形界面 IScape下载链接: https://pan.baidu.com/s/1FvpOto5fAIRjQARcbMbjZQ 密码: k1cb 目录结构 需要四个目录 安装目录:INCISIVE151 path 存放解密工具 l…

强化学习路线规划之深度强化学习

学到如今,我实在明白了一个至关重要的东西,那就是目标很重要,有了清晰的目标我们就知道该做什么,不至于迷茫,否则每天都在寻找道路。所以我一直在规划这样一条道路,让想学习的人可以抛下不知道该怎么做的顾…

在Notion AI 中轻松打造您的AI私人助理,提供卓越的工作体验(二)

大家好,我是瓜叔。 notion AI在工作和生活场景中的应用 我们先来看"总结"功能。 这边有一篇文章叫做学习编码的好处。导入到nation https://www.likecs.com/show-203992587.html 导入方法详见上一篇文章:在Notion AI 中轻松打造您的AI私人助理…