2023CANN训练营第二季——Ascend C算子开发(入门)——基础概念

第一章 Ascend C 算子开发入门

一、基础概念

1.Ascend C

概念:Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者低成本完成算子开发和模型调优部署。

使用Ascend C开发的优势:
1.支持C和C++语言,开发者可以使用这两种编程语言进行自定义算子。
2.Ascend C能够屏蔽硬件差异性,意思是写一套Ascend C代码,可以在不同的硬件架构上执行,这对于昇腾不断推出新的硬件,但是原来的Ascend C代码还是可以正常运行,是十分重要的。
3.具备四级API接口,开发者可以调用不同层级的API接口定义算子,非常灵活高效
4.孪生调试,这个词的意思是对于不具备NPU的情况下,Ascend C提供了CPU侧可以模拟NPU行为,以减少对NPU依赖。这对于不具备NPU资源时非常有利。

2.CANN架构

华为昇腾计算架构CANN通过提供多层次编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。

image.png

CANN 和Ascend C的关系:
在华为昇腾计算架构CANN中,Ascedn C作为其计算语言,具有三大开发模式,分别为:算子开发,模型开发,应用开发。除了计算语言外,CANN还包括了昇腾计算服务层、编译层、执行层、基础层,这些层级可以进一步帮助开发者自定义算子,然后将算子移植到不同的模型里面,使模型在NPU上训练,最后推出神经网路模型或者大型人工智能应用程序。

3.SIMD计算

首先认识什么一个概念:AICore
NPU是华为AI加速卡,而AICore是NPU的计算核心,每个NPU内部有多个AICore,开发者可以将不同的任务分发到AICore上执行。
AICore内部支持三种核心计算:标量、向量、矩阵运算
标量就是简单的两个数进行相加:x+y=z
而向量好比一维矩阵,是两个矢量相加,每个矢量里面可能包含多个数据。
矩阵运算就是二维矩阵,两个二维矩阵之间进行运算

SIMD,翻译为单指令多数据计算,表示一条指令可以处理多个数据,可以进行多个AICore计算。
在Ascend C编程语言中,计算API主要使用向量计算和矩阵运算,且都遵循SIMD样式。
image.png

4.单程序多数据(SPMD)和流水线并行

image.png

单程序多数据(Single Program, Multiple Data,SPMD)
原理: 单程序多数据(Single Program, Multiple Data,SPMD)是一种并行计算模型,在 SPMD 模型中,所有的处理单元(通常是处理器或计算节点)都执行相同的程序,但可以处理不同的数据。
特点:

  • 同一程序:所有处理单元执行相同的程序代码,不需要不同的程序版本。
  • 多数据:每个处理单元可以操作不同的数据集,通常通过数据分割或分发来实现。
  • 独立执行:每个处理单元独立执行,无需与其他处理单元进行协同工作。
  • 数据并行:并行计算是通过将数据分成多个部分并将这些部分分配给不同的处理单元来实现的。

流水线并行
原理: 流水线并行是一种将复杂任务分成多个阶段,然后将这些阶段分配给不同的处理单元以并行执行的计算模型。每个处理单元负责执行一个阶段,并且不需要等待整个任务完成,而是将部分结果传递给下一个阶段,以实现连续的并行计算。
特点:

  • 任务分解:复杂任务被分解成多个互相依赖的阶段。
  • 并行执行:不同的处理单元同时执行不同阶段的任务。
  • 流水线操作:数据或任务从一个阶段传递到下一个阶段,形成流水线操作。
  • 减少等待时间:由于阶段之间的互相依赖性,流水线并行可以减少任务的总执行时间。

实验

Ascend C算子开发快速入门

根据昇腾社区文档,自己快速跑一个简单的Ascend C 加法算子开发实例,代码地址在samples仓库:代码仓库

一、环境准备
在ModelArts平台创建一个训练环境Notebook,然后打开终端。

1、使用wget工具从指定URL下载Ascend AI Toolkit的安装脚本:
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C13SPC702/Ascend-cann-toolkit_7.0.RC1.alpha002_linux-x86_64.run -O Ascend-cann-toolkit_7.0.RC1.alpha002_linux-x86_64.run
2、使用chmod命令添加执行权限,以允许运行Ascend-cann-toolkit_7.0.RC1.alpha002_linux-x86_64.run

chmod +x Ascend-cann-toolkit_7.0.RC1.alpha002_linux-x86_64.run
3、运行Ascend-cann-toolkit_7.0.RC1.alpha002_linux-x86_64.run脚本
./Ascend-cann-toolkit_7.0.RC1.alpha002_linux-x86_64.run --install --force
4、使用wget下载Ascend AI Toolkit的社区软件开发工具包的压缩文件。
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C13SPC702/Ascend-cann-communitysdk_7.0.RC1.alpha002_linux-x86_64.tar.gz -O Ascend-cann-communitysdk_7.0.RC1.alpha002_linux-x86_64.tar.gz
5、使用tar命令解压缩之前下载的压缩文件,并将文件提取到~/Ascend/ascend-toolkit/latest 目录
tar -xf Ascend-cann-communitysdk_7.0.RC1.alpha002_linux-x86_64.tar.gz -C ~/Ascend/ascend-toolkit/latest
6、使用wget下载CMake工具的Linux x86_64版本的压缩文件
wget https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-x86_64.tar.gz
7、使用tar解压缩之前下载的CMake工具的压缩文件
tar -xf cmake-3.26.4-linux-x86_64.tar.gz

image.png
image.png
上面命令全部执行完以后,可能会显示需要配置环境变量
二、配置环境变量
source /home/ma-user/Ascend/ascend-toolkit/set_env.sh
export ASCEND_CUSTOM_PATH=$HOME/Ascend/ascend-toolkit/latest
export ASCEND_HOME_DIR=$HOME/Ascend/ascend-toolkit/latest
export PATH=/home/ma-user/work/cmake-3.26.4-linux-x86_64/bin:$PATH

三、运行脚本

执行完上面四句命令之后,就可以去下载gitee代码仓库了
git clone https://gitee.com/ascend/samples.git

切换到Add算子文件库
cd ./samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Add

CPU模式下执行
bash run.sh add_custom ascend910 AiCore cpu
运行成功截图如下:
image.png

总结

我学习了Ascend C算子开发入门课程的基础概念,然后做了一个很简单加法算子开发实验,对于Ascend C有了一定程度的理解,虽然我是初学者,然后现在学下来感觉有些复杂,有点难理解,但是我相信,跟着课程一步一步来,下一节学习Ascend C编程模型与范式,深入地理解多核并行、流水编程等概念,学习核函数开发,核函数验证的具体知识点。希望最后可以对Ascend C有一个更全面的认识,且可以自己学会写使用Ascend C编程,加油,坚持学习,坚持进步,慢慢来!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中shell外壳,用户权限,文件权限

Linux 权限 1.shell外壳1.1 shell外壳的定义1.2 shell外壳的作用1.3 shell的原理 2.Linux用户权限2.1创建普通用户2.2 用户之间的切换2.3 sudo指令 3.Linux文件权限3.1文件访问者的分类(人)3.2 文件文件类型和访问权限(事物属性)3…

大语言模型(LLM)综述(一):大语言模型介绍

A Survey of Large Language Models 前言1. INTRODUCTION2. OVERVIEW2.1 大语言模型的背景2.2 GPT系列模型的技术演变 前言 随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更为复杂和…

【模型推理优化学习笔记】张量并行和流水线并行简介

张量并行 当每个张量被分成多个块时,就会发生张量并行性,并且张量的每个块都可以放置在单独的 GPU 上。在计算过程中,每个块在不同的 GPU 上单独并行处理,并且可以通过组合来自多个 GPU 的结果来计算结果(最终张量&am…

postman发送soap报文示例

一、SOAP和WSDL SOAP是一种基于XML的协议 WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问 二、postman发送soap请求 1、发送post请求&#x…

【计算机网络笔记】OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

tuxera ntfs2024破解版mac电脑磁盘读写软件

大家都知道由于操作系统的原因,在苹果电脑上不能够读写NTFS磁盘,但是,今天小编带来的这款tuxera ntfs 2024 mac版,完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件,能够实现苹果Mac OS X系统读写Micro…

【2023_10_21_计算机热点知识分享】:机器学习中的神经网络

今天的分享主题是机器学习中的神经网络。神经网络是一种模拟人类神经系统的计算模型,它由一系列的神经元组成,每个神经元接收一组输入,经过计算后产生一个输出。神经网络的学习过程是通过调整神经元之间的连接权重来实现的,这个过…

【2023年11月第四版教材】软考高项极限冲刺篇笔记(1)

1 你要接受一些观点 1、不明白的不要去试图理解了,死记硬背 2、要快速过知识点,卡住是不行的,慢也是没有任何作用的。 3、将厚厚的知识,变为薄薄的重点。标红必背 4、成熟度等级,很多知识领域都有,就是评价在一个领域达到的级别。 5、记得搜一下当年的高频科技词汇 6、选…

模拟退火算法(SA)求解旅行商问题(TSP)python

目录 一、模拟退火算法求解TSP(city14)的python代码 二、city14的运行结果 三、 模拟退火算法求解TSP(city30)的python代码 四、city30的运行结果 一、模拟退火算法求解TSP(city14)的python代码 impor…

网络协议--Ping程序

7.1 引言 “ping”这个名字源于声纳定位操作。Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答(图6-3列出了所有的ICMP报文类型)。 一般来说&#x…

数据科学中常用的应用统计知识

随着大数据算法技术发展,数据算法越来越倾向机器学习和深度学习相关的算法技术,概率论和应用统计 等传统的技术貌似用的并不是很多了,但实则不然,在数据科学工作,还是会经常需要应用统计概率相关知识解决一些数据问题&…

如何在不恢复出厂设置的情况下解锁 Android 手机密码?

如何在不恢复出厂设置的情况下解锁 Android 手机密码? 当您忘记 Android 手机的密码时,可能会有压力,尤其是当您不想恢复出厂设置并删除所有数据时。但是,有一些方法可以在不诉诸如此激烈的步骤的情况下解锁手机。我们将在这篇文…

Elasticsearch 8.9 Master节点处理请求源码

大家看可以看ElasticSearch源码:Rest请求与Master节点处理流程(1) 这个图非常好,下午的讲解代码在各个类和方法之间流转,都体现这个图上 一、Master节点处理请求的逻辑1、节点(数据节点)要和主节点进行通讯&#xff0…

使用WPF模仿Windows记事本界面

本次仅模仿Windows记事本的模样&#xff0c;并未实现其功能。 所有代码如下&#xff1a; <Window x:Class"控件的基础使用.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/…

CentOS7安装MySQL8.0.28

CentOS7安装MySQL8.0.28 一、下载MySQL安装包二、安装配置mysql 一、下载MySQL安装包 点击以下链接可以自动跳转&#xff1a;MySQL官网 接下来按如图所示依次点击进入。 选择自己所需要版本 此处如需下载历史版本可以点击 二、安装配置mysql 1、登录ssh或其他相关软件上…

CSS中 通过自定义属性(变量)动态修改元素样式(以 el-input 为例)

传送门&#xff1a;CSS中 自定义属性&#xff08;变量&#xff09;详解 1. 需求及解决方案 需求&#xff1a;通常我们动态修改 div 元素的样式&#xff0c;使用 :style 和 :class 即可&#xff1b;但想要动态修改 如&#xff1a;Element-ui 中输入框&#xff08;input&#x…

method.isAnnotationPresent(Xxx.class)一直为null

​​​​package com.dj.springtest.aspect;import com.dj.springtest.annotation.RequireRoles; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.s…

使用CMS后台资源,如何在小程序上不开调试模式能正常呈现出内容

配置合法域名 如何配置合法域名&#xff1a; 1.找到自己的合法域名&#xff1a;在微信开发者工具中“不勾选"不校验合法域名&#xff0c;就会看到报错说你的某个链接不是合法域名&#xff0c;那不就说明我们需要将这个链接设置为合法域名嘛。这就找到了我们的需要设置的…

《深入理解java虚拟机 第三版》学习笔记二

第 4 章 虚拟机性能监控、故障处理工具 4.2 基础故障处理工具 4.2.1 jps&#xff1a;虚拟机进程状况工具 可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类&#xff08;Main Class&#xff0c;main()函数所在的类&#xff09;名称以及这些进程的本地虚拟机唯一…

使用Gitlab构建简单流水线CI/CD

什么是Gitlab Gitlab实质上是一套DevOps工具 目前看起来&#xff0c;Gitlab属于是内嵌了一套CI/CD的框架&#xff0c;并且可以提供软件开发中的版本管理、项目管理等等其他功能。 这里需要辨别一下Gitlab和Github Gitee的区别。 GIthub大家都很熟悉了&#xff0c;一般大家都会…