【昇腾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逻辑架构 达芬奇架构包含三部分: 1)计算类:矩阵计算单元(两个矩阵扔进去相乘)、向量计算单元、标量计算单元 2)控…...
系统架构设计师教程 第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,圆柱高h3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积 二、编写程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符 三、输入4个整数,要求按由小…...
map、foreach、filter这些方法你还不知道什么时候该用哪个吗?那就看过来
forEach:主要用于遍历数组并对每个元素执行某种操作,通常用于改变当前数组里的值。它不会返回新数组,而是直接在原数组上进行操作。forEach方法不支持return、break、continue等语句,因为这些语句在forEach中不会…...
6.3 面向对象技术-设计模式
设计模式 创建型模式 结构型模式...
Mac 中安装内网穿透工具ngrok
ngrok 是什么? Ngrok 是一个网络工具,主要用于在网络中创建从公共互联网到私有或本地网络中运行的web服务的安全隧道。它充当了一个反向代理,允许外部用户通过公共可访问的URL访问位于防火墙或私有网络中的web应用程序或服务。Ngrok 特别适用…...
python count返回什么
描述 count() 方法用于统计字符串中某个子字符串出现的次数,可选参数为开始搜索与结束搜索的位置索引。 语法 count() 方法语法: S.count(sub[,start0[,endlen(S)]]) 参数 sub -- 搜索的子字符串。 S -- 父字符串。 start -- 可选参数,…...
mac清理软件哪个好用免费 MacBook电脑清理软件推荐 怎么清理mac
随着使用时间的增长,mac电脑会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此,定期清理mac电脑的垃圾文件是非常有必要的。市场上有许多优秀的Mac清理软件,包括一些出色的国…...
学生党百元蓝牙耳机哪个性价比高?精选四款超强性价比耳机型号
现阶段,蓝牙耳机技术逐渐成熟,蓝牙耳机在我们的学习和娱乐中承担着很重要的角色,那么在面对众多品牌和型号中,学生党们在选择蓝牙耳机上纠结不已,到底学生党百元蓝牙耳机哪个性价比高?作为一个蓝牙耳机重度…...
中文之美,美在辞藻富丽,也美在情感含蓄内敛。
文章目录 引言句句不提幸福,句句都是幸福句句不提释怀,句句都是释怀句句不提爱意,句句都是爱意句句不提安慰,句句都是安慰句句不提遗憾,句句都是遗憾句句不提思念,句句都是思念引言 许多句子没有将主题直抒胸臆,却通过字词间的呼应、碰撞,让人感受到“言未表而意无穷”…...
FPGA与ASIC:深入解析芯片设计的双子星
前言 在半导体世界里,FPGA(Field-Programmable Gate Array,现场可编程门阵列)与ASIC(Application-Specific Integrated Circuit,专用集成电路)是两种截然不同的芯片设计策略,各自在…...
深入 Symfony 服务容器:依赖注入的艺术
“深入 Symfony 服务容器:依赖注入的艺术” 是一个涵盖了 Symfony 服务容器核心概念和依赖注入机制的复杂话题。为了全面理解 Symfony 服务容器的运作,我们将详细探讨以下几个方面: 服务容器的概念和作用依赖注入的基本原理Symfony 服务容器…...
基于Java+SpringMvc+Vue技术的慈善捐赠平台设计与实现(源码+LW+部署讲解)
项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Windows 8 开发语言:java 前端技术:JavaScript、VUE.j…...
dsp c6657 SYS/BIOS学习笔记
1 SYS/BIOS简介 SYS/BIOS是一种用于TI的DSP平台的嵌入式操作系统(RTOS)。 2 任务 2.1 任务调度 SYS/BIOS任务线程有0-31个优先级(默认0-15,优先级0被空闲线程使用,任务最低优先级为1,最高优先级为15&am…...
分布式搜索引擎ES-DSL搜索详解
1.DSL搜索-入门语法 建立索引: xxx(自定义名称) 自定义mapping: POST /shop/_mapping {"properties": {"id": {"type": "long"},"age": {"type": "integer"},"username": {&quo…...
vue zip文件下载请求封装与使用
axios封装(重点是响应拦截) 这里把响应超时时间注释是文件下载接口返回需要较长时间 import axios from axios import {ElMessageBox} from "element-plus"; import router from "/router";const service axios.create({baseURL: …...
Windows波形音频MMEAPI简介
Windows波形音频MMEAPI简介 使用MMEAPI时需要导入头文件:#include<mmeapi.h> mmeapi.h文件的主要内容 mmeapi.h 文件是 Windows 多媒体 API 的一部分,主要用于处理波形音频(Waveform Audio)的输入和输出。以下是该文件的…...
sklearn聚类算法用于图片压缩与图片颜色直方图分类
上期文章:机器学习之SKlearn(scikit-learn)的K-means聚类算法 我们分享了sklearn的基本知识与基本的聚类算法,这里主要是机器学习的算法思想,前期文章我们也分享过人工智能的深度学习,二者有如何区别,可以先参考如下几个实例来看看机器学习是如何操作的 不同K值下的聚…...
Llama 3.1要来啦?!测试性能战胜GPT-4o
哎呀,Meta声称将于今晚发布的Llama 3.1,数小时前就在Hugging Face上泄露出来了?泄露的人很有可能是Meta员工? 还是先来看泄露出来的llama3.1吧。新的Llama 3.1模型包括8B、70B、405B三个版本。 而经过网友测试,该base…...
C++使用opencv处理图像阴影部分
1. 直方图均衡化 直方图均衡化是一种增强图像对比度的方法,可以通过均衡化图像的灰度级分布来改善图像中阴影部分的亮度。 #include <opencv2/opencv.hpp>using namespace cv;int main() {// 读取图像Mat image imread("input_image.jpg", IMREA…...
4.Java Web开发模式(javaBean+servlet+MVC)
Java Web开发模式 一、Java Web开发模式 1.javaBean简介 JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中…...
centos7 mysql 基本测试(6)主从简单测试
centos7 xtrabackup mysql 基本测试(6)主从简单测试 mysql -u etc -p 1234aA~1 参考: centos7 时区设置 时间同步 https://blog.csdn.net/wowocpp/article/details/135931129 Mysql数据库:主从复制与读写分离 https://blog.csd…...
信息安全工程师题
防火墙安全策略有两种类型:白名单策略、黑名单策略白名单策略:只允许符合安全规则的包通过防火墙,其他通信包禁止黑名单策略:禁止与安全规则相冲突的包通过防火墙,其他通信包允许实现网络地址转换的方式主要有静态NAT、…...
springcloud rocketmq 新增的消费者组从哪里开始消费
如果新建一个新的消费者组,是否会消费历史消息,导致重复消费? 直接在 console 界面新增消费者组,但是没有办法绑定订阅关系,没有找到入口,在 控制台项目源码 rocketmq-externals 也没有找到可以确定订阅关系…...
Redis-缓存
什么是缓存? 缓存就像自行车和越野车的避震器,降低硬着陆造成的损害 缓存就是系统的避震器,,防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数…...
MySQL练习05
题目 步骤 触发器 use mydb16_trigger; #使用数据库create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10), price decima…...
[C++][STL源码剖析] 详解AVL树的实现
目录 1.概念 2.实现 2.1 初始化 2.2 插入 2.2.1 旋转(重点) 左单旋 右单旋 双旋 2.❗ 双旋后,对平衡因子的处理 2.3 判断测试 完整代码: 拓展:删除 1.概念 二叉搜索树虽可以缩短查找的效率,但…...
Kubernetes存储 - Node本地存储卷
官方文档 Kubernetes管理的Node本地存储目前有三种,分别是EmptyDir,HostPath,Local,EmptyDir是一种与Pod同生命周期的Node临时存储;HostPath是Node的目录;Local是基于持久卷(PV)管理的Node目录。接下来详细说明这几种类型如何以存…...
Cocos Creator2D游戏开发-(2)Cocos 常见名词
场景(Scene): 它一个容器,容纳游戏中的各个元素,如精灵,标签,节点对象。它负责着游戏的运行逻辑,以帧为单位渲染这些内容。就是你理解到的那个场景; 个人理解就是一个画面, 一个游戏不同的关卡,会有不同的…...
【不同设备间的数据库连接】被连接设备如何开权限给申请连接的设备
为了方便叙述,简称申请连接数据库的设备为a,被连接的为b 1.确保在同一局域网下,检查a的ip 如果你设置的动态ip,那么每重启一次这个ip都会变。两种选择,每次都给b同步一下你的最新ip,或者a设置成静态ip。具…...
Whisper离线部署问题处理
Whisper是OpenAI开发一款开源语音识别模型,可以帮我们低成本的拥有语音识别的能力。具体的安装部署方法,我在这里就不详细说了,网上有很多相关文章: 使用OpenAI的Whisper 模型进行语音识别 (baidu.com) 我这里主要想说的是&…...
【Hive SQL】数据探查-数据抽样
文章目录 数据随机抽样1、随机数排序抽样(rand())2、数据块抽样(tablesample())3、分桶抽样 数据随机抽样 在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,…...
微信答题小程序产品研发-需求分析与原型设计
欲知应候何时节,六月初迎大暑风。 我前面说过,我决意仿一款答题小程序,所以我做了大量的调研。 题库软件产品开发不仅仅是写代码这一环,它包含从需求调研、分析与构思、设计到开发、测试再到部署上线一系列复杂过程。 需求分析…...
基础模板Mybatis-plus+Springboot+Mysql开发配置文件
1.pom.xml <dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency>// mybatisplus功能<dependency&g…...
java-poi实现excel自定义注解生成数据并导出
因为项目很多地方需要使用导出数据excel的功能,所以开发了一个简易的统一生成导出方法。 依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version…...
LeetCode707 设计链表
前言 题目: 707. 设计链表 文档: 代码随想录——设计链表 编程语言: C 解题状态: 代码功底不够,只能写个大概 思路 主要考察对链表结构的熟悉程度,对链表的增删改查,比较考验代码功底以及对链表…...
[Mysql-DDL数据操作语句]
目录 DDL语句操作数据库 库: 查看:show 创建:creat 删除:drop 使用(切换):use 表: 查看:desc show 创建:create 表结构修改 rename as add drop modify change rename as …...
google 浏览器插件开发简单学习案例:TodoList;打包成crx离线包
参考: google插件支持: https://blog.csdn.net/weixin_42357472/article/details/140412993 这里是把前面做的TodoList做成google插件,具体网页可以参考下面链接 TodoList网页: https://blog.csdn.net/weixin_42357472/article/de…...
如何学习Doris:糙快猛的大数据之路(从入门到专家)
引言:大数据世界的新玩家 还记得我第一次听说"Doris"这个名字时的情景吗?那是在一个炎热的夏日午后,我正在办公室里为接下来的大数据项目发愁。作为一个刚刚跨行到大数据领域的新手,我感觉自己就像是被丢进了深海的小鱼—周围全是陌生的概念和技术。 就在这时,我的…...
梯度下降算法,gradient descent algorithm
定义:是一个优化算法,也成最速下降算法,主要的部的士通过迭代找到目标函数的最小值,或者收敛到最小值。 说人话就是求一个函数的极值点,极大值或者极小值 算法过程中有几个超参数: 学习率n,又称…...
Spring boot 2.0 升级到 3.3.1 的相关问题 (六)
文章目录 Spring boot 2.0 升级到 3.3.1 的相关问题 (六)spring-data-redis 和 Spring AOP 警告的问题问题描述问题调研结论解决方案方案1-将冲突的Bean 提升为InfrastructureBean方案2 其他相关资料 Spring boot 2.0 升级到 3.3.1 的相关问题 ÿ…...
C++模版基础知识与STL基本介绍
目录 一. 泛型编程 二. 函数模板 1. 概念 2. 函数模版格式 3. 函数模版的原理 4. 模版函数的实例化 (1). 隐式实例化 (2.) 显式实例化 5. 模版参数的匹配原则 三. 类模板 1. 类模板的定义格式 2. 类模板的实例化 四. STL的介绍 1. 什么是STL? 2. STL的版…...
Android 防止重复点击
1.第一种方式: // 两次点击按钮之间的点击间隔不能少于1000毫秒 private static final int MIN_CLICK_DELAY_TIME 700; private static long lastClickTime; /** * 是否是快速点击 * return */ public static boolean isFastClick() { …...
使用阿里云云主机通过nginx搭建文件服务器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、准备基础环境二、安装配置nginx三、阿里云安全组配置安全组配置 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4ee96f38312e4771938e40f463987…...
微信Android一面凉经(2024)
微信Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《微信Android一面凉经(2024)》。 面试职位: 微信-客户端开发工程师-基础功能(广州) And…...
VMware、Docker - 让虚拟机走主机代理,解决镜像封禁问题
文章目录 虚拟机全局代理配置找到 VMnet8 的 IPv4 地址代理相关配置虚拟机代理配置 Docker 代理配置修改镜像修改 Docker 代理配置 虚拟机全局代理配置 找到 VMnet8 的 IPv4 地址 a)打开此电脑,输入 “控制面板”,然后回车. b)之…...
版本管理|为什么不推荐使用Git Rebase
文章目录 什么是 Git Rebase?如何使用 Git Rebase?基本语法示例更多选项 注意事项何时使用何时避免其他注意事项 为什么需要谨慎使用 Git Rebase?面试中的常见问题问题 1: Git Rebase 和 Git Merge 有何不同?问题 2: 为什么有时应…...
Https post 请求时绕过证书验证方案
解决异常:Caused by: java.security.cert.CertificateException: No subject alternative names matching IP address xxx.xx.xx.xx found // Https POST 请求private cn.hutool.json.JSON PostGsData(String url, String appKey, String token, Map<String, Ob…...
C# 数组常用遍历方式
// 假设数组Point[] points new Point[2];// 第一种遍历 forfor (int i 0; i < points.Length; i){Point p points[i];Console.WriteLine($"X{p.X},y{p.Y}");}// 第二种遍历 foreachforeach (Point p in points){Console.WriteLine($"X{p.X},y{p.Y}"…...
【JavaScript】详解Day.js:轻量级日期处理库的全面指南
文章目录 一、Day.js简介1. 什么是Day.js?2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…...