LUT AI 神经网络算法
背景
-
FPGA的基本单元是LUT(查找表),如果把LUT看成一种逻辑运算单元
- 查找表的真值表可以表示静态权重
- 查找表的部份输入表示动态权重
- FPGA的可重构特性,相对于AI处理器
- 可以把部份或者全部的动态权重(操作数)固化成静态的真值表,大大提高PPA
- 不同的模型和参数,可以通过重新配置FPGA的逻辑单元
- 只适合推理,理论上训练的权重不能静态化,PPA优势不大
- 把FPGA的LUT作为AI芯片的核心算力单元
- 有利于硬件的标准化
算法
- LUT6
- 6输入1输出的标准LUT,有64种可能,配置权重有 64bit
- xc7k480t包含 74659 slices,每个slice包含 4 LUT, 8个flip-flop
- 如果所有lut真值表都用来存储权重,64bit*74659*4 = 2389088 byte,等效算力 74659*4 / 6 * 2 * 0.5G (GFlops) = 50 TFlops
- 可以组合多个LUT形成更高位的LUT单元
- 6个 LUT6 并联输出6bit,形成一个6输入6输出的映射表
- 可以表示任意的运算,包括加乘法
- 有没有更原生的适合LUT的算法?而不是抽象成数值计算
- 直接对LUT组成的网络做梯度下降?
- 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.
- 使用任何模型来表示LUT都是对LUT的表示能力的浪费,应该使用传统方式进行训练,并且约束模型最后的计算范围尽量覆盖LUT的所有可能(稠密),才能不浪费LUT的算力。这种情况和稀疏的模型在GPU上浪费算力一样。
- 非常像存内计算,存储容量小,算力非常高
- 直接对LUT组成的网络做梯度下降?
参考
- https://github.com/ryuz/BinaryBrain
-
バイナリニューラルネットとハードウェアの関係
https://www.slideshare.net/kentotajiri/ss-77136469 -
BinaryConnect: Training Deep Neural Networks with binary weights during propagations
https://arxiv.org/pdf/1511.00363.pdf -
Binarized Neural Networks
https://arxiv.org/abs/1602.02505 -
Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1
https://arxiv.org/abs/1602.02830 -
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
https://arxiv.org/abs/1603.05279 -
Xilinx UltraScale Architecture Configurable Logic Block User Guide
https://japan.xilinx.com/support/documentation/user_guides/ug574-ultrascale-clb.pdf