【CANN训练营第三季】2022年度第三季新手班之昇腾AI入门课

news2024/11/24 22:31:40

本次参加CANN训练营,本来我报名的是进阶班课程,再看一遍新手班,学习一下目前CANN的最新进展也是不错的,巩固一下。

视频课程大家可以从这里看到

(1)【CANN训练营第三季】- 昇腾AI入门课(上)_哔哩哔哩_bilibili

(2)【CANN训练营第三季】- 昇腾AI入门课(下)_哔哩哔哩_bilibili

训练营课件可以从这里看到

CANN训练营第三季_昇腾AI入门课-昇腾社区 (hiascend.com)

以下是本次课程的学习笔记。学习笔记中图像为视频课程截图,如果想浏览课程大体内容可以继续观看,但是截图清晰度不好,如果有深入学习需求强烈大家建议看原始视频或者直接看训练营课件。本次课授课老师是从昇腾生态逐步深入,昇腾AI全栈从硬件到软件,最后引入Pytorch从GPU到NPU的适配,逐步深入,适合新手小白快速切入华为生态。

一、什么是CANN和ACL

昇腾AI全栈可以分成四个大部分:

1. 应用使能层面,此层面通常包含用于部署模型的软硬件,例如API、SDK、部署平台,模型库等等。

2. AI框架层面,此层面包含用于构建模型的训练框架,例如华为的MindSpore、TensorFlow、Pytorch等。

3. 异构计算架构,偏底层、偏通用的计算框架,用于针对上层AI框架的调用进行加速,力求向上支持多种AI框架,并在硬件上进行加速。

4. 计算硬件,本层是AI计算的底座,有了强力的芯片及硬件设备,上层的加速才有实施的基础。

华为公司面向计算机视觉、自然语言处理、推荐系统、类机器人等领域量身打造了基于“达芬奇(DaVinci)架构”的昇腾(Ascend)AI处理器,开启了智能之旅。为提升用户开发效率和释放昇腾AI处理器澎湃算力,同步推出针对AI场景的异构计算架构CANN(Compute Architecture for Neural Networks),CANN通过提供多层次的编程接口,以全场景、低门槛、高性能的优势,支持用户快速构建基于Ascend平台的AI应用和业务。

 昇腾AI异构计算架构(Compute Architecture for Neural Networks,CANN)被抽象成五层架构,如下图所示。

 

 1.  昇腾计算语言接口

昇腾计算语言(Ascend Computing Language,AscendCL)接口是昇腾计算开放编程框架,是对低层昇腾计算服务接口的封装。它提供Device(设备)管理、Context(上下文)管理、Stream(流)管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理、Graph(图)管理等API库,供用户开发人工智能应用调用。

  2.  昇腾计算服务层

本层主要提供昇腾计算库,例如神经网络(Neural Network,NN)库、线性代数计算库(Basic Linear Algebra Subprograms,BLAS)等;昇腾计算调优引擎库,例如算子调优、子图调优、梯度调优、模型压缩以及AI框架适配器。

  3.  昇腾计算编译引擎

本层主要提供图编译器(Graph Compiler)和TBE(Tensor Boost Engine)算子开发支持。前者将用户输入中间表达(Intermediate Representation,IR)的计算图编译成NPU运行的模型。后者提供用户开发自定义算子所需的工具。

  4.  昇腾计算执行引擎

本层负责模型和算子的执行,提供如运行时(Runtime)库(执行内存分配、模型管理、数据收发等)、图执行器(Graph Executor)、数字视觉预处理(Digital Vision Pre-Processing,DVPP)、人工智能预处理(Artificial Intelligence Pre-Processing,AIPP)、华为集合通信库(Huawei Collective Communication Library,HCCL)等功能单元。

  5.  昇腾计算基础层

本层主要为其上各层提供基础服务,如共享虚拟内存(Shared Virtual Memory,SVM)、设备虚拟化(Virtual Machine,VM)、主机-设备通信(Host Device Communication,HDC)等。

 

AscendCL(Ascend Computing Language,昇腾计算语言)是昇腾计算开放编程框架,是对底层昇腾计算服务接口的封装,它提供运行时资源(例如设备、内存等)管理、模型加载与执行、算子加载与执行、图片数据编解码/裁剪/缩放处理等API库,实现在昇腾CANN平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。简单来说,就是统一的API框架,实现对所有资源的调用。

 

AscendCL的优势如下:

1.  高度抽象:算子编译、加载、执行的API归一,相比每个算子一个API,AscendCL大幅减少API数量,降低复杂度。

2.  向后兼容:AscendCL具备向后兼容,确保软件升级后,基于旧版本编译的程序依然可以在新版本上运行。

3.  零感知芯片:一套AscendCL接口可以实现应用代码统一,多款昇腾处理器无差异。

AscendCL的主要应用场景如下:

1.  开发应用:用户可以直接调用AscendCL提供的接口开发图片分类应用、目标识别应用等。

2.  供第三方框架调用:用户可以通过第三方框架调用AscendCL接口,以便使用昇腾AI处理器的计算能力。

3.  供第三方开发lib库:用户还可以使用AscendCL封装实现第三方lib库,以便提供昇腾AI处理器的运行管理、资源管理等能力。

前面讲解了华为AI全栈解决方案、昇腾AI异步计算架构CANN以及应用开发框架ACL,对昇腾得软件栈有了初步了解。

二、Pytorch深度学习框架在NPU上如何使用

在华为的NPU上,我们首选MindSpore进行训练,但是如果早期的深度学习训练框架是Pytorch或者TensorFlow的话,华为软件生态提供第三方框架在华为NPU上的支持。后续以Pytorch为例说明如何在华为的NPU上使用Pytorch训练框架。

 Pytorch训练框架迁移到华为得NPU上计算计算可以参考文档第三方框架适配-昇腾社区 (hiascend.com)以及源码pytorch: Ascend PyTorch adapter (gitee.com)

 

 对接Pytorch训练框架,昇腾AI处理器的加速实现方式是以各种算子为粒度进行调用(OP-based),即通过AscendCL调用一个或几个D亲和算子组合的形式,代替原有GPU的实现方式。

当前选择在线对接适配方案的主要原因有以下几点:

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

 AI Core上Cube计算单元仅支持半精度,Vector可以支持单精度

 

 

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

  • 自动迁移:训练时,在训练脚本中导入脚本转换库,导入后执行训练。训练脚本在运行的同时,会自动将脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口。整体过程为:边训练边转换。
  • 工具迁移:训练前,通过脚本迁移工具,自动将训练脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为:先转换脚本,再进行训练。
  • 手工迁移:算法工程师通过对模型的分析、GPU与NPU代码的对比进而对训练脚本进行修改,以支持再昇腾AI处理器上执行训练。迁移要点如下:
    1. 定义一个以NPU为训练设备device或将适配GPU的接口切换至适配NPU的接口。
    2. 多卡迁移需修改芯片间通信方式为hccl。

在使用Ascend-Pytorch时一定要注意版本得适配

 继续向下就涉及到模型迁移的具体案例了,下次文章我们继续。

强烈建议大家,如果有时间学习昇腾的文档非常详细,训练营即使结束了也可以报名学习上面的资料,作为入门华为生态是非常全面的科普性的资料。

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

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

相关文章

使用Keepalived工具实现集群节点的高可用

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:蟹黄瓜子文章来源:社区投稿 1.前言 在集群当中离不开的一个词就是是高可用,用本文来…

OpenWrt + 每步科技DDNS 实现ipv6动态域名解析方法

其实好几个月前我就已经把这个动态域名设置好了,后面重新刷了系统,忘记保存,又得重新再来,这次把过程记录一下,免得下次再从头百度。 工具 刷好openWrt的路由器一个每步科技注册的域名(我为什么选择这个&…

数字电子技术(八)D/A和A/D转换

D/A和A/D转换概述D/A转换A/D转换例题练习模拟信号:在时间与数值上都连续 数字信号:在时间与数值上都离散 概述 D/A转换:数字信号——模拟信号 (D/A转换器简称DAC)A/D转换:模拟信号——数字信号 &#xff0…

修改物料编号格式及长度

修改物料编号格式及长度(OMSL) 路径:IMG--后勤常规--物料主数据--基本设置--定义物料编号的输出格式

毕业设计 - 基于JSP的合同信息管理系统【源码+论文】

文章目录前言一、项目设计1. 模块设计数据库设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web jsp 项目: 基于JSP的合同信息管理系统 适合用于毕业设计、课程设计 一、项目设计 1. 模块设计 需求分析是从客户的需求中提取出软件系统能够帮助用户…

java互联网医院系统HIS源码带本地搭建教程

技术架构 技术框架:SpringBoot MySql MyBatis nginx Vue2.6 原生APP 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 Android Studio 文字本地搭建教程 下载源码,小皮面板安装mysql5.7数据库,创建一个新数据库,…

引力波探测,冷冻电镜研究:两项诺奖GPU功不可没

我们的日常工作固然重要,但并非每一份重要的工作都能够助力他人获得诺贝尔奖。然而,就在2017年10月,GPU 计算便两度成为了助力获得诺贝尔奖的幕后英雄。 三名美国物理学家Rainer Weiss、Barry Barish和Kip Thorne因探测到了爱因斯坦百年前预测…

从“跨域融合”到“中央计算”,这家Tier1如何率先抢跑?

全球汽车产业已经进入以智能化为主旋律的下半场竞赛,同时整车电子电气架构也在加速跨入集中式电子电气架构时代。 在这样的背景之下,智能驾驶域控制器成为了当前最大的增量市场之一,由此也带动了上游芯片、OS、中间件等域控相关软硬件产品的…

第13讲:Python列表对象中元素的删操作

文章目录1.列表元素删操作的方法2.调用remove方法一次删除一个指定的元素3.调用pop方法一次只删除一个指定索引的元素3.1.使用pop方法删除列表中索引为2的元素3.2.使用pop方法不指定索引3.3.使用pop方法指定的索引不存在时同样也会抛出错误4.使用del语句一次至少删除一个元素4.…

nodejs+vue082新生入学管理系统-vscode msyql

一章 绪论 3 1.1课题背景 3 1.2课题研究的目的和意义 3 1.3 研究现状 4 1.4论文所做的主要工作 4 第二章 技术介绍 5 2.1 B/S结构 5 2.2MySQL介绍 5 2.3MySQL环境配置 6 第三章 系统分析与设计 8 3.1系统说明 8 3.2系统可行性分析 8 3.2.1 技术可行性 8 3.2.2 经济可行性 8 3…

Vue3——路由和嵌套路由的使用

路由的作用 用来在前端的页面实现页面的切换,比如下图中acwing的页面应该就是采用了路由来设计导航栏,在每一次点击不同选项时只有网址后面的索引发生变化,网页并没有刷新 路由的使用方法: 根据导航栏处的跳转的页面的不同&…

如何创建vue项目

一. 环境准备 1.安装node.js 推荐地址:Node.js 2.检查是否安装完成:输出版本号说明安装成功 二.搭建vue环境 1.全局安装vue/cli 推荐地址:快速上手 | Vue.js 2.在命令输入 npm install -g vue/cli 如果使用yarn global add vue/cli 需要…

JVM--基础--19.7--垃圾收集器--G1

​ JVM–基础–19.7–垃圾收集器–G1 1、结构图 ​ 2、G1收集器(面向服务端) 2.1、特点 2.1.1、并行于并发 使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间,其他需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让java程序…

​汽车芯片的可靠性设计:控制亚稳态,提升稳定性

【作者简介】Dr. Roy 复睿微 IC后端工程师,南开大学与韩国首尔国立大学联合培养博士。博士期间发表高水平学术期刊论文多篇,其中一作一区封面文章2篇;授权发明专利5项。同时,在先进工艺大芯片的静态时序分析、芯片设计流程提效优化…

对某擦边站点的一次渗透

更新时间:2022.07.05 2022年11月21日21:50:12 1. 说明 在上半年的时候,在线浏览网页的时候,突然跳转到了一个sese的界面,然后要下载app,本着弹出即下载的原则,我就欣然安装了: app本身长这样…

Dubbo架构设计与源码解析(一) 架构设计

作者:黄金 一、架构演变 单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构 二、Dubbo总体架构 1、角色职能 • Container:服务容器 (tomcat、jetty、weblogic) • Provider&#xf…

Web Spider NEX XX国际货币经纪 - PDF下载 提取关键词(二)

Web Spider NEX XX国际货币经纪 - PDF下载 & 解析 首先声明: 此次案例只为学习交流使用,切勿用于其他非法用途 文章目录Web Spider NEX XX国际货币经纪 - PDF下载 & 解析前言一、任务说明1.PDF下载2.PDF解析提取关键词数据二、Pip模块安装三、网站分析四、核…

【解决】Unity Player Log 自生成造成磁盘满占用率问题

开发平台:Unity 2020 编程平台:Visual Studio 2022 编程语言:CSharp   问题描述 Unity 工程完成打包与发布过程后,在运行时生成大量 Player Log 的日志文件导致其所在盘占用率满额问题。通常情况下,这类日志文件信息…

微信小程序开发—入门到跑路(三)

3、微信小程序第三天 1、学习目标 知识点名称知识点内容难度系数要求程度页面导航声明式导航、编程式导航、导航传参3星掌握页面事件下拉刷新、上拉触底、上拉触底案例、自定义编译模式3星掌握生命周期生命周期分类、应用生命周期、页面生命周期3星掌握wxs学习认识wxs及应用场…

百度工程师带你探秘C++内存管理(ptmalloc篇)

作者 | daydreamer 前篇《探秘C内存管理(理论篇)》主要介绍了Linux C程序内存管理的理论基础,本文作为系列文章《探秘C内存管理》的第二篇,将会探讨经典内存管理器ptmalloc如何管理C程序的内存。借助剖析ptmalloc解决问题的着重点…