FPGA在AI领域如何发力,如何抢碗饭吃?大多数提到是硬件加速,在AI工程里,完成数据前处理(加速)。大家很少提到AI模型的本身的推理过程,让FPGA成为AI模型的推理/算力芯片,这自然是 FPGA厂商们的梦想。否则,仅仅是加速,那就是个配角。
Intel(ateral)和 AMD(Xlinx) 已做过大量的尝试,但是效果似乎并不好,这是为什么呢?我们仔细来看看原因。
在详细解决部署之前,我们还是先从头讲起,看看重要的历史。
一:微软与FPGA
FPGA 的加速应用,最有名的就是为微软 Bing 搜索引擎加速了,
在第一个阶段,具体的做法是:
在数据中心1632台服务,安装了 Intel 的 Stratix V系列的FPGA 几千张。
1:将核心的文件排名 C++算法(3万行的文件排名) 卸载到 FPGA上 ,完成硬件加速。
2:CPU 通过 PCIe 总线访问FPGA。可以通过网络访问远端的FPGA。这是一个基础设施。
结果还是不错的,获得了95%吞吐量提升,达到了加速的目标。可以看出,它利用的是FPGA的并行运算能力,当然,排序算法可能变化,所以,也用到FPGA的可编程性。但从代码量上看,据说有上万行代码,这种用法不是小玩家都完成的,想想都头疼。
到了第二阶段,形成的这么大规模的 FPGA集群,微软拿来做了其它尝试,提供深度神经网络的部署/推理。
1:导出已训练好的模型的计算流程图。(深度学习的模型实际上也就是一系列的数据运算流程),模型的训练与传统做法没有什么不同,这里不讲。
2:计算流图的流程可以进行分解,分解成若干的小图,方便后续可映射到单块FPGA运行。
因为目前具有的集群FPGA,我们可以把任务分派到不同FPGA。
3:不适合 FPGA运行的部分映射到与FPGA相连的 CPU上。
4:在FPGA上完成一个 IP软核 :DPU,用于承载第2步的任务,开发者通过指令级IP核调用,降低开发难度。
注意,微软的FPGA硬件是一个集群,而不是单张FPGA卡。所以,有几个特点:
1:运算中数据缓存,并没有使用DDR,而是将数据全部存在FPGA的片上高速RAM 中,因为集群中有过上千张的FPGA卡,频率高达 600G,基本可以形成35T左右的处理带宽。这只有微软的这种情况才能实现。使用高速RAM,速度自然会更快。DDR是较慢的,因为需要通过接口不停的读取有消耗。
2:微软自定义了 ms-fp-8, ms-fp-9 这两种低精度的浮点数,可以理解就是量化,通过调低精度,降低算力和存储要求。
3:硬件工程师会开发和维护 NPU 软核和指令集,软件工程师基于NPU IP 和指令集进行应用开发。注意:这个指令集类似SIMD(GPU的指令集)。我们可以理解,就是在模仿GPU的做法。
上面形成的这个脑波NPU,微软也在Bing中应用了(TuringPrototype,DeepScan) ,效果如何,没有资料提及。
从上面的例子可以看出,微软对FPGA使用很深。
二:AMD 的 ACAP
ADM几年前推出的ACAP,往往被认为是用来应对 AI 浪潮的,我们来看看它到底是如何策略的。
Adapt Compute Accerlate Platform
Adapt:可适应的,可适配的。
Compute:仍然立足于运算。
Accerlerate:主要用途是数据加速。
Platform:提供的是一个平台,可以理解是面向一个工程的整体解决方案,而非局部。
从字面上理解,除了数据加速,并看不出和AI有什么直接关系。
仔细看一下ACAP的结构,可以看出点内容:
1:芯片固化了一组 AI Engine(实际后续还出了一款 AI Engine ML )。内置RISC处理器,一个向量处理器。可以进行SIMD的定点和浮点并行计算。配有分布式内存和组存,每个AI Block之间可以DMA方式共享内存。这妥妥的就是GPU的做法。可以理解为一个为了做AI运算的ASIC芯片,类似Goole的GPU。(当然,也有说法,一开始并不是专为AI设计的)
2:提供了片上网络(NoC),提供高速的数据传输能力。将数据传输与运算做了分离。其实这很重要,因为很多运算速度并不是单由算力决定还有数据传送能力。
3:FPGA中的CLB架构变化,单个CLB中 LUT数量变大。还有一些其它变化,这会提升性能(减少走线),好像和AI没啥关系。
4:如此复杂的芯片结构,采用了SSI技术(堆叠)来完成加工生产。
5:推出Vitis开发工具链,其中包括了收购的深鉴公司的 DNNDK(包含了模型的深度压缩,量化,剪枝功能)。并内置了一些深度模型,但据可靠人士反馈,真实可用的,很少。我曾经想用VCK5000的卡部署 Llamma的vicume模型,但发现根本就不支持。
三:AI模型的近似处理
对于AI模型(深度学习模型)推理的影响因素,最容易想到的是算力(计算复杂度),性能(推理准确度),存储(模型的大小)。
但做为一个项目,除了上面三个因素外,还有一些其它方面需要考虑:实时性(吞吐最),功耗(耗电,发热降温),成本...... 因为推理的场景会很多,比如:数据中心,基站,自动驾驶,摄像头......
近似处理可以在几乎不损失精度的情况下,减少计算复杂度,存储量。近似处理的方法很明确,我之前文章也提到了。量化,剪枝,深度压缩。为什么提到这几种处理?因为这些处理实际上适合FPGA和ASIC(goole的TPU,华为的昇腾)的,是将模型部署的关键。
3.1:低精度定点代替浮点
这里不再细述,简单说就是将模型中的权重的激活函数输出进行精度降低(具体的方法,我之前有一篇文章有提到)。可参见:深度学习的量化和剪枝_深度学习中的剪枝-CSDN博客
另外,FPGA中的DSP有较多的不同精度运算的支持,使得FPGA相比ASIC和GPU有更灵活的优势。
3.2:网络剪枝
去掉网络结构中多余的神经元或者连接。深鉴科技就是凭借相关的论文,成功将自已卖给了Xilinx。
注意:剪枝往往会将密集型网络转换成稀疏网络。这刚好也是FPGA合适的(不合适GPU)。
3.3:深度压缩
其实,这并不是一种单独技术,是多种处理的集成。一般分为三个步骤:
1:迭代剪枝,去掉低权重网络分支。
2:权值量化和共享。共用相同权重(保持索引),保存时减少了位宽。
3:采用霍夫曼编码,对非均匀的权重进行进一步无损压缩。
深度压缩主要是降低了模型大小,减少内存使用。尽量少使用片外内存,提升性能。
四:FPGA大厂的AI尝试
好了,我们来看看领先的FPGA厂商都做了一些什么。
4.1:在FPGA 中 提供 DPU IP
使用逻辑单元来完成 AI 运算,当然,更多情况使用的是DSP + RAM + 外部DDR。但这些会封装成一个IP 给到用户使用。
典型应用就是Xilinx vivado 提供的 DPU IP。
4.2:添加芯片与FPGA异构集成
使用SSI,EMIB等方式将其它ASiC芯片与FPGA进行集成(合封)。异构系统可以将FPGA和ASIC 芯片的优势进行互补。工具也使用ASIC芯片自带的生态。
比如:Xilinx 的 AIE 就是一颗ASIC 芯片。
4.3:开发语言
直接使用RTL的开发语言,易用性太差。于是:
OpenCL:FPGA的高层次开发语言。这是跨平台的高层次开发语言,Intel , Xilinx都支持
OpenVINO:Intel 发布的深度学习开发套件。它与Intel其它平台兼容。
4.4:提升可变精度的DSP
Intel 的FPGA 提供可变精度的DSP,可以接受多种量化模型,提升运算速度。
五:FPGA部署AI模型的实验
并不能拿到国内比较好的ASIC的AI芯片(或者NPU),我们就拿 华为海思的 Hi3559AV 200 和SS927,Google端侧的TPU,以及RK的芯片为例 ,做一下比较。
我们从 能效比,成本,生态几方面来比较:
5.1 FPGA 的优势?
RK:
CPU | NPU | MIPI | ISP | PCIe | |
---|---|---|---|---|---|
RK3566 | 4核A55 | 1 TOPS @ INT8 | 2.5G * 4 | 8M | Gen2*1 |
RK3588 | 4核 A55 4枋 A76 | 6 T | 2.5G * 4 | 16M | Gen3*4 |
TPU / Coral:
4 TOPS @ INT8,价格:20美金 功耗:2W
Hi3559 AV 200 / SS927:
2.5 Tops 价格:百元人民币
AMD/Xilinx:
从上面的数据对比,可以看出:一地鸡毛啊
从算力,功耗,成本上看,FPGA 都完全不占优势。相同算力,FPGA需要10倍的成本,汗。
从生态上看,GPU > NPU(ASIC) > FPGA ,因为拿最有名的 AMD的 Vitis AI 来看,基本没有什么成功的项目,因此极少有人使用(Model zoonm里面的模型也非常少),基本没有生态。
据Xilinx内部人说:AIE设计之初就不是针对AI的,而是针对ME(通讯相关的信号处理),类似DSP的PipeLine计算,所以,在后续往AI上转时,硬件架构支撑本身就不好,对神经网络这种多层运算支持不好,因为需要不停的从DDR取缓存的数据,这会导致AIE效率不高。后续新增了一个 ML 版本(添加了运算枋间的片上内存),但是,到了 AMD时代,公司的重点转到 CPU,基本把FPGA的 AIE 给完全取消了(在中国地区的ACAP 的 AI 支持团队全部裁了)。
所以,简单分析,可得出结论,单从技术指标上看,FPGA在AI领域没什么优势 。
5.2:FPGA AI + 解决方案
什么AI+,这只是蹭个名词,大概意思就是,FPGA不要作为AI的主芯片,只是在AI项目中在合适的时候参与,比如:需要实时的场景,在成本允许的情况下,卸载掉部分AI 功能,达成特殊需求或提速。
如何理解上面的AI+ 方案?
1:使用FPGA(DSP)来完成AI推理。软核
软IP,提供灵活通用的算子,或者定制算子,在FPGA中部署 CNN,LSTM,Transformer等AI 深度学习模型。
DSP因为支持多种精度运算(FP32,FP16,INT16,INT8),所以,对于量化后的模型有一定的优势。整体算力可以从 0.3 ------ 50 TOP要@ INT8(2KK的FPGA芯片)
2:在需要直接与多种接口取数,且需要快速推理时,使用FPGA
丰富的硬件可编程SIO,UIO,GT,支持PCIe,MIPI,以太网,LVDS等接口接入。
利用FPGA的接口多,速度快,吞吐量大的优势。为AI推理提供数据通路。
如:直接从感应器获取数据,通过FPGA丰富,高速的接口,直接获取数据,进行推理。
3:需要实时性高,需要ns级的数据预处理和后处理,完成系统同步。
这种场景,如果要做简单的AI运算,可以使用FPGA来完成,充分利用 可编程逻辑和片上存储。
同步处理:高精度时钟级并行处理,完成数据预处理以及时间同步,为AI推理降低部分运算负载。见 下5。
4:注意,和微软的方案不同,片上存储一般无法完成AI的运算所需,一定需要借助DDR。需要有DDR接口和外置DDR。
5:处理完成后,可以再交给 重度的AI推理给到 SoC(NPU),继续处理。
6:应用领域:工业自动化,医疗,电力,汽车,音视频处理,高性能计算......
5.3:一些不确切的消息
除了GPU厂商,国内还有一些同行在致力于专用的 AI 芯片。
公司H :某国内知名企业,实际上已经生产了较较强算力的 AISC (AI推理)芯片,可以达到20T以上的算力(并不是上文提及的芯片),因为此类芯片不做单芯片销售,只支持模组(板卡)集成,国内特种行业有很多在使用。该司的AI开发生态勉强可用,还行,国内仅次于Cuda。
公司F:某低调FPGA企业,已经自研了 专用AI芯片多年(5-6年了吧),现在已经可以生产出 20 T以上算力的芯片,而且因为自研,可以将该芯片做为硬IP植入自有FPGA。相对已经比较成熟,一些特种行业已经在使用。因为完全不公开,基本没有民用。工具链没见过,据说可用,但肯定没什么生态了。
公司R:某MCU,SoC厂商,最新的SoC,内置的NPU,差不多有6T算力,能满足不少应用。但可理解为集成产品,自研能力一般。很多特种行业并不敢使用。但目前用户较多,有简单的工具链,基本可用。
六:思考
FPGA的设计局限,懂的都懂,它设计之初就是为了做ASIC原型验证的。然后用于一些数据预处理,图像视频处理,协议转换等场景,主打一个快周期,运算快,可编程。和AI运算需要的并行运算并非一条路子。
另外,在量大情况下,FPGA的成本高于ASIC,如果应用于一个用量非常大的场景(百万),加上性能肯定略低于ASIC,一定是不合适的,FPGA的终点是ASIC。
对于,深度学习模型推理,这是一个相对固定,用量极大的场景,并不适合使用FPGA来完成。对于上面提到的FPGA AI +的方案,如果有办法将两颗芯片合封到一起,或者通过一个协议异构配合,也是可以替代 AI+方案的。(AI+方案注定规模小,无生态,属于定制项目型)
所以,我认为 Xilinx 的技术方案本身是没有问题的 ,目前没做起来,原因是没有将AIE当做一个独立的芯片来打造(投入太少),因为AIE 应该是要和NVIDA竟争的,除了硬件,还需要打造大的生态,AMD肯定考虑过,暂时没有这种人力,也就直接放弃了。
能否找 Google类拟的企业合作呢?问题是Google太大了,不会理你。如果有类似已有生态的企业,我相信AMD一定是直接并购。但实际上,四下一看,并没有,不存在。
对于国内的FPGA厂商,如果要进入AI赛道,也只能是通过合作的方式(除非自已有人,有钱,再开一条赛道 ),比如找到上面的H公司,F公司合作。当然,AI开发生态是关键,这往往也是合作的障碍,有生态的看不起你,没生态的,你看不起人家。但它是能否做成的关键。就好像现在没有人再去做PC 操作系统一样。
可见的Cuda这座大山就在那里,很难跨越的,如果只针对某些特种行业,因为**之类的原因,强行被推,还是有可能。
这个问题还是困扰我很久了,本文也算是给自已的疑问一个交待。