智能计算系统第六章 深度学习处理器原理

深度学习处理器概述

神经网络越来越大,越来越深
为什么需要深度学期处理器

深度学习应用广泛

  • 图像识别、语言处理、自然语言处理、博弈游戏等领域
  • 已经渗透到云服务器和智能手机的方方面面

通用CPU/GPU处理在人工神经网络效率低下

  • 谷歌大脑:1.6万个CPU核跑了数天完成猫脸识别训练
    AlphaGo:和李世石下棋用了1202个CPU和200个GPU

专门的深度学习处理器

  • 图形处理 GPU
  • 信号处理 DSP
  • 智能处理 ?
  • 未来每台计算机可能都需要一个专门的深度学习处理器
    • 云服务器到智能手机
    • 应用面将超过GPU:每年数十亿片

发展历史

第一次热潮

  • 1951,SNARC
  • 1960,Mark-I

第二次热潮

  • 1989,Intel ETANN
  • 1990,CNAPS
  • 1993,MANTRAI
  • 1997,预言神

1990s的神经网络处理器

  • 结构简单
  • 规模小

第三次热潮 2006至今

  • 2008 英伟达GPU
  • ……

深度学习处理器发展的三个因素
技术、体系结构、应用

深度学习处理器设计思路

介于专用芯片和通用芯片之间。
能效和通用性中(不可兼得)取平衡

  • 算法范围界定、算法分析
  • 自定制硬件,利用算法特性
  • 阻碍高效率:带宽、访存速度、访存代价

目标算法分析

要完成 VGG19 卷积神经网络
分析什么

  • 计算:是否存在固定重复的计算模式
  • 访存:数据局部性原理、数据和计算的关系(对于带宽的需求)

VGG19 全连接层

输入向量x,乘上矩阵W,对结果送入激活函数得到输出
计算特点

  • 向量内积、向量元素操作
  • 没有复杂控制流

VGG 19 卷积层

计算特点

  • 矩阵内积、向量的元素操作
  • 无复杂控制流

VGG 19 池化层

MAX Pooling
AVG Pooling
计算特点

  • 向量的元素操作
  • 无复杂控制流

总结 VGG 19

1.14亿个参数
卷积、池化、全连接
计算过程间接
25层 网络
16层卷积 3*3卷积核,图大小不变
5层池化
3层全连接

  • 计算特征
    乘法加法(内积)

  • 访存特征
    外循环复用,复用距离等于Ni
    W内外循环五服用
    y[j]内循环复用,复用距离等于1

    可解偶性、可复用性

数据量大(尤其是全连接层)
参数占用内存远大于Cache,需要循环分块降低访存开销

深度学习处理器 DLP 结构

深度学习专用 Deep Learning Processor
DLP 结构

  • 指令集
  • 流水线
  • 运算部件
  • 访存部件
  • 算法映射

指令集

  • 计算机的抽象模型
  • 定义了体系结构
  • 软硬件的唯一接口
  • 为什么采用指令集
    • 灵活性:支持未来可能出现的新的深度学习算法
    • 通用性:支持广泛的深度学习算法

设计原则

  • 数据级并行
  • 可向量化操作

DLP 指令集

  • 支持向量运算、矩阵运算
  • Load-store结构:只通过load和store指令访问主存
  • 64bit定长指令,变长操作数(寄存器指定长度)
  • 控制指令
    • jump 立即数跳转指令
    • CB 条件分支指令
  • 数据传输指令
    • load/store指令:主存和片上存储交互
      • MLOAD/MSTORE:矩阵数据 变长
      • VLOAD/VSTORE:向量数据 变长
      • SLOAD/SSTORE:标量数据
    • MOVE 指令:片上数据传输
      • MMOVE,VMOVE,SMOVE
  • 计算指令
    • 矩阵运算
      • MMV, VMM, MMS, OP, MAM, MSM
    • 向量运算
      • VAV, VSV, VMV, VDV, VEXP,VLOG, IP, RV, VMAX/VMIN
    • 标量运算
      • 加减乘除基本运算,标量超越函数
  • 逻辑指令
    • 向量逻辑

流水线

7段流水

  • 取值、译码、发射、读就存其、执行、写回、提交

运算部件

  • MAC multiply accumulator
    标量MAC单元、向量MAC单元
  • N个向量MAC单元堆叠
  • 能够支撑DLP指令集
    • 矩阵/向量/标量计算指令
  • 可否完成
    • 全连接层?池化层?卷积层?

  • 激活函数处理单元
    非线性函数单元
  • 池化操作
    • MFU的三个stage退出通路
  • 任意规模
    • 局部累加功能

访存部件

访存非常关键

  • 可解偶性
    • 三个分离访存部件
    • 有效避免访存流之间互相干扰
  • 可复用性
    • 片上缓存:行成运算单元-片上-片外的存储
    • scratchpad memory管理(程序员完全可见可控的“cache”)
    • 提高片上数据的复用率

前半截体系结构和通用处理器一样,后半截加了VFU、MFU等专用的硬件。

算法映射

基本思想:硬件的分时复用

  • 全连接层映射
    • 具体计算指令顺序
  • 卷积层映射

优化设计

基于标量MAC的运算部件

向量mac,标量mac
非基于mac运算单元的

稀疏化

如果有的神经元的值接近于0,可以直接舍弃该神经元,而并不会对神经网络有什么影响。

低位宽

有的时候用较少位数的浮点数,影响不大但能提升很多性能。

性能评价

TOPS Tera Operations Per Second

  • TOPS 不是 TFLOPS
    TOPS=fc×(Nmul+Nadd)/1000TOPS=f_c×(N_{mul}+N_{add})/1000
  • 访存带宽
    BW=fm×b×ηBW=f_m×b×\eta
    fm主频,存储位宽b,访存效率η的关系

基准测试程序

  • MLPerf 基准测试程序

影响性能的因素

T=iNi×Ci/fcT=\sum_iN_i×C_i/f_c
Ni表示该任务中第i类操作的数量,ci表示完成第i类操作所需要的时钟周期数
fc表示处理器的主频

  • 减少ci
  • 减少访存开销
  • 多级并行

其它加速器

GPU

  • 计算:SIMD
  • 存储:多层次
  • 控制:SIMD指令

FPGA

  • 计算:可配置CLB
  • 存储:Block RAM
  • 控制:配置