当前位置: 首页 > news >正文

【昇腾AI创新大赛集训营南京站学习笔记】-Ascend算子开发课程

昇腾AI创新大赛训练营
14:00-14:30 基础知识-理论课
一、CANN 、达芬奇架构和算子
1.AI Core逻辑架构

达芬奇架构包含三部分:
1)计算类:矩阵计算单元(两个矩阵扔进去相乘)、向量计算单元、标量计算单元
2)控制类:整个计算过程提供了指令控制
3)存储类: 存储单元和数据通路构成了存储系统
AI core是昇腾AI处理器的核心
在这里插入图片描述

计算单元包括Vector计算单元、Cube计算单元等
2.计算单元
包含:
1)Scalar计算单元
2)Cube计算单元
异步指令流、同步信号流、计算数据流
数据从AI core并行计算有六条流水线
3.什么是算子-算子在神经网络中的定义
算子对应数学含义:
1)一个函数空间到另一个函数空间的映射,比如微分算子,不定积分算子
常见算子,Relu算子,Sigmoid算子
(计算机不能精确表达根号二,因为精度不够)
算子基本概念-总览
● 算子名称 用于标志网络中的某个算子- Conv1,Conv2
● 算子类型
● 数据容器
4.张量
  Tensor用于存储算子输入数据和输出数据的容器,TensorDesc是对输入数据与输出数据的描述。
在这里插入图片描述

tensor的shape:(4,20,20,3)
长宽都是20,4张图片,像素点由红、绿、蓝三颜色组成,即数据排布格式
  深度学习中,多维数据通过多维数组存储,比如卷积网络中特征图(Feature Map)通常用四维张量来表示
在这里插入图片描述
遍历一般是高维到低维进行的
基本概念-轴
轴(Axis)
:代表张量中维度的下标
shape是(5,6),axis=0表示张量中的第一维

二、实践(昇腾Ascend C快速入门)
指导:
在这里插入图片描述

更改ip地址:
在这里插入图片描述

远程登陆
在这里插入图片描述
实验截图:
1.连接板子

在这里插入图片描述
2.查看网络连接:
在这里插入图片描述
3.检查ip地址是否修改成功:
在这里插入图片描述
4.连接Mobaterm
在这里插入图片描述

14:30-16:00 矢量计算-理论课
1.什么是Ascend C算子

什么场景需要开发自定义算子?
  一般场景下无需自己开发算子,但若是以下场景,开发者需要考虑自定义算子开发
  推理场景,将第三方框架模型使用ATC工具转换为适用昇腾适配器
Device模块
  Device负责指定计算运行的真实设备,包含aclrtSetDevice、arlrtResetDevice、aclrtGetDevice、aclrtGetRunMode等众多运行时接口用于进行device管理。
在这里插入图片描述
2.如何编写核函数
核函数是Ascend C算子设备侧的一种扩展
编写:使用变量类型限定符
规则或建议:核函数必须有void返回类型
核函数的调用:是C/C++函数调用语句的一种扩展:<<<...>>>

kernel_name<<<blockDim<<blockDim,12ctrl, srteam>>>(argument list);

blockDim:规定核函数将会在几个核上执行
12ctrl:保留参数,暂时设置为固定值nullptr
stream
编程模型—SPMD模型
Ascend C算子编程是SPMD的编程,将需要处理的数据拆分并在多个计算核心上运行;多个AI core 共享相同的指令代码

在这里插入图片描述

编程用到Vector_in和Vector_out
3.采用标准C++用法,基于类库API进行编程
基础API
高级API
Ascend C匹配用户开发习惯,采用标准C++语法和一组类库API进行编程
C++运算符重载
整个tensor参与计算:dst=src1+src2
tensor前n个数据计算:Add(dst,src1,src2,n)
tensor高维切分计算:Add(dst,src1,src2,mask,repeatTimes,{dataBlockStride,....}

高级API
编程范式–TPIPE并行计算
Programming Paradigm
Ascend
4.典型的计算范式
这里向我们展示了示例代码:

namespace ops {
class AddCustom : public OpDef {
public:explicit AddCustom(const char* name) : OpDef(name){ // Add算子的第一个输入this->Input("x").ParamType(REQUIRED)    // 代表输入必选.DataType({ ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32 })   // 输入支持的数据类型.Format({ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND })    // 输入支持的数据格式.UnknownShapeFormat({ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND });  // 未知Shape情况下的Format的默认值// Add算子的第二个输入this->Input("y").ParamType(REQUIRED).DataType({ ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32 }).Format({ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND }).UnknownShapeFormat({ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND });this->Output("z").ParamType(REQUIRED).DataType({ ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32 }).Format({ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND }).UnknownShapeFormat({ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND });// 关联InferShape函数this->SetInferShape(ge::InferShape);// 关联Tiling函数this->AICore().SetTiling(optiling::TilingFunc);// 注册算子支持的AI处理器型号,请替换为实际支持的AI处理器型号this->AICore().AddConfig("ascendxxx");}
};
// 结束算子注册
OP_ADD(AddCustom);
} // namespace ops

基本的向量编程范式:CopyIn,CopyOut,Compute
基本的矩阵编程范式
复杂的矢量、矩阵编程范式
  计算并行流动起来,实行流水任务,矢量编程任务间通信和同步,矢量中任务间通信与同步
  执行加队列是因为,Enque本身是堵塞的,有一个Enque完成,vector才能启动;做同步是用队列实现
开发流程
算子分析
核函数定义
在add_custom核函数的实现中实例化KernelAdd算子类,调用Init()函数完成内存初始化
根据编程范式,输入输出队列
Init()函数实现
Process函数实现
创建local—copyin阶段
x+y=z compute阶段
–copyout阶段
c++,申请之后就要释放,(比如app越用越卡,爆了)
  以上是关于内存的处理。

在这里插入图片描述

16:00-17:00 实践

cd ~/samples/operator/AddCustomSample/KernelLaunch/
cp -r AddKernelInvocationNeo/ test
cd test/
bash run.sh -r cpu -v Ascend310P1

在这里插入图片描述

观察结果

在这里插入图片描述

用MobaXTerm左侧的文件栏打开~/samples/operator/AddCustomSample/KernelLaunch/test/scripts/gen_data.py
修改其中代码:
input_x = np.random.uniform(1,10,[8,2048]).astype(np.float16)
golden = np.sinh(input_x).astype(np.float16)
保存

在这里插入图片描述

再打开add_custom.cpp
修改其中compute()函数,把“Add(xxxxxxxxxxxxxxxxx)”那一行注释掉,改成sinh的计算逻辑,用xLocal当输入,zLocal当输出,改完后保存。

在这里插入图片描述

测试方式:
bash run.sh -r cpu -v Ascend310P1输出“test pass”即为修改成功。

在这里插入图片描述
感悟:
  来到华为南京研究所,不仅感受到浓厚的科研氛围,舒适的办公环境,更是在短短几节课就收益良多,对Ascend算子有了初步的理解,并亲手连接板子进行实践,在老师的指导下进行测试,过程中虽然遇到了一些困难,最后却都能独立完成,我十分激动,对计算机知识也更加有兴趣,集训营第一天我就收获满满,期待明天的旅程,同时也坚定了自己以后做华为的一份子的决心!

相关文章:

【昇腾AI创新大赛集训营南京站学习笔记】-Ascend算子开发课程

昇腾AI创新大赛训练营 14:00-14:30 基础知识-理论课 一、CANN 、达芬奇架构和算子 1.AI Core逻辑架构 达芬奇架构包含三部分&#xff1a; 1&#xff09;计算类&#xff1a;矩阵计算单元&#xff08;两个矩阵扔进去相乘&#xff09;、向量计算单元、标量计算单元 2&#xff09;控…...

系统架构设计师教程 第4章 信息安全技术基础知识-4.5 密钥管理技术4.6 访问控制及数字签名技术-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.5 密钥管理技术&4.6 访问控制及数字签名技术 4.5 密钥管理技术4.5.1 对称密钥的分配与管理4.5.1.1 密钥的使用控制4.5.1.1.1 密钥标签4.5.1.1.2 控制矢量4.5.1.2 密钥的分配4.5.1.2.1物理方式14.5.1.2.2 物理方式24.5.1…...

C语言日常练习Day13

目录 一、设半径r1.5&#xff0c;圆柱高h3&#xff0c;求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积 二、编写程序&#xff0c;用getchar函数读入两个字符给c1,c2&#xff0c;然后分别用putchar函数和printf函数输出这两个字符 三、输入4个整数&#xff0c;要求按由小…...

map、foreach、filter这些方法你还不知道什么时候该用哪个吗?那就看过来

forEach&#xff1a;‌主要用于遍历数组并对每个元素执行某种操作&#xff0c;‌通常用于改变当前数组里的值。‌它不会返回新数组&#xff0c;‌而是直接在原数组上进行操作。‌forEach方法不支持return、‌break、‌continue等语句&#xff0c;‌因为这些语句在forEach中不会…...

6.3 面向对象技术-设计模式

设计模式 创建型模式 结构型模式...

Mac 中安装内网穿透工具ngrok

ngrok 是什么&#xff1f; Ngrok 是一个网络工具&#xff0c;主要用于在网络中创建从公共互联网到私有或本地网络中运行的web服务的安全隧道。它充当了一个反向代理&#xff0c;允许外部用户通过公共可访问的URL访问位于防火墙或私有网络中的web应用程序或服务。Ngrok 特别适用…...

python count返回什么

描述 count() 方法用于统计字符串中某个子字符串出现的次数&#xff0c;可选参数为开始搜索与结束搜索的位置索引。 语法 count() 方法语法&#xff1a; S.count(sub[,start0[,endlen(S)]]) 参数 sub -- 搜索的子字符串。 S -- 父字符串。 start -- 可选参数&#xff0c;…...

mac清理软件哪个好用免费 MacBook电脑清理软件推荐 怎么清理mac

随着使用时间的增长&#xff0c;mac电脑会积累一些不必要的垃圾文件&#xff0c;这些文件会占用宝贵的存储空间&#xff0c;影响电脑的运行速度和稳定性。因此&#xff0c;定期清理mac电脑的垃圾文件是非常有必要的。市场上有许多优秀的Mac清理软件&#xff0c;包括一些出色的国…...

学生党百元蓝牙耳机哪个性价比高?精选四款超强性价比耳机型号

现阶段&#xff0c;蓝牙耳机技术逐渐成熟&#xff0c;蓝牙耳机在我们的学习和娱乐中承担着很重要的角色&#xff0c;那么在面对众多品牌和型号中&#xff0c;学生党们在选择蓝牙耳机上纠结不已&#xff0c;到底学生党百元蓝牙耳机哪个性价比高&#xff1f;作为一个蓝牙耳机重度…...

中文之美,美在辞藻富丽,也美在情感含蓄内敛。

文章目录 引言句句不提幸福,句句都是幸福句句不提释怀,句句都是释怀句句不提爱意,句句都是爱意句句不提安慰,句句都是安慰句句不提遗憾,句句都是遗憾句句不提思念,句句都是思念引言 许多句子没有将主题直抒胸臆,却通过字词间的呼应、碰撞,让人感受到“言未表而意无穷”…...

FPGA与ASIC:深入解析芯片设计的双子星

前言 在半导体世界里&#xff0c;FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;与ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;专用集成电路&#xff09;是两种截然不同的芯片设计策略&#xff0c;各自在…...

深入 Symfony 服务容器:依赖注入的艺术

“深入 Symfony 服务容器&#xff1a;依赖注入的艺术” 是一个涵盖了 Symfony 服务容器核心概念和依赖注入机制的复杂话题。为了全面理解 Symfony 服务容器的运作&#xff0c;我们将详细探讨以下几个方面&#xff1a; 服务容器的概念和作用依赖注入的基本原理Symfony 服务容器…...

基于Java+SpringMvc+Vue技术的慈善捐赠平台设计与实现(源码+LW+部署讲解)

项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows 8 开发语言&#xff1a;java 前端技术&#xff1a;JavaScript、VUE.j…...

dsp c6657 SYS/BIOS学习笔记

1 SYS/BIOS简介 SYS/BIOS是一种用于TI的DSP平台的嵌入式操作系统&#xff08;RTOS&#xff09;。 2 任务 2.1 任务调度 SYS/BIOS任务线程有0-31个优先级&#xff08;默认0-15&#xff0c;优先级0被空闲线程使用&#xff0c;任务最低优先级为1&#xff0c;最高优先级为15&am…...

分布式搜索引擎ES-DSL搜索详解

1.DSL搜索-入门语法 建立索引&#xff1a; xxx(自定义名称) 自定义mapping: POST /shop/_mapping {"properties": {"id": {"type": "long"},"age": {"type": "integer"},"username": {&quo…...

vue zip文件下载请求封装与使用

axios封装&#xff08;重点是响应拦截&#xff09; 这里把响应超时时间注释是文件下载接口返回需要较长时间 import axios from axios import {ElMessageBox} from "element-plus"; import router from "/router";const service axios.create({baseURL: …...

Windows波形音频MMEAPI简介

Windows波形音频MMEAPI简介 使用MMEAPI时需要导入头文件&#xff1a;#include<mmeapi.h> mmeapi.h文件的主要内容 mmeapi.h 文件是 Windows 多媒体 API 的一部分&#xff0c;主要用于处理波形音频&#xff08;Waveform Audio&#xff09;的输入和输出。以下是该文件的…...

sklearn聚类算法用于图片压缩与图片颜色直方图分类

上期文章:机器学习之SKlearn(scikit-learn)的K-means聚类算法 我们分享了sklearn的基本知识与基本的聚类算法,这里主要是机器学习的算法思想,前期文章我们也分享过人工智能的深度学习,二者有如何区别,可以先参考如下几个实例来看看机器学习是如何操作的 不同K值下的聚…...

Llama 3.1要来啦?!测试性能战胜GPT-4o

哎呀&#xff0c;Meta声称将于今晚发布的Llama 3.1&#xff0c;数小时前就在Hugging Face上泄露出来了&#xff1f;泄露的人很有可能是Meta员工&#xff1f; 还是先来看泄露出来的llama3.1吧。新的Llama 3.1模型包括8B、70B、405B三个版本。 而经过网友测试&#xff0c;该base…...

C++使用opencv处理图像阴影部分

1. 直方图均衡化 直方图均衡化是一种增强图像对比度的方法&#xff0c;可以通过均衡化图像的灰度级分布来改善图像中阴影部分的亮度。 #include <opencv2/opencv.hpp>using namespace cv;int main() {// 读取图像Mat image imread("input_image.jpg", IMREA…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...