昇腾AI全栈架构

华为AI全栈全场景解决方案为4层,分别为芯片层、芯片使能层、AI框架层和应用使能层。

芯片

基于统一、可扩展架构的系列化AI IP和芯片,为上层加速提供硬件基础。

芯片产品:昇腾310和昇腾910的独立芯片,Nano-Tiny-Lite的非独立芯片。

Ascend层,一切集成电路的核心,主要作用为运算作用;芯片要学习外部数据以实现对特定数据的感知能力,衡量芯片运算能力的单位为TOPS(每秒钟进行一万亿次,\(10^{12}\)次)

根据不同的需求可以覆盖端边云全场景,端包括手机、手表、摄像头、耳机等(20MPOS-20TPOS间),边包括车载处理器、边缘计算服务器(10TOPS-100TOPS),云包括数据中心(配备Ascend910系列芯片,提供200+TOPS算力.)

芯片使能(异构计算架构)

芯片使能层作用是实现解决方案对外能力开放,及基于计算图的业务流的控制和运行。芯片使能层的作用是调用芯片算力,进行任务调度处理、加减乘除运算和复杂的微积分运算等,通过异构计算架构(Computer Architecture for Neural Networks,CANN)提供的AscendCL语言完成对芯片的控制,让其按照给定指令工作。

CANN支持多种主流的AI框架,包括MindSpore、Tensorflow、Pytorch、Caffe等,并提供上千个高性能算子;CANN中包括了计算加速库、芯片算子库和高度自动化的算子开发工具。

CANN可以抽象为5层,分别是计算基础层、计算执行层、计算编译层、计算服务层、计算语言。

  • 计算基础层:为上层提供基础服务,如共享虚拟内存(Shared Virtual Memory,SVM)、设备虚拟化(Virtual Machine,VM)、主机-设备通信(Host Device Communication,HDC)等
  • 计算执行层:负责模型和算子的执行,提供如运行时( Runtime )库(执行内存分配、模型管理、数据收发等)、图执行器( Graph Executor )、数字视觉预处理( Digital Vision Pre - Processing , DVPP )、人工智能预处理( Artificial Intelligence Pre-Processing, AIPP )、华为集合通信库(Huawei Collective Communication Library , HCCL )等功能单元。
  • 计算编译层:本层主要提供图编译器( Graph Compiler )和 TBE ( Tensor Boost Engine )算子开发支持。前者将用户输入中间表达( Intermediate Representation , IR )的计算图编译成 NPU 运行的模型。后者提供用户开发自定义算子所需的工具。
  • 计算服务层:本层主要提供异腾计算库,如神经网络( Neural Network , NN )库、线性代数计算库( Basic Linear Algebra Subprograms . BLAS )等;昇腾计算调优引擎库,例如算子调优、子图调优、梯度调优、模型压缩以及 AI 框架适配器。
  • 计算语言(昇腾算子库):接口是昇腾计算开放编程框架,是对低层昇腾计算服务接口的封装。它提供 Device (设备)管理、 Context (上下文)管理、 Stream (流)管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理、 Graph (图)管理等 API 库,供用户开发人工智能应用调用。

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

AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络推理应用的C语言API库,提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,能够实现在昇腾CANN平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。用户可以通过第三方框架调用AscendCL接口,以便使用昇腾AI处理器的计算能力;用户还可以使用AscendCL封装实现第三方lib库,以便提供昇腾AI处理器的运行管理、资源管理能力。

这个框架需要完成三个任务:应用程序的实现、模型开发(训练代码)、算子(计算图)实现,对应的三种核心能力为模型加载能力开放、算子能力开发和Runtime能力开放。

AscendCL的优势:

  • 高度抽象:算子编译、加载、执行的API诡异,相比每个算子一个API,AscendCL大幅度减少API数目,降低计算复杂度。
  • 向后兼容:确保软件升级后,基于旧版本编译程序依然可以在新版本上运行。
  • 零感知芯片:AscendCL接口可以实现应用代码统一,多昇腾处理器无差异。

AscendCL的应用场景:

  • 开发应用:用户可以直接调用提供的接口开发目标分类识别应用。
  • 供第三方框架调用:用户可以通过第三方框架调用AscendCL接口,使用昇腾AI处理器的计算能力。
  • 供第三方开发lib库:用户可以使用AscendCL封装实现第三方库lib库,方便AI处理器运行管理和资源管理。
框架层

构建模型的训练框架,可支持MindSpore、Tensorflow、Pytorch、Caffe等端边云协同的同意训练和推理框架。

应用使能层

一键开发平台Modelarts,基于Web端的应用平台,提供云上的开发环境,训练环境,AI应用的生成以及部署。【用于部署模型的软硬件,包括API/SDK/部署平台和模型库】

模型迁移方法和步骤

硬件简介

NPU为神经网络处理单元,和CPU/GPU明显区别在于计算单元的区别;在上图中可以看到NPU将计算单元分为矩阵计算单元、向量计算单元和标量计算单元。

  • 矩阵计算单元Cube:负责矩阵运算,每次可以完成FP16类型的\(16\times16\)大小的两个矩阵相乘,包括MATMUL/CONV2D/LINEAR等运算。
  • 向量计算单元Vector:负责向量运算,支持FP16/FP32/INT8/INT32类型。
  • 标量计算单元Scalar:负责标量运算和程序流程控制。
Ascend-Pytorch安装

参考以下链接安装:

https://www.hiascend.com/document/detail/zh/canncommercial/601/envdeployment/instg/instg_000002.html

https://www.hiascend.com/document/detail/zh/canncommercial/601/modeldevpt/ptmigr/ptmigr_0004.html

https://www.hiascend.com/document/detail/zh/canncommercial/601/envdeployment/instg/instg_000035.html

模型迁移方法

自动迁移、脚本转换工具迁移和手工迁移。

Demo链接:https://gitee.com/ascend/modelzoo

参考手册:https://www.hiascend.com/document/detail/zh/canncommercial/601/modeldevpt/ptmigr/ptmigr_0008.html

自动迁移

在训练脚本中加入以下代码

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

单卡迁移:

# 1、导入NPU相关库
import torch
import torch_npu # 2、迁移适配GPU的模型脚本,指定NPU作为训练设备。指定训练设备由两种方式 # .to(device)
# 该方式可以指定需要的训练资源,使用比较灵活,定义好device后可通过xx.to(device)的方式将模型或数据集等加载到GPU或NPU上,如model.to(device)。 device = torch.device('cuda:{}'.format(args.gpu)) # 迁移前
device = torch.device('npu:{}'.format(args.gpu)) # 迁移后 #.cuda(迁移前)和.npu(迁移后)
# 该方式不会自动使用GPU或NPU,需要以xx.cuda()或xx.npu()的方式将模型数据# 集等加载到GPU或NPU上,如model.cuda() torch.cuda.set_device(args.gpu) # 迁移前
torch_npu.npu.set_device(args.gpu) # 迁移后 # 3、替换CUDA接口:将训练脚本中的CUDA接口替换为NPU接口,例如CUDA接口、模型、损失函数、数据集等迁移到NPU上。
# CUDA接口替换为NPU接口
torch.cuda.is_available() # 迁移前
torch_npu.npu.is_available() # 迁移后 # 模型迁移
model.cuda(args.gpu) # 迁移前
model.npu(args.gpu) # 迁移后 # 数据集迁移
images = images.cuda(args.gpu, non_blocking=True) # 迁移前
target = target.cuda(args.gpu, non_blocking=True)
images = images.npu(args.gpu, non_blocking=True) # 迁移后
target = target.npu(args.gpu, non_blocking=True)

多卡迁移:

# 除单卡迁移包含的3个修改要点外,在分布式场景下,还需要切换通信方式,直接修改init_process_group的值。
# 修改前,GPU使用nccl方式:
dist.init_process_group(backend='nccl',init_method = "tcp//:127.0.0.1:**", ...... ,rank = args.rank) # **为端口号,根据实际选择一个闲置端口填写 # 修改后,NPU使用hccl方式:
dist.init_process_group(backend='hccl',init_method = "tcp//:127.0.0.1:**", ...... ,rank = args.rank) # **为端口号,根据实际选择一个闲置端口填写

应用开发

基本准备
认证测试
  • 以下哪一项是昇腾提供的AI框架(Mindspore)

  • 通过AscendCL接口,能够实现利用昇腾硬件计算资源、在昇腾CANN平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。

  • 您需要按顺序依次申请如下资源:Device、Context、Stream,确保可以使用这些资源执行运算、管理任务。有运行管理资源的申请,自然也有对应的释放接口,所有数据处理都结束后,需要按顺序释放运行管理资源:Stream、Context、Device。您可以只调用aclrtSetDevice接口,因为这个接口同时创建1个默认的Context;而这个默认的Context还附赠了Stream。

  • 下列不属于昇腾计算服务层的是(昇腾张量编译器)

  • 使用AscendCL开发应用的基本流程,以下正确的是?AscendCL初始化-->运行管理资源申请-->模型加载-->模型执行-->模型卸载-->运行管理资源释放-->AscendCL去初始化

  • 以下关于ATC工具说法正确的是:ATC工具可将开源框架的网络模型(如Caffe、TensorFlow等)转换成Davinci架构专用的模型;ATC工具可以将Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;ATC工具在转换过程中会进行算子调度优化、权重数据重排、内存使用优化等具体操作。

  • 模型转换工具的名称是ATC

  • 昇腾AI处理能识别*.om格式的模型文件

  • 关于达芬奇架构中的计算单元,以下说法正确的是【Cube计算单元负责矩阵运算,每次执行可以完成一个fp16的16×16与16×16的矩阵乘; Vector计算单元负责执行向量运算,覆盖各种基本的计算类型;Scalar计算单元负责各类型的标量数据运算和程序的流程控制】

  • PyTorch-Ascend(1.8)的安装步骤为:安装依赖 pyyaml和wheel -> 安装官方torch包 -> 编译生成PyTorch插件的二进制安装包 -> 安装插件torch_npu包

  • AscendCL能够进行(模型加载与执行,运行时资源管理, 算子加载与执行,图像/视频处理)

  • 下列关于AscendCL的说法正确的是:用户可以调用AscendCL提供的接口进行图片分类、目标识别等应用的开发;用户可以通过第三方框架调用AscendCL,以便使用昇腾AI处理器的计算能力;用户可以使用AscendCL封装实现第三方lib库,以便提供昇腾AI处理器的运行管理、资源管理等能力;用户可以使用AscendCL进行图开发并部署到昇腾AI处理器运行。

  • 关于昇腾AI处理器内的计算单元,以下说法正确的是(AI CPU,负责执行不适合跑在AI Core上的算子,例如非矩阵类的复杂逻辑处理;AI Core,昇腾AI处理器内的AI计算加速单元;DVPP,昇腾AI处理器内置的图像处理单元;AIPP,可在AI Core上完成数据预处理)

  • AscendCL接口支持的编程语言有(C&C++;Python)

  • 以下哪些昇腾硬件可以用于推理?Atlas 200 AI加速模块,Atlas 500智能小站,Atlas 800 训练服务器,Atlas 300V 视频解析卡

  • PyTorch框架在线对接昇腾AI处理器的适配方案有哪些特性和优点? 最大程度的继承PyTorch框架动态图的特性;最大限度的继承原生PyTorch上的使用方法,用户迁移过程中在代码开发和代码重用时做到最小的改动;最大限度的继承PyTorch原生的体系结构;扩展性好。在打通流程的通路之上,对于新增的网络模型或结构,只需涉及相关计算类算子的开发与实现。

  • 以下关于apex的功能和描述正确的是:[功能]opt_level: O1 [描述]精度模式,Conv, Matmul等使用float16计算,其他如Softmax、BN使用float32;[功能]opt_level: O2 [描述]性能模式,除了BN使用float32外,其他绝大部分使用float16;[功能]静态Loss Scale [描述]静态设置参数确保混合精度训练收敛;[功能]动态Loss Scale [描述]动态计算Loss Scale值并判断是否溢出。

  • 日志中包括以下哪些关键信息:日志级别、触发生成日志的文件及对应的行号、产生日志的模块的名称、各模块具体的日志内容

  • 关于AscendCL初始化,以下说法不正确的是?一个应用程序进程内可以调用多次aclInit接口进行AscendCL初始化 【正确的内容包括:AscendCL初始化时,可以通过json配置文件配置Dump信息、Profiling采集信息等;如果默认配置已满足需求,无需修改,可向aclInit接口中传入NULL,或者可将配置文件配置为空json串(即配置文件中只有{});

    使用AscendCL接口开发应用时,必须先调用aclInit接口,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常】

【2023 · CANN训练营第一季】昇腾AI入门Pytorch的更多相关文章

  1. 一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”

    摘要:都说人工智能改变了生活,你感觉到了么?AI的魔力就在你抠去路人甲的一瞬间来到了你身边.今天就跟大家聊聊--神秘的"AI消除术". 引语 旅途归来,重温美好却被秀丽河山前的路人 ...

  2. 用昇腾AI护航“井下安全”

    摘要:基于CANN(异构计算架构)打造的"智能矿山安全生产管理平台",能够更便捷和更高效地服务于更多矿山安全生产建设. 本文分享自华为云社区<华为携手云话科技助力矿山智能化, ...

  3. 又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

    摘要:上海人工智能实验室的浦视开源算法体系(OpenMMLab)团队基于昇腾AI发布了MMDeploy 0.10.0版本,该版本已支持OpenMMLab算法仓库在昇腾异构计算架构CANN上的推理部署. ...

  4. 昇腾AI新技能,还能预防猪生病?

    摘要:日前,由华为与武汉伯生科技基于昇腾AI合作研发的"思符(SiFold)蛋白质结构预测平台"正式推出,并成功应用于国药集团动物保健股份有限公司的猪圆环病毒疫苗研发中. 本文分享 ...

  5. 【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)

    1 卷积神经网络:输入层 之前提到多层感知机的参数太多,导致训练耗时长并且对图像处理也不具有优势,因此大神们 就提出了多层神经网络,其中最经典的是卷积神经网络(Convolution Neural N ...

  6. 昇腾AI计算,618冲动消费也不怕

    摘要:近期大热的图像识别处理核赔技术,可应对剁手党们冲动购物之后汹涌而至的退货场景.那么,这背后运用的技术原理是怎样? AI计算平台又能否重构企业业务引擎呢? 随着AI技术的挖掘与应用落地,也为每一年 ...

  7. 【华为昇腾】 序言:从昇腾AI软硬件平台聊起

    2021年是很值得纪念的一年,从上半年开始跟随导师编写有关华为昇腾软件栈CANN的教材,一年的时间反复迭代 终于快要出版了. 这一系列博客可以视作我从编者的角度,重新梳理的全书思路.明年入职商汤之后要 ...

  8. 今年第一季全球PC出貨量同比下降5.2%

    市場調研公司Gartner上周發佈報告稱,隨著企業支出的下滑,今年第一季全球PC出貨量同比下降5.2%迪士尼美語評價.英特爾稱,第一季筆記本晶片出貨量同比增長3%,但是筆記本晶片的平均銷售價格下降了3 ...

  9. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  10. QQ聊天界面的布局和设计(IOS篇)-第一季

    我写的源文件整个工程会再第二季中发上来~,存在百度网盘, 感兴趣的童鞋, 可以关注我的博客更新,到时自己去下载~.喵~~~ QQChat Layout - 第一季 一.准备工作 1.将假数据messa ...

随机推荐

  1. MySQL高可用架构-MMM、MHA、MGR、分库分表

    总结 MMM是是Perl语言开发的用于管理MySQL主主同步架构的工具包.主要作用:管理MySQL的主主复制拓扑,在主服务器失效时,进行主备切换和故障转移. MMM缺点:故障切换可能会丢事务(主备使用 ...

  2. 汽车制造工艺 2.5D 可视化组态监控 | 图扑软件

    前言 随着世界经济的不断发展,汽车作为一个如今随处可见的物体,从大体上概括是由四大部分组成:发动机.底盘.车身.电气系统.看似简单的几个名词组件,其内部却是由无数的细小零件构成,一辆汽车更是由上万个微 ...

  3. 全网最详细中英文ChatGPT-GPT-4示例文档-智能编写Python注释文档字符串从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  4. oracle数据对比--用户,索引,分区,dblink,同义词,视图

    问题描述:需要对比用户数据一般在数据库迁移之后,需要对比一下两个库之间的差距,如果登上去一条命令的执行,去统计,就会比较麻烦,这里整理了一些脚本可用.通过创建dblink的方式快速查询,也可以整合到一 ...

  5. 虚拟机安装linux操作系统中IP设置

    问题描述:用虚拟机安装linux操作系统时,不选择分配IP,系统默认会分配动态IP,如果是临时搭建,就可以默认动态IP,也可以使用连接工具连接虚拟机.但如果是长期使用,选择使用固定的IP会更好,需要手 ...

  6. 运行项目报错Cannot read property 'styles' of undefined

    原因是安装依赖版本不对,以下是我的解决办法: 1.先删除项目中package-lock.json 文件 及node_modules文件(可使用rimraf指令删除node_modules,直接删文件很 ...

  7. Matlab蚁群算法求解旅行商问题

    目录 问题展现 解决代码 代码1 输出结果 代码2 输出结果 代码3 输出结果 问题展现 假设有一个旅行商人要拜访全国 31 个省会城市,他需要选择所要走的路径,路径的限制是每个城市只能拜访一次,而且 ...

  8. Vue闪烁的问题

    问题: 当我们打开Vue页面的时候,如果弱网环境,会出现一个闪烁的效果 原因: Vue还来不及处理的模板 解决: 使用 v-cloak 来解决Vue这个打开页面的闪烁的问题 原理: 利用 v-cloa ...

  9. Deep-DRM算法理解

    title: GCN学习笔记 categories: - 生物信息学 date: 2023-03.13 hidden: true mathjax: true GCN GCN(Graph Convolu ...

  10. springCloud项目搭建版本选择

    1.查看spring cloud的版本 https://spring.io/projects/spring-cloud#learn 选择spring boot版本 https://mvnreposit ...