ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

寒武纪 AI 芯片与 MLU 架构深度解析:从云边端产品线到 Cambricon 软件栈

寒武纪 AI 芯片与 MLU 架构深度解析:从云边端产品线到 Cambricon 软件栈 文档教程人工智能【免费下载链接】AISystemAISystem 主要是指AI系统包括AI芯片、AI编译器、AI推理和训练框架等AI全栈底层技术项目地址https://gitcode.com/GitHub_Trending/ai/AISystem点击查看免费下载寒武纪Cambricon是国内 AI 芯片上市企业其思元系列 MLU 智能芯片覆盖云端、边缘端与终端 IP 三大场景。本文以仓库文档 04Cambricon.md 为主线系统拆解寒武纪产品形态、MLUv3 处理器核心架构、以 Cambricon Neuware 为核心的软件栈以及 GPR/NRAM/WRAM/SRAM/L2 Cache/LDRAM/GDRAM 多层存储体系并给出可直接运行的 BANG C 矩阵乘 Kernel 示例。读完本文你将掌握寒武纪从芯片到软件栈的整体技术脉络能够理解 MLU Core/Cluster 的组织方式、BANG C 编程模型与 MagicMind/CNCL 等工具链的定位与用法。寒武纪与思元系列产品中科寒武纪科技股份有限公司成立于 2016 年 3 月 15 日其英文名 Cambricon 由 Cambrian寒武纪与 Silicon硅组合而成。企业使命是为客户创造价值成为持续创新的智能时代领导者愿景是让机器更好地理解和服务人类。寒武纪提供云边端一体、软硬件协同、训练推理融合、具备统一生态的系列化智能芯片产品和平台化基础系统软件。寒武纪发展历程图图片来源04Cambricon.md 插图产品形态IP、边缘端、云端三大场景从 2016 年至今寒武纪的产品线覆盖了终端智能处理器 IP 与思元系列 MLU100/MLU200/MLU300 三代云端产品| IP 终端 | 边缘端 | 云端推理 | 云端训练 | |-|--| -- | --- | | 1A、1H、1M | MLU220 | MLU370、MLU270 | 思元 290、MLU290-M5、MLU-X1000、MLU370 |终端智能处理器 IP是寒武纪的入局产品靠它打入市场包括 1A、1H、1M算力在 0.5~1 TOPSMLU100属于较早的板卡产品当前宣传已不多MLU200 系列包括 MLU220、MLU270、MLU290 三种形态分别面向边缘端、云端推理、云端训练MLU300 系列主要是 MLU370从编号可看出它与 MLU270 在应用场景上的渊源但它也可用于训练。寒武纪的典型云端产品包括 MLU370、MLU290、MLU-X1000面向数据中心业务涵盖训练与推理对标 P100、V100、A100 等国际主流加速卡。寒武纪的典型边缘端产品包括 MLU220 芯片、MLU220-SOM 模组、MLU220-M2 加速卡。端侧产品目前公布的包括 1A、1H、1M 三代但实际板卡内部使用的 IP Core 可能比公布的更新目前官方主要公布的 IP 产品是 1H、1M 系列型号。云边端一体化战略云边端一体化是寒武纪的重要发展战略。其核心逻辑在于云、边、端三种场景对芯片的运算能力和功耗等特性有不同要求单一品类的智能芯片难以满足所有实际应用需求。因此寒武纪面向三大场景分别研发了三类产品云端智能芯片及加速卡边缘智能芯片及加速卡IP 授权及软件。与此同时寒武纪为云边端全系列智能芯片与处理器产品提供统一的平台级基础系统软件Cambricon Neuware包含软件开发工具链等打破了不同场景之间的软件开发壁垒兼具高性能、灵活性和可扩展性可让同一 AI 应用程序便捷高效地运行在寒武纪云边端系列化芯片之上使各种场景下的 AI 模型迁移更方便。MLU03 核心架构IPU MPU 的 Cluster 组织寒武纪产品架构官方公布的名称为 MLU00、MLU01、MLU02、MLU03分别对应 1A、1H、1M以及官方尚未公布型号的 MLU370 处理器内核。以 MLU02 产品为例不同产品线采用的核心相同但 DRAM、PCIe 等外围配置各有不同。以官网公布的最新板卡 MLU370 为例其产品形态为板卡之间借助主板的 MLU Link bridge 互联内存采用低功耗的 LPDDR5PCIe 采用 Gen4.0 与 CPU 互联。MLU370-X8 智能加速卡是全面升级的数据中心训推一体 AI 加速卡基于全新一代思元 370 芯片关键规格如下接口为PCIe 4.0 X16全高全长双宽FHFL-Dual-Slot标准 PCIe 加速卡适用于业内最新的 CPU 平台可搭载于主流 AI 服务器功耗250W可为计算机视觉、自然语言处理、语音等多样化 AI 应用提供算力支持通过MLU-Link™ 高速网络组建大规模训练集群、实现芯片间互联——不仅支持板卡上 2 个思元 370 芯片间通过 MLU-Link™ 通讯也可通过 MLU-Link™ 桥接卡对外互联板卡间 MLU-Link 互联双向总带宽为200 GB/s满足大型 AI 模型训练需要。关于芯粒Chiplet技术芯粒指预先制造好、具有特定功能、可组合集成的晶片Die也被译为小芯片。在集成电路领域我国发展水平和国外存在差距卡脖子成为突出问题。按摩尔定律去发展、去追赶是一条路但也可以另辟蹊径芯粒集成就是这样的前沿技术——把制程代际和功能不同的芯粒像搭积木一样组合形成一个芯片使用。MLU Core 与 Cluster 的基本组成寒武纪的 MLU 硬件是面向 AI 应用的领域专用处理器针对 AI 算法的计算特性和访存特性设计了高效的指令集、流水线、运算部件和访存部件。与通用处理器相比MLU 硬件在处理 AI 任务时具有更高的性能、灵活性和能效比。MLU 硬件针对 AI 中不同特征的访存数据流设计专用的数据通路和运算部件实现了不同数据流之间的隔离同时向软件暴露灵活的片上存储空间访问功能提高处理效率。寒武纪硬件的基本组成单元是MLU Core每个 MLU Core 是具备完整计算、IO 和控制功能的处理器核心可独立完成一个计算任务也可与其他 MLU Core 协作完成计算每4 个 MLU Core构成一个Cluster在MLUv02 及后续架构中每个 Cluster 内还会包含一个额外的Memory Core和一块被 Memory Core 与 4 个 MLU Core 共享的SRAMShared RAM共享存储单元Memory Core 不能执行向量和张量计算指令只能用于 SRAM 与 DDRDouble Data Rate Synchronous Dynamic Random Access Memory双倍速率同步动态随机存储器DDR SDRAM 通常简称为 DDR以及 MLU Core 之间的数据传输。下图展示 MLU03 的核心架构MLU03 采用 4 个IPU即 MLU Core和 1 个MPU即 Memory Core组成一个 Cluster实际上 MLU02 也是。IPU 上有大量的计算单元以及本地 scratchpad memoryNeuronRAM、WeightRAMMPU 上有 SharedRAM相当于 GPU 的 shared memory。不同 Cluster 数量可以组成不同的产品形态云端、边缘端、IP。MLU03 的 Cluster 组织4 个 IPU 1 个 MPU 共享 SRAM对应寒武纪文档插图。寒武纪软件栈对标 CUDA 生态的全栈布局寒武纪拥有自己的一套对标英伟达的软件栈与 CUDA 生态的对应关系如下| 对标项 | 寒武纪对应组件 | | -- | -- | | CUDA C | 编程语言 BANG C | | CuDNN / CuBLAS | 算子库 CNNL | | NCCL | 通信库 CNCL | | TensorRT | 推理引擎 MagicMind | | cuda-gdb | 调试器 cngdb |寒武纪软件栈全景上层 AI 框架TensorFlow、PyTorch、Caffe、ONNX 等中层 Neuware 加速库CNNL/CNCL/CNCV下层 Runtime、驱动与虚拟化右侧配套编译器、Profiler、调试器与系统监控工具。BANG C面向 MLU 的异构编程语言Cambricon BANG 异构计算平台的核心组件是面向 MLU 硬件的编译器工具链目前支持两种编程方式基于 C/C 的扩展语言Cambricon BANG C基于 Python 的扩展语言Cambricon BANGPy。编译器工具链和编程语言为任务划分、并行处理、数据通信和同步机制等提供底层支持使用户可以专注于编写应用的处理逻辑。利用 BANG C 和 BANGPy 可以开发各类 AI 应用和算法库最终形成完整的 AI 解决方案。Cambricon BANG C 在 C/C 语言基础上增加了 BANG 异构并行编程模型必需的语法特性、计算原语、数据类型和内建变量支持同时针对异构编程环境的特点对 C/C 进行了简化禁用了部分不适合异构编程环境的 C/C 特性。BANG C 程序可使用CNGDB进行调试。Cambricon BANG C 语言整合了不同类型指令集和架构的计算单元并支持寒武纪推出的云端、边缘端和终端设备。遵循 BANG C 编程规范的应用程序几乎可以无需修改直接运行在包含不同 MLU Core 数量、Cluster 数量的 MLU 硬件上。使用 BANG C 编写的异构程序包括主机侧和设备侧两部分代码主机侧主要借用CNRTCambricon Runtime Library寒武纪运行时库或CNDrvCambricon Driver API寒武纪软件栈驱动接口提供的接口实现设备信息查询、设备选择、设备内存分配、任务队列创建、输入数据或参数准备、任务描述、Kernel 启动、输出获取等功能设备侧入口函数即 Kernel 函数Kernel 中可以使用 BANG C 面向设备侧编程扩展的语法特性、计算原语、数据类型和内建变量。CNNL寒武纪人工智能计算库Cambricon CNNL寒武纪人工智能计算库是基于寒武纪 MLU、针对人工智能网络的计算库针对 AI 网络应用场景提供高度优化的常用算子同时提供简洁、高效、通用、灵活且可扩展的编程接口。主要支持的算子分三类常见的网络算子卷积、卷积反向求卷积输入与滤波的梯度池化、池化反向激活算子及反向如 ReLU、Sigmoid、TANH 等Softmax 及反向Batchnorm 前向与反向、LayerNorm 前向与反向Reduce 类算子。矩阵、计算类算子矩阵乘张量加、减、乘等基本运算张量逻辑运算张量变换如 Transpose、Split、Slice、Concat 等三角类变换如 sin、cos、tanh 等。循环网络算子Long Short-Term MemoryLSTMGate Recurrent UnitGRU其他 TensorFlow 和 PyTorch 常用算子Embedding 前向和反向计算、Nllloss 前向和反向计算等。CNNL 的设计原则与优化要点以通用为基本设计原则算子支持不同的数据布局、灵活的维度限制以及多样的数据类型结合寒武纪硬件架构特点优化算子使算子具有最佳性能并尽最大可能减少内存占用提供包含资源管理的接口满足用户多线程、多板卡的应用场景。MagicMind推理加速引擎MagicMind 是面向寒武纪 MLU 的推理加速引擎能将 AI 框架TensorFlow、PyTorch、Caffe 与 ONNX 等训练好的算法模型转换成 MagicMind 统一计算图表示并提供端到端的模型优化、代码生成以及推理业务部署能力。它致力于提供高性能、灵活、易用的编程接口及配套工具让用户专注推理业务开发和部署本身无需过多关注底层硬件细节。核心优势极致的性能优化可靠的精度尽可能少的内存占用灵活的定制化开发能力简洁易用的接口。适用场景但不限于图像处理分类、检测、分割、视频处理、自然语言处理、姿态检测、搜索与推荐。MagicMind 支持不同的系统平台和 MLU 硬件平台面向云端业务和端侧业务提供统一的编程界面并针对两种业务场景的差异提供必要的定制化功能比如面向端侧部署提供 remote debug 功能。CNCL寒武纪通信库CNCLCambricon Communications Library寒武纪通信库是面向 MLU 设计的高性能通信库用于多机多卡的集合通信Collective操作帮助应用开发者优化基于 MLU 的多机多卡集合通信支持多种 MLU 芯片互联技术包括 PCIe、MLU-Link、MLU-Link over RoCE、RoCE、Infiniband Verbs 以及 Sockets能够根据芯片互联拓扑关系自动选择最优的通信算法和数据传输路径最大化利用传输带宽完成不同的通信操作。CNCL 围绕以下核心概念组织通信通信实体Communication Entity执行通信操作的基本单元是抽象概念包含通信内存地址空间、MLU 设备、执行设备队列MLU Queue等信息。围绕通信实体CNCL 构建了两个核心概念通信域Communication Clique简称 Clique和通信子Communicator简称 Comm。通信域Clique发生通信操作的上下文环境定义了一组通信实体的集合每个通信实体在通信域内有唯一标识。CNCL 提供操作通信域的接口用户可创建通信域并获取相关信息。通信子Comm对通信实体的表征通常情况下一个通信子关联到一个 MLU 设备和该设备的一个队列Queue。CNCL 提供管理通信子的接口用户可创建、销毁通信子并获取其在通信域中的相关信息。通信操作流程确定通信实体在每个进程中定义一组通信子并设置其关联的 MLU 设备和设备队列。每个进程调用初始化函数cnclInitComms对通信子进行初始化。所有进程内的通信子构成一个通信域域内每个通信子有唯一的序号rank标识。确定通信原语根据通信目的选择要使用的通信原语。对通信域中的每一个通信实体在进程中调用相应的通信原语接口完成通信操作调用时通过 rank 号标识对应实体。若想用接收数据原位覆盖发送数据发送/接收数据的地址需要满足对应通信原语的原位操作特殊条件。判定通信完成通信原语的接口正确返回并不一定表示通信完成这与接口是同步语义还是异步语义有关。AI 框架对接1. PyTorch 支持为支持寒武纪 MLU寒武纪定制了开源 AI 框架 PyTorch以下简称 Cambricon PyTorch借助 PyTorch 自身的设备扩展接口将 MLU 后端库中包含的算子操作动态注册到 PyTorch 中MLU 后端库可处理 MLU 上的张量和算子运算基于 Cambricon CNNL 库在 MLU 后端实现常用算子并完成数据拷贝通过 Torch 模块可调用 MLU 后端支持的网络运算对 MLU 暂不支持的算子支持自动切换到 CPU 上运行Torch 模块中与 MLU 相关接口的语义与 CPU、GPU 接口语义保持一致。寒武纪采用 Python 扩展包形式对原生 PyTorch 进行支持将与 MLU 相关的操作放在一个单独的 Python 包中然后导入到原生 PyTorch 以支持在 MLU 上的运算。2. TensorFlow 支持Cambricon TensorFlow 集成了寒武纪软件栈扩展了社区 TensorFlow 对 MLU 设备的支持同时屏蔽硬件细节允许用户使用原生 TensorFlow API 进行开发可获得与使用 CPU、GPU 一致的体验。其他库DeepSpeed、CNCodec、CNStream1. Cambricon DeepSpeed适配 Cambricon PyTorch 的大规模分布式训练框架位于寒武纪软件栈的 AI 框架和开源生态层。特点在于适配了 Cambricon PyTorch、适配了 Cambricon Lightning、使用 CNCL 进行多卡或多机之间的通信。2. CNCodecCNCodec-V3Cambricon Codec Library寒武纪编解码库是基于第三代寒武纪硬件视频编解码加速单元、针对 MLU 加速卡特点优化的硬件编解码加速库。在继承第二代 CNCodec 设计基础上将视频编解码与图像编解码接口融合提供简洁、高效、通用、灵活且可扩展的接口。3. CNStreamCNStream 是面向寒武纪开发平台的数据流处理 SDK基于模块化和流水线的思想提供一套基于 C11 的类和接口来支持流处理多路并发的 Pipeline 框架。用户可根据接口开发自定义模块并通过模块之间相互连接实现业务处理流程。CNStream 能大大简化寒武纪 AI 平台的推理和其他处理如视频解码、图像前处理的集成在兼顾灵活性的同时充分发挥寒武纪硬件解码和 AI 算法的运算性能。CNServing生产级推理服务系统CNServing 是一款可部署 MagicMind 序列化模型的高性能服务系统专为生产环境设计将任意框架模型通过 MagicMind 生成序列化模型后使用 CNServing 可方便快捷地部署在 MLU 服务器上可同时部署在多张 MLU 板卡上也可部署多个序列化模型为客户端提供高性能服务基于 TensorFlow Serving 架构开发相比 TensorFlow Serving 有更好的性能表现client 端 API 仍使用TensorFlow_serving_api使用 TensorFlow Serving 部署模型的用户无需修改 client 端任何代码即可切换到 CNServing。寒武纪 MLU 架构细节MLUv3 IPUMLU CoreIPU 在官方文档中也叫 MLU Core。其核心模块如下MLU Core 内部组成Control Unit、ALU、GPR/SREG、VA-Cache/ICache、IO-DMA/Move-DMA、VFU/TFU 与 Neuron-RAM/Weight-RAM图片来源04Cambricon.md。各模块职责Control Unit比较重要负责指令的读取、译码和发射。自研指令通过 Control Unit 被负责计算和访存的调度器 Dispatch 到ALU、VFU、TFU、IO-DMA、Move-DMA五个队列IO-DMA实现片外 DRAM 与 W/N-RAM 数据传输也可用于 Register 与片内 RAM 之间的 Load/Store 操作以及原子操作Move-DMA用于 IPU 中 W/N-RAM 与 MPU S-RAM 之间的数据传输和类型转换I-Cache指令缓存64 KB如 512 bit 指令可缓存 1024 条VA-CacheVector Addressing离散数据访问指令的专用缓存用于加速离散向量访问效率减少对总线和存储单元的读写次数Neural-RAMnram768 KB需 16 byte 对齐存储 Input 和 Feature Map 数据Weight-RAMwram1024 KB需 8 byte 对齐存储权重和优化器数据ALU标量Scalar数据的算术逻辑运算GPR一组位宽 48 bit 的寄存器。IPU 为 Load/Store 架构除立即数以外所有操作加载到 GPR 才能参与算术逻辑运算SREG位宽 32 bit 的特殊寄存器用于存储硬件特定属性如 Perf 计数、任务索引等VFU/TFU计算单元实现张量Tensor和向量Vector运算。Vector 运算输入输出在 Neuron-RAMTensor 运算输入自 Neuron-RAM 和 Weight-RAM输出根据调度情况到 Neuron-RAM 和 Weight-RAM。指令流水线方面MLU Core 有三类可并行执行的指令队列XFU-PIPE执行向量和张量单元指令DMA-PIPE支持双流同时进行数据搬运执行具体包括 Move-DMA 和 IO-DMA 两个流ALU-PIPE执行标量数据算术逻辑指令。各个指令队列的并行执行有助于让 IPU 的不同种类的操作互相掩盖overlap。MLUv3 MPUClusterMPU 的主要功能是单个 Cluster 内部 Shared-RAM 和多个 Cluster 间 Shared-RAM 的管理和通信。每一个 Cluster 包含 4 个 MLU CoreIPU和 1 个 MPU。MPU 主要由以下几部分组成Cluster-DMA负责 Cluster 间和 Shared-RAM 间的数据传输Global-DMA负责 GPR 与片外内存、GPR 与 Shared-RAM、Shared-RAM 和 DRAM 间的数据传输Shared-RAM4 MB相当于 1 级缓存给具体计算提供数据。注意MLUv02 以前的寒武纪产品没有 MPU 架构也没有 Cluster 概念。SRAMShared-RAM仅支持 MLUv02 及后续硬件架构。MLUv3 片内通信片内通信分为Cluster 内通信与Cluster 间通信两种。Cluster 内通信先看 IPUMLU Core——ICache 访问 Global-DRAM 读取指令并保存到 ICache 中IO-DMA 可以直接在 DRAM 和 W/N-RAM 之间搬运数据Move-DMA 负责在 S/W/N-RAM 之间以及它们与 GPR 之间搬运数据。之所以使用两种不同的 DMA是为了方便两者之间的并行。MPU 上同样有 ICache此外它通过 Global-DMA 在 DRAM 和 Shared RAM 之间搬运数据特别地它还有两个不同的 Cluster-DMA 通道负责在 Shared RAM 之间搬运数据。存储层次从 GPR 到 GDRAM 的完整体系抽象硬件模型提供了丰富的存储层次包括GPRGeneral Purpose Register通用寄存器、NRAM、WRAM、SRAM、L2 Cache、LDRAMLocal DRAM局部 DRAM 存储单元、GDRAMGlobal DRAM全局 DRAM 存储空间等。GPR、WRAM 和 NRAM 是一个 MLU Core 的私有存储Memory Core 没有私有的 WRAM 和 NRAM 存储资源L2 Cache 是芯片的全局共享存储资源目前主要用于缓存指令、Kernel 参数以及只读数据LDRAM 是每个 MLU Core 和 Memory Core 的私有存储空间容量比 WRAM 和 NRAM 更大主要用于解决片上存储空间不足的问题GDRAM 是全局共享存储资源可实现主机端与设备端的数据共享以及计算任务之间的数据共享。从存储体系结构的角度看Neural-RAMnram和 Weight-RAMwram相当于前面介绍的 DianNao 论文中的 NBinNBout 与 SB属于 scratchpad memory——一种当做存储空间来用的 SRAM。GPR 模块GPR 是每个 MLU Core 和 Memory Core 私有的存储资源MLU Core 和 Memory Core 的标量计算系统都采用精简指令集架构所有标量数据整型或浮点在参与运算之前必须先加载到 GPRGPR 的最大位宽为 48 位一个 GPR 可存储 8 bit、16 bit、32 bit 或 48 bit 的数据GPR 中的数据不仅用于标量运算和控制流功能还用于存储向量运算所需要的地址、长度和标量参数等GPR 不区分数据类型和位宽其存储数据的类型和位宽由操作对应数据的指令决定当实际写入的数据位宽小于 48 bit 时高位自动清零。Cambricon BANG 异构并行编程模型中的隐式数据迁移都是借助 GPR 实现的。例如将 GDRAM 上的标量数据赋值给位于 LDRAM 的变量时编译器会自动插入访存指令先将 GDRAM 中的数据加载到 GPR再插入一条访存指令将 GPR 中的数据写入 LDRAM。NRAMNeural-RAMNRAM 是每个 MLU Core 私有的片上存储空间主要存放向量运算和张量运算的输入输出数据也可存储运算过程中的临时标量数据。相比 GDRAM 和 LDRAM 等片外存储NRAM 有较低的访问延迟和更高的访问带宽。NRAM 访存效率高但空间有限且不同硬件容量不同用户需合理利用频繁访问的数据尽量放在 NRAM 上仅当 NRAM 容量不足时才将数据临时存储在片上的 SRAM 或片外的 LDRAM、GDRAM 上。WRAMWeight-RAMWRAM 是每个 MLU Core 私有的片上存储空间主要存放卷积运算的卷积核数据。为了高效实现卷积运算WRAM 上的数据具有特殊的数据布局。SRAMShared-RAMSRAM 是一个 Cluster 内所有 MLU Core 和 Memory Core 都可访问的共享存储空间可用于缓存 MLU Core 的中间计算结果实现 Cluster 内不同 MLU Core 或 Memory Core 之间的数据共享及不同 Cluster 之间的数据交互。SRAM 访存带宽高但容量有限需合理利用。SRAM 仅支持 MLUv02 及后续硬件架构。此 SRAM 非彼 SRAM——这里的 S 代表 Shared共享而不是 Static静态。L2 CacheL2 Cache 是位于片上的全局存储空间由硬件保证一致性目前主要用于缓存指令、Kernel 参数以及只读数据。LDRAMLDRAM 是每个 MLU Core 和 Memory Core 私有的存储空间用于存储无法在片上存放的私有数据。LDRAM 属于片外存储不同 MLU Core 和 Memory Core 之间的 LDRAM 空间互相隔离软件可配置其容量。与 GDRAM 相比LDRAM 的访存性能更好因为 LDRAM 的访存冲突比较少。GDRAM与 LDRAM 类似GDRAM 也是片外存储。位于 GDRAM 中的数据被所有 MLU Core 和 Memory Core 共享。GDRAM 的作用之一是在主机侧与设备侧传递数据如 Kernel 的输入、输出数据等。Cambricon BANG 异构编程模型提供了专门用于主机侧与设备侧之间数据拷贝的接口。编程示例从标量矩阵乘到 __bang_matmul以矩阵乘为例刚接触寒武纪硬件的新手可能会用标量来开发一个矩阵乘 Kernel#define M 256 #define K 256 #define N 256 ... __nram__ float nram_dst[M * N]; // C 矩阵 __nram__ int16_t nram_src0[M * K]; // A 矩阵 __nram__ int8_t nram_src1[K * N]; // B 矩阵 ... for (int i 0; i M; i) { for (int j 0; j N; j) { float tmp 0; for (int k 0; k K; k) { tmp nram_src0[i * K k] * nram_src1[j * K k]; } nram_dst[i * N j] tmp; } }然而上述代码实际只使用寒武纪硬件中的标量计算单元不能充分利用向量、矩阵乘单元因而无法发挥硬件性能。与之相对下面的代码使用__bang_matmul向量接口加速矩阵乘。调用该接口时需要保证左矩阵在内存上是行优先的右矩阵在内存上是列优先的#define M 256 #define K 256 #define N 256 #define POS 0 #define SRC0_DATA_NUM (M * K) #define SRC1_DATA_NUM (K * N) #define DST_DATA_NUM (M * N) // Matrix multiplication (MLU Kernel) on the device: dst src0 * src1 __mlu_global__ void MatmulKernel(float* dst/*C*/, int16_t* src0/*A*/, int8_t* src1/*B*/) { __nram__ float nram_dst[DST_DATA_NUM]; __nram__ int16_t nram_src0[SRC0_DATA_NUM]; __wram__ int8_t wram_src1[SRC1_DATA_NUM]; __memcpy(nram_src0, src0, SRC0_DATA_NUM * sizeof(int16_t), GDRAM2NRAM); __memcpy(wram_src1, src1, SRC1_DATA_NUM * sizeof(int8_t), GDRAM2WRAM); __bang_matmul(nram_dst, nram_src0, wram_src1, M, K, N, POS); __memcpy(dst, nram_dst, DST_DATA_NUM * sizeof(float), NRAM2GDRAM); }这段 Kernel 展示了 BANG C 的核心编程要素__mlu_global__声明设备侧 Kernel 入口函数__nram__/__wram__声明片上私有存储NRAM 存放 A/C 矩阵WRAM 存放 B 权重矩阵与硬件架构中Tensor 运算输入自 Neuron-RAM 和 Weight-RAM的设计对应__memcpy(..., GDRAM2NRAM)与__memcpy(..., GDRAM2WRAM)完成主机侧GDRAM到设备侧片上的数据搬运__bang_matmul调用向量/矩阵乘计算原语POS参数用于指定输入数据类型组合等矩阵乘配置最后__memcpy(..., NRAM2GDRAM)将结果写回全局存储供主机侧读取。除了使用专用的 intrinsic function 之外寒武纪 CAMBRICON BANG C/C 编程指南还介绍了很多种优化方法如数据分块、流水调度、向量化等有助于进一步优化任务性能。仓库中的配套 PDF 课件 04CambriconProduct.pdf、05CambriconArch.pdf 与 06CambriconArch.pdf 提供了该主题的图形化讲解版本06Domestic/README.md 大纲页也将本文档定位为寒武纪 AI 芯片第一股章节。小结与思考寒武纪的 MLU 硬件是为 AI 应用设计的专用处理器具有高性能、灵活性和高能效比通过专门的存储和运算部件优化了 AI 任务处理寒武纪提供统一的平台级基础系统软件 Cambricon Neuware支持云边端全系列智能芯片简化 AI 模型迁移和软件开发Cambricon BANG 平台提供了一套完整的软件栈支持从 C/C 编程到 AI 框架和通信库简化了异构并行编程寒武纪的 MLU 架构包括多层次的存储结构和多种计算能力支持不同规模的并行计算任务并通过软件工具优化性能存储层次包括 GPR、NRAM、WRAM、SRAM、L2 Cache、LDRAM 和 GDRAM支持不同存储需求和数据共享从产品矩阵看MLU 系列以云边端一体 统一生态为路线同一个 BANG C 应用程序几乎无需修改即可运行在不同 MLU Core 数量、Cluster 数量的硬件上这是其软硬件协同设计的直接体现。若想继续深入 AI 芯片体系结构背景可参考仓库内 06AIChip.mdDSA 架构、SRAM/DRAM 权衡、多租户等通用议题其中也对比了 MLU370 的内存配置关于编译器、推理与框架的更多内容可浏览仓库 03Compiler、04Inference 与 05Framework 各章节。赞分享文档教程人工智能【免费下载链接】AISystemAISystem 主要是指AI系统包括AI芯片、AI编译器、AI推理和训练框架等AI全栈底层技术项目地址https://gitcode.com/GitHub_Trending/ai/AISystem点击查看免费下载相关推荐LMDeploy 在寒武纪Cambricon/MLU云端加速卡上的部署与推理实战指南LMDeploy 在寒武纪Cambricon/MLU云端加速卡上的部署与推理实战指南 LMDeploy 的 PyTorch 引擎PytorchEngine人工智能大模型模型推理服务推理引擎本地部署模型量化LMDeploy 在寒武纪 CambriconMLU设备上的部署与推理指南LMDeploy 在寒武纪 CambriconMLU设备上的部署与推理指南 本篇指南介绍如何在寒武纪 Cambricon 加速卡MLU上使用 LMDep人工智能大模型模型推理服务推理引擎本地部署模型量化ant-design-mobile List 列表组件完全指南属性、CSS 变量、源码原理与虚拟滚动实战ant design mobile List 列表组件完全指南属性、CSS 变量、源码原理与虚拟滚动实战 List列表是 ant design mobilUI组件前端移动开发上一篇探索代码的新维度VSCode-Background 扩展下一篇【亲测免费】 探索优雅的终端风格Termux Style创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表