Skip to main content

LUT AI 神经网络算法

背景

  1. FPGA的基本单元是LUT(查找表),如果把LUT看成一种逻辑运算单元

    1. 查找表的真值表可以表示静态权重
    2. 查找表的部份输入表示动态权重
  2. FPGA的可重构特性,相对于AI处理器
    1. 可以把部份或者全部的动态权重(操作数)固化成静态的真值表,大大提高PPA
    2. 不同的模型和参数,可以通过重新配置FPGA的逻辑单元
    3. 只适合推理,理论上训练的权重不能静态化,PPA优势不大
  3. 把FPGA的LUT作为AI芯片的核心算力单元
    1. 有利于硬件的标准化

算法

  1. LUT6
    1. 6输入1输出的标准LUT,有64种可能,配置权重有 64bit 
    2. xc7k480t包含 74659 slices,每个slice包含 4 LUT, 8个flip-flop
    3. 如果所有lut真值表都用来存储权重,64bit*74659*4 = 2389088 byte,等效算力 74659*4 / 6 * 2 * 0.5G  (GFlops) =  50 TFlops
    4. 可以组合多个LUT形成更高位的LUT单元
  2. 6个 LUT6 并联输出6bit,形成一个6输入6输出的映射表
    1. 可以表示任意的运算,包括加乘法
  3. 有没有更原生的适合LUT的算法?而不是抽象成数值计算
    1. 直接对LUT组成的网络做梯度下降?
      1. there is an analog method that treats inputs and outputs as "probabilities of being 1" rather than 0 or 1, which is called Stochastic computation. Fortunately, Neural Networks handle the likelihood of many objects in training, so this approach is a good match.
      2. 使用任何模型来表示LUT都是对LUT的表示能力的浪费,应该使用传统方式进行训练,并且约束模型最后的计算范围尽量覆盖LUT的所有可能(稠密),才能不浪费LUT的算力。这种情况和稀疏的模型在GPU上浪费算力一样。
    2. 非常像存内计算,存储容量小,算力非常高

 

参考

  1. https://github.com/ryuz/BinaryBrain
  2. バイナリニューラルネットとハードウェアの関係
    https://www.slideshare.net/kentotajiri/ss-77136469

  3. BinaryConnect: Training Deep Neural Networks with binary weights during propagations
    https://arxiv.org/pdf/1511.00363.pdf

  4. Binarized Neural Networks
    https://arxiv.org/abs/1602.02505

  5. Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1
    https://arxiv.org/abs/1602.02830

  6. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
    https://arxiv.org/abs/1603.05279

  7. Xilinx UltraScale Architecture Configurable Logic Block User Guide
    https://japan.xilinx.com/support/documentation/user_guides/ug574-ultrascale-clb.pdf