上海昇腾AI训练营笔记

文章目录

  • Ascend C简介
  • CANN架构
  • 昇腾AI加速卡
  • AI Core内部计算架构抽象
  • AI Core内核计算
  • SPMD
  • 核函数
  • 编程API
  • 编程范式
  • 矩阵编程
    • 矩阵乘法
    • 数据分块

Ascend C简介

  • Ascend C系列AI处理器适用于计算力需求较低的场景,如智能监控、边缘计算等。
  • 提供多种精简模式和高性能模式,满足不同应用场景下的性能要求。
  • 支持全场景覆盖,既可以部署在云端也可以部署在端侧。

CANN架构

在这里插入图片描述

  • 上层应用层。包括深度学习框架、AI框架适配、创新算子及领域加速库和人工智能应用,负责开发和运行AI模型及应用。
  • 中间计算架构层。由AscendCL异构计算语言、GE图引擎、Ascend C算子开发语言、AOL算子加速库、HCCL集合通信库和Runtime运行时组成,负责计算任务的分解、优化和执行。
  • 底层硬件层。包括Driver驱动和Ascend AI处理器,负责硬件通信和高性能计算任务的实际执行。

昇腾AI加速卡

在这里插入图片描述

  • 华为AI加速卡(NPU)通过PCIe接口连接到服务器上。服务器作为主机(Host),与AI加速卡(Device)进行数据传输和控制。
  • AI加速卡内部包含多个AICORE计算核心,这些核心负责执行AI计算任务。每个AICORE相当于多核CPU中的一个核心,并共享全局内存(DDR内存)用于数据存储和处理。

AI Core内部计算架构抽象

在这里插入图片描述

  • AI Core可以抽象成三个流,分别是:
    • 异步指令流:不同计算单元(Scalar、Vector、Cube、DMA)并行接收并执行指令。
    • 同步信号流:确保指令间依赖关系,按逻辑顺序执行,Scalar单元发同步信号。
    • 计算数据流:DMA搬运数据至Local Memory,各计算单元处理后再搬运回Global Memory。

AI Core内核计算

在这里插入图片描述

  • AI core 支持标量、向量和矩阵运算
    • 标量计算是简单的逐个操作,如int z = x + y
    • 向量计算能同时处理多个数据,例如NPU一个核可以在一个周期内处理128FP16 加法。
    • 矩阵计算如C = A * B,NPU一个核能在一个周期内完成16x16x16的矩阵乘法。

SPMD

在这里插入图片描述

  • Ascend C算子编程采用SPMD模式,将数据拆分并行处理。
  • 多个AI Core共享相同指令代码,通过不同的block_idx 区分。
  • 使用GetBlockIdx() 函数获取block_idx ,标识进程唯一性。

核函数

在这里插入图片描述

  • 核函数(Kernel Function)是直接在设备侧执行的代码,负责实现算子的所有功能。Ascend C和CUDA的核函数定义类似,使用__global__关键字,并通过参数列表和函数名进行调用。
    在这里插入图片描述
  • 使用变量类型限定符__gm__ uint8_t*来统一指针参数类型,方便管理设备侧的内存访问。规则建议包括核函数必须有void 返回类型,仅支持指针类型或内置数据类型作为参数。

编程API

在这里插入图片描述

  • 3级API:支持运算符重载,实现简单计算表达,如dst = src1 + src2。
  • 2级API:用于一维连续计算,指定操作数和计数,如Add(dst, src1, src2, count)。
  • 1级API:处理多维数据的切片计算,选择特定部分进行运算。
  • 0级API:功能丰富,充分利用硬件优势,支持复杂操作参数,如Add(dst, src1, src2, repeatTimes, repeatParams)。

编程范式

在这里插入图片描述

  • 流水任务指单核处理程序中并行调度的任务,提升数据处理性能。
  • 流水任务分为Stage1、Stage2、Stage3,每个任务专注于完成特定功能。
  • 数据被切分成片,使用Progress1~n表示,每个任务依次处理数据片。
  • Stage间有依赖关系,例如Stage1处理完Progress1后,Stage2才开始处理。

矩阵编程

矩阵乘法

在这里插入图片描述

  • 矩阵A(M×K)与矩阵B(K×N)相乘,得到一个中间结果矩阵(M×N)。然后,将一个偏置向量(bias,1×N)加到中间结果矩阵的每一行上,形成最终的输出矩阵C(M×N)

数据分块

在这里插入图片描述

  • 多核数据按照以下方式进行切分:
    • 对于A矩阵,沿着M轴进行切分,切分成多份的singleCoreM,单核上处理K大小的数据。
    • 对于B矩阵,沿着N轴进行切分,切分成多份的singleCoreN,单核上处理M大小的数据。
    • 于C矩阵,由A的部分和B的部分相乘得到,单核上输出C矩阵大小为singleCoreM * singleCoreN。
      在这里插入图片描述
  • 核内切分按照下面方式进行:
    • 对于A矩阵,沿M轴进行切分,切分成多份的baseM;沿K轴进行切分,切分成多份的baseK。
    • 对于B矩阵,沿N轴进行切分,切分成多份的baseN;沿K轴进行切分,切分成多份的baseK。
    • 对于C矩阵,由A和B的分块相乘并累加,得到C矩阵中对应位置的baseM * baseN大小的分块

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

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

相关文章

推出全新的ZL3079x、ZL3069x、ZL3066x同步器,优化用于5G运输和无线基础设施设备

一、单通道、双通道和三通道IEEE1588/SyncE网络同步器 ZL3079x提供1个、2个和三个独立的组合硬件和软件平台定时通道,包括IEEE 1588-2008精确时间协议栈和同步算法。该设备使用miTimePLL定时技术,为5G传输和无线基础设施设备提供新的改进功能。该器件非…

如何轻松将Squarespace网站迁移到WordPress

Squarespace是一款非常出色的建站CMS工具,旨在帮助用户轻松地创建高品质的网站,它的特点是注重精美的视觉效果和良好的用户体验,在模板的精致度和易用度上都做的非常好。但是它也有一些缺点,Squarespace是一个封闭系统的CMS&#…

【音视频 | HTTP协议】HTTP协议详细介绍(HTTP方法、报文格式、报文头部字段、状态码)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Redis 关于内存碎片的解决方法

今天生产机报内存爆满异常被叫过去查看问题,通过各种排除最终定位到了Redis的内存碎片的问题,这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。 Redis的内存碎片原理 先引用Redis官方的原话: 当键被删除时,Redis …

C/C++ xml库

文章目录 一、介绍1.1 xml 介绍1.2 xml 标准1.3 xml 教程1.4 xml 构成 二、C/C xml 库选型2.1 选型范围2.2 RapidXML2.3 tinyxml22.4 pugixml2.5 libxml 五、性能比较5.1 C xml 相关的操作有哪些5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较 六、其他问题6.1 version和 e…

PlantUML-UML 绘图工具安装、Graphviz安装、本地使用/在线使用、语法、图示案例

文章目录 前言本地安装vscode安装插件下载安装Graphviz配置Graphviz环境变量测试 在线使用演示PlantUML语法总结活动图(新语法)时序图类图用例图其他图 更多相关内容可查看 前言 本篇提供两种使用方式分别为 在线使用地址1:https://www.pla…

React安装(学习版)

1. 安装Node.js和npm 首先,确保你的电脑上已经安装了Node.js和npm(Node Package Manager)。你可以从 Node.js官网 下载安装包并按照提示进行安装。安装完成后,可以在命令行终端中验证Node.js和npm是否正确安装: node …

逆向案例二十五——webpack所需模块函数很多,某翼云登录参数逆向。

解决步骤: 网址:aHR0cHM6Ly9tLmN0eXVuLmNuL3dhcC9tYWluL2F1dGgvbG9naW4 不说废话,密码有加密,直接搜索找到疑似加密位置打上断点。 再控制台打印,分析加密函数 有三个处理过程,b[g]得到的是用户名,b[f] 对…

【Unity学习笔记】第二十 · 物理引擎脉络梳理(数值积分、碰撞检测、约束解决)

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/139808452 作者:CSDN|Ringleader| 物理引擎综述 物理引擎是利用物理规则模拟物体运动和碰撞的模块,以在重力、弹力、摩擦力等各种力作用下做出真实运动表现,并对碰…

CI/CD的node.js编译报错npm ERR! network request to https://registry.npmjs.org/

1、背景: 在维护paas云平台过程中,有研发反馈paas云平台上的CI/CD的前端流水线执行异常。 2、问题描述: 流水线执行的是前端编译,使用的是node.js环境。报错内容如下: 2024-07-18T01:23:04.203585287Z npm ERR! code E…

高性能分布式IO系统BL205 OPC UA耦合器

边缘计算是指在网络的边缘位置进行数据处理和分析,而不是将所有数据都传送到云端或中心服务器,这样可以减少延迟、降低带宽需求、提高响应速度并增强数据安全性。 钡铼BL205耦合器就内置边缘计算功能,它不依赖上位机和云平台,就能…

从PyTorch官方的一篇教程说开去(1 - 初心)

原文在此,喜欢读原汁原味的可以自行去跟,这是一个非常经典和有学习意义的例子,在此向老爷子们致敬 - https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html 开源文化好是好,但是“公地的悲哀”这点避不开…

Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)

创建一个Springboot项目,勾选web将该项目创建git本地仓库,再创建远程仓库推送上去 创建TestController RestController RequestMapping("/test") public class TestController { GetMapping("/hello") public String sayHelloJe…

Mybatis——Lombok

偷懒插件&#xff0c;能有效减少代码量&#xff0c;增加注释即可。 下载&#xff1a; 设置——插件——搜索Lombok——下载安装 导入依赖&#xff1a; <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok<…

FastAPI 学习之路(六十)打造系统的日志输出

我们要搭建日志系统&#xff0c;可以使用loguru&#xff0c;很不错的一个开源日志系统 pip install loguru 我们在common创建log.py&#xff0c;使用方式也很简单 import os import timefrom loguru import logger# 日志的路径 log_path os.path.join(os.getcwd(), "log…

AJAX基本用法

1.axios 基本语法: axios({url: 目标资源地址 }).then((result) > {// 对服务器返回的数据做后续处理 })查询参数&#xff08;在params中设置&#xff09;&#xff1a; 查询参数通常是指在URL中传递给服务器以获取动态数据或指定请求条件的一部分。它们位于URL中问号(?)后…

Spire.PDF for .NET【文档操作】演示:如何在 C# 中切换 PDF 层的可见性

我们已经演示了如何使用 Spire.PDF在 C# 中向 PDF 文件添加多个图层以及在 PDF 中删除图层。我们还可以在 Spire.PDF 的帮助下在创建新页面图层时切换 PDF 图层的可见性。在本节中&#xff0c;我们将演示如何在 C# 中切换新 PDF 文档中图层的可见性。 Spire.PDF for .NET 是一…

ClickHouse 入门(二)【基础SQL操作】

1、ClickHouse 1.1、SQL 操作 这里只介绍一些和我们之前 MySQL 不同的语法&#xff1b; 1.1.1、Update 和 Delete ClickHouse 提供了 Delete 和 Update 的能力&#xff0c;这类操作被称为 Mutation 查询&#xff08;可变查询&#xff09;&#xff0c;它可以看 做 Alter 的一…

iOS ------ 编译链接

编译流程分析 编译可以分为四步&#xff1a; 预处理&#xff08;Prepressing)编译&#xff08;Compilation&#xff09;汇编 &#xff08;Assembly)链接&#xff08;Linking&#xff09; 预编译&#xff08;Prepressing&#xff09; 过程是源文件main.c和相关头文件被&#…

使用Redis的SETNX命令实现分布式锁

什么是分布式锁 分布式锁是一种用于在分布式系统中控制多个节点对共享资源进行访问的机制。在分布式系统中&#xff0c;由于多个节点可能同时访问和修改同一个资源&#xff0c;因此需要一种方法来确保在任意时刻只有一个节点能够对资源进行操作&#xff0c;以避免数据不一致或…