千变万化

芯算未来

陈巍谈芯:GPGPU架构入门 —《AI芯片设计:原理与实践》节选

存算一体芯片    原创技术文章    陈巍谈芯:GPGPU架构入门 —《AI芯片设计:原理与实践》节选

《AI芯片设计:原理与实践》系列,适合AI芯片设计人员入门与芯片赛道投资人了解技术内涵。

■ 陈巍,资深芯片专家,人工智能算法-芯片协同设计专家,擅长芯片架构与存算一体

■ 耿云川,资深SoC设计专家,软硬件协同设计专家,擅长人工智能加速芯片设计

 

往期文章简选

■ 陈巍谈芯  目标检测网络SSD —《AI芯片设计:原理与实践》节选

■ Nature首发的三星存内计算芯片原理和不足是什么?

 

5.1 基本构架

 

CPU中,大部分晶体管主要用于构建控制电路(比如分支预测等)和cache(缓存,用于存储数据),只有少部分的晶体管来完成实际的运算工作。相比之下,GPU的控制电路结构简单,对cache的需求小,大部分晶体管用来构成各类大规模专用并行计算电路、多条流水线,使得GPU的任务计算速度比CPU有突破性的飞跃,且拥有更强大的浮点运算能力。打个比方,CPU是几个中学生做中考题,GPU就是几千个小学生做口算题。

 

AMD GPU平剖图

 

在架构上GPU由数以千计的更小、更高效的核心(类似于CPU中的ALU)组成,这些核心专为同时处理多任务而设计。现在的CPU,一般是多核(multi-core)结构;而 GPU 一般是众核(many-core)结构。

 

CPU和GPU架构对比

 

GPU中并行计算改进了很多重要细节:

(1)一个计算问题可以分解成可同时处理的离散指令;

(2)每部分指令进一步细分为一系列内部指示;

(3)每个部分的问题可以同时在不同的计算单元上执行,显著提高了算法的处理速度。

 

并行运算示意图

 

为充分利用GPU的计算能力,NVIDIA在2006年推出了CUDA(Computer Unifie Device Architecture,统一计算设备架构)这一编程架构。该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。

 

OpenCL(Open Computing Language,开放计算语言)为异构平台提供了一个编写程序,尤其是并行程序的开放的框架标准。OpenCL所支持的异构平台可由多核CPU、GPU或其他类型的处理器组成。

 

CUDA只能够在NVIDIA的GPU硬件上运行。但是,OpenCL的目标是面向任何一种并行处理器,OpenCL是第一种真正的开放自由版权编程标准,适用于异构系统上的通用计算。而异构平台可由CPU、GPU、DSP、FPGA或其他类型的处理器搭建[1]。

 

5.2 NVDLA解读

 

深度学习推理的大部分计算工作都是基于数学运算, 这些运算可以大致分成四个部分: 卷积、激活、池化(pooling)和归一化(normalization)。它们的内存访问模式是非常可预测的,并且适合并行化。

 

NVDLA(NVIDIA Deep Learning Accelerator)是NVIDIA发布的一个开源架构,以解决深度学习的计算需求。标准化深度学习硬件加速模块旨在促进机器学习的发展。

 

NVDLA硬件模块提供了一个简单灵活的推理加速解决方案。开源的版本里面包含工业级的RTL设计,基于TLM System C写的仿真模型(用于软件开发,系统整合及验证),开源的软件包含firmware、模型builder。

 

当然NVDLA架构开发得比较早,也有一些技术遗憾。比如对AI计算数据流和存储墙的优化有限,以及未使用针对AI优化的存储器。

 

5.2.1 两种实现模型的比较

 

NVDLA硬件利用标准接口与系统的其余部分进行数据交连接——一个控制通道实现一个寄存器文件和中断接口,并使用一对标准的AXI总线接口来与内存进行交互。主内存接口是用来连接系统的宽内存系统,包括系统DRAM;这个内存接口与系统的CPU和外围I/O设备共享。第二个内存接口是可选的,它允许连接到更高带宽的内存(例如HDM),这些内存可能专门用于NVDLA或计算机视觉子系统。异构内存接口提供更高的数据传输性能与灵活性。

 

NVDLA的实现一般分为两类:

(1)Headless(small):NVDLA硬件的单元管理在主系统处理器上进行。

(2)Headed(large):将高中断频率任务委托给一个与NVDLA子系统紧密耦合的微控制器。

 

下图中的小系统模型("Small" NVDLA system)显示了一个headless NVDLA实现的例子;而大系统模型("Large" NVDLA system)显示了一个headed实现。小系统模型实现了一个对成本更敏感的构建模式。大系统模型的特点是增加了专用的控制协处理器(微控制器)和高带宽的SRAM来支持NVDLA子系统。大系统模型更倾向与高性能的物联网设备,这些设备可以同时运行许多任务。

两种NVDLA实现模型的比较

 

5.2.2 NVDLA结构

 

NVDLA项目来源于2017年NVIDIA开源的Xavier无人驾驶加速器,提供了完整的C Model、RTL实现、验证系统、编译器、Linux驱动、应用代码以及一套虚拟的验证平台。项目源码地址是https://github.com/nvdla/,基于这些开源代码,每个人都可以实现自己的GPU AI核心。

NVDLA开源工具

 

NVDLA架构主要包含以下几个模块:

1. Convolution Core:即卷积核,优化的高性能卷积计算单元。专门负责CONV和FC层的运算,包括大量的MAC单元。这些MACd单元以C * K的形式组织,其中C为同时处理的input channel的数量,K为同时处理的output channel的数量。

2. Single Data Processor:即单数据处理器,用于非线性激活函数的单点查找表单元,负责ReLU、 PReLU、precision scaling、batch normalization、bias addition、sigmoid、hyperbolic tangent等简单的线性非线性运算。其中sigmoid和tanh通过LUT的形式实现。

3. Planar Data Processor:即平面数据处理器,用于池化计算,包括max_pool、min_pool、avg_pool三种。

4. Channel Data Processor:即通道数据处理器,用于归一化函数的多通道平均计算单元。

5. Dedicated Memory and Data Reshape Engines:即专用内存与数据重构引擎,用于存储到存储的转换和访存操作。

NVDLA核心的内部结构

 

模块调度的控制由CPU或者微处理器(GPU内部)完成。NVDLA支持两种工作模式:独立模式(Independent)和融合模式(Fused)。Independent模式是指每次计算单个单元都会执行memory-to-memory操作,将结果放回外部DRAM或者是SRAM,下一级单元再从memory中取出上级结果进行计算。与之相对应的,Fused模式在每个单元中间插入小的FIFO缓存,这样下一级单元就可以从FIFO中直接取出结果进行计算。这样一种流水线的操作模式减缓了内存操作引起的性能瓶颈,提高了整体带宽,同时利用流水线的特性充分利用系统的算力。

 

当配置为Independent模式时,需要增加内部微处理器来控制。当配置Fused模式时,则可以只使用CPU。

Fused模式示意图

 

5.2.3 NVDLA主要模块

 

1. 数据通道

(1)CSB(Configuration Space Bus,配置空间总线):配置总线规范与AXI-lite总线是兼容的,NVDLA的主要外部数据总线都是与AXI标准都是兼容的,不过这些总线都有所简化,不支持一些特性。这些简化一方面适应深度神经网络网络的运算特点,另一方面可以简化接口逻辑,节约面积资源。集成工程师可以很轻松地将CSB总线转换成系统所需要的总线形式,方便集成。

 

CSB主要包括请求通道、读数据通道和写响应通道,包括12组信号线。具体信号线个数与所选择的AXI总线位宽有关。

 

(2)IRQ(Interrupt ReQurest,中断请求):这是用于NVDLA向Host返回异步中断信号的端口,比如NVDLA的运算完成,或者是内部错误中断。

 

(3)DBBIF(Data BackBone InterFace,数据主干总线接口):主干总线用于NVDLA通过DMA方式访问DRAM内部的大规模数据,比如输入的特征、运算的权重、运算结果等,接口兼容AXI-4的标准。

 

(4)SRAMIF(SRAM InterFace,SRAM接口):可选的RAM接口用于连接系统外部的SRAM,主要是用作片上cache的缓存内存。典型的Small系统和典型的Large系统最明显的区别就是SRAM的cache接口。

 

2. 卷积流水线

卷积的五级流水线包括:卷积 DMA、卷积缓存、卷积顺序控制器、卷积MAC和卷积累加器。

卷积流水线

 

每一级流水线有自己的CSB slave端口,接收来自CPU的配置信息,流水线具有1024个int16或者fp16的MAC(MAC也可以配置为2048个int8的MAC),一个支持32位部分和的累加阵列,同时配有512KB的SRAM作为卷积计算weight和activation的缓存。

NVDLA可配置MAC接口[1]

 

3. 查找表

查找表(Look Up Table,LUT)在SDP/CDP中通过实例化,用来模拟非线性函数。LUT里面包括乘法、加法、减法、移位、查找表等功能。通过LUT可以覆盖绝大部分激活函数。

LUT架构[2]

 

看下图中的Table-X和Table-Y,一个存储变化比较陡峭、采样率高的数据(density table),另一个存储变化比较缓慢、采样率低的数据(raw table)。

非线性函数: Sigmoid[2]

 

在使用LUT时需要注意数据的存在区间,即LUT的覆盖率:Table-X含于Table-Y、Table-X与Table-Y重叠、Table-X与Table-Y互斥但无法覆盖所有区间。

LUT对于激活函数的覆盖情况[2]

 

Reference:

[1]NVDLA Open Source Project: https://github.com/nvdla/

[2]NVDLA website: http://nvdla.org/

 

END

 

 

作者简介

■ 陈巍 博士

资深芯片专家,人工智能算法-芯片协同设计专家,擅长芯片架构与存算一体。

主要成果包括:

1. 国内首个可重构存算处理器架构(已在互联网大厂完成原型内测)

2. 首个医疗领域专用AI处理器(已落地应用)

3. 首个RISC-V/x86/ARM平台兼容的AI加速编译器(与阿里平头哥/芯来合作)

4. 国内首个3D NAND芯片架构与设计团队建立(与三星对标)

5. 国内首个嵌入式闪存编译器(硅编译器,与台积电对标)

6. 国内首个90nm闪存芯片架构(合作完成,与Cypress对标)

中关村云计算产业联盟,智能计算产业技术创新联合体,智能感知和信息化专家工作委员会专家。

 

■ 耿云川 博士

资深SoC设计专家,软硬件协同设计专家,擅长人工智能加速芯片设计。

主要成果包括:

1. 国内首个可重构存算处理器架构(已在互联网大厂完成原型内测)

2. 日本NEC电子EMMA-mobile构架多媒体计算系统

3. 日本瑞萨电子车载计算SoC芯片构架(唯一外籍专家)

4. 日本瑞萨电子R-Mobile/R-Car系列车载计算芯片

5. 支持ADAS的车载计算硬件

 

《AI芯片设计:原理与实践》目录

(内含设计实战)

 

1 概述 

    1.1 AI芯片的应用场景

    1.2 AI芯片的分类

    1.3 AI芯片设计基本流程

    Reference

2 AI芯片常用机器学习模型

    2.1 线性模型 

    2.2 分类算法SVM 

        2.2.1 线性分类器及其求解 

        2.2.2 核函数 

        2.2.3 松弛变量 

    2.3 分类算法贝叶斯网络 

        2.3.1 贝叶斯定理 

        2.3.2 贝叶斯网络结构 

    Reference 

3 AI芯片常用深度学习模型 

    3.1 基础知识 

        3.1.1 全连接 

        3.1.2 卷积 

        3.1.3 激活函数 

    3.2 图像分类网络AlexNet 

        3.2.1 AlexNet特点 

        3.2.2 AlexNet网络结构 

    3.3 图像分类网络ResNet 

        3.3.1 ResNet特点 

        3.3.2 ResNet网络结构 

        3.3.3 ResNet算法细节 

    3.4 目标检测网络Faster-RCNN 

        3.4.1 RCNN与Fast-RCNN 

        3.4.2 Faster-RCNN特点 

        3.4.3 Faster-RCNN算法结构 

    3.5 目标检测网络SSD 

        3.5.1 SSD特点 

        3.5.2 SSD网络结构 

        3.5.3 SSD算法细节 

    3.6 目标检测网络YOLOv5 

        3.6.1 YOLOv5特点 

        3.6.2 YOLOv5网络结构 

        3.6.3 YOLOv5算法细节 

    3.7 自然语言处理网络BERT 

        3.7.1 BERT特点 

        3.7.2 Attention机制 

        3.7.3 Transformer 

        3.7.4 BERT网络结构 

        3.7.5 BERT算法细节 

    3.8 图像分类网络SqueezeNet 

        3.8.1 SqueezeNet特点 

        3.8.2 SqueezeNet网络结构 

    3.9 图像分类网络MobileNet 

        3.9.1 MobileNet特点 

        3.9.2 MobileNet网络结构 

    3.10 蛋白质求解网络AlphaFold2 

        3.10.1 AlphaFold2特点 

        3.10.2 AlphaFold2网络结构 

        3.10.3 AlphaFold2算法细节 

    Reference 

4 AI加速电路设计 

    4.1 卷积计算加速 

        4.1.1 传统MAC阵列设计 

        4.1.2 基于存算一体技术的MAC阵列设计 

        4.1.3 数据-电路映射结构 

    4.2 池化加速 

    4.3 激活函数加速 

    4.4 Softmax加速 

    4.5 BatchNormal加速 

5 GPU架构 

    5.1 基本架构 

    5.2 NVDLA解读 

        5.2.1 两种实现模型的比较 

        5.2.2 NVDLA结构 

        5.2.3 NVDLA主要模块 

    Reference 

6 DSA架构 

    6.1 基本架构 

    6.2 谷歌TPU 

    6.3 海思达文西 

    6.4 Wave Computing 

    Reference 

7 可重构架构 

    7.1 传统可重构 

    7.2 软件定义的可重构 

    7.3 DSP电路结构 

    Reference 

8 存算一体架构 

    8.1 存算一体架构的分类 

    8.2 近存计算 

    8.3 基于SRAM/DRAM的存内计算 

    8.4 基于FLASH的存内计算 

    8.5 基于新型NVM的存内计算 

    8.6 内存逻辑 

    8.7 可重构存算 

    Reference 

9 适用AI芯片的量化与稀疏化技术 

    9.1 量化技术 

    9.2 稀疏化技术 

    Reference 

10 AI芯片编译器设计  

    10.1 主流AI编译器概况  

    10.2 专用编译器设计流程  

    10.3 通用AI编译器设计流程  

    10.4 泛AI编译器设计流程  

    Reference  

11 AI芯片的未来  

    11.1 AI芯片应用与落地趋势  

    11.2 AI芯片架构发展趋势  

    11.3 AI芯片市场发展现状与趋势  

    Reference  

12 基于FPGA的图像分类AI加速器设计实战

    12.1 架构设计实战

    12.2 MAC阵列设计实战  

    12.3 Softmax加速设计实战  

    12.4 数据流-存储-计算协同优化实战

 

2022年3月2日 19:20
收藏