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芯片,类似Google的TPU。(当然,也有说法,一开始并不是专为AI设计的,我后面会说)
2:提供了片上网络(NoC),提供高速的数据传输能力。将数据传输与运算做了分离。其实这很重要,因为运算速度并不是单由算力决定,还有数据传输能力和速度。
3:FPGA中的CLB架构变化,单个CLB中 LUT数量变大。还有一些其它变化,这可以提升运算性能(减少芯片后端实现时的走线压力),但好像和AI没啥关系。
4:如此复杂的芯片结构,采用了SSI技术(堆叠)来完成加工生产。
5:推出Vitis开发工具链,其中包括了收购的深鉴公司的 DNNDK(包含了模型的深度压缩,量化,剪枝功能)。并内置了一些深度模型,但据可靠人士反馈,真实可用的,很少(官方model zoom中的可用模型不多,也不包括transformer,并且更多要使用ML版本)。
我们曾经想用VCK5000的卡部署 Llamma的vicume模型,但发现根本就不支持。
所以,综上所述,ACAP 对于AI 有野心,但没有啥效果。我最近一次去参加了AMD线下的技术大会,会上对于AIE的介绍,基本上都用用来解决DSP的问题。基本上是基于Vitis的API编程,而不是AI编程。
三:AI模型需要近似处理
对于AI模型(深度学习模型)推理的影响因素,最容易想到的是算力(计算复杂度),性能(推理准确度),存储(模型的大小)。不加处理,直接拿来用,基本上是不可能的。
做为一个实际的项目/产品,除了上面三个因素外,还有一些其它方面需要考虑:实时性(吞吐最),功耗(耗电,发热降温),成本…… 因为推理的场景会很多,比如:数据中心,基站,自动驾驶,摄像头……
我们把对AI模型的处理称为近似处理,它可以在几乎不损失精度的情况下,减少计算复杂度,存储量。近似处理的方法很明确,我之前文章也提到了。量化,剪枝,深度压缩。
为什么要提这几种处理?因为这些处理实际上适合 FPGA 和 ASIC(Google的TPU,华为的昇腾,RK的SOC(NPU)),它实际上是将AI模型部署到特定硬件的关键。
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场景,在成本允许的情况下,不仅可以用FPGA解决数据预处理,还可以进一步用FPGA 卸载掉部分 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:应用领域:工业自动化,医疗,电力,汽车,音视频处理,高性能计算……
以上的方案,有一些牵强,受限于应用场景,应该并不能广泛应用。我们理解为一种软核IP的应用方案。完全使用FPGA来完成部分AI推理的功能。缺点很明显,成本(开发成本和实际芯片的成本)。
5.3:行业的发展
除了大力发展 GPU,国内也还有一些同行在致力于专用的 AI 芯片以及与FPGA的整合。
公司H :某国内知名企业,实际上已经生产了较强算力的 AISC (AI推理)芯片,可以达到20T以上的算力(并不是上文提及的芯片),此芯片资料很少,并不作为单芯片销售,只支持模组(板卡)集成芯片,国内一些特种行业有很多在使用。因该该司有不错的AI开发生态,可以说,是国内最有潜力的AI芯片大厂。
公司F:某低调 FPGA 企业,已经自研了 专用AI芯片多年(5 - 6年了吧),现在已经可以生产出 20 T以上算力的芯片,而且因为该公司有FPGA,已经将该芯片做为硬核 IP 植入自有最新的某款FPGA(功能自带,根据用户是否选择而开启)。相对已经比较成熟,一些特种行业已经在使用。因为完全不公开,没有大规模使用,工具链无法评判,只是据说是可用的。自然谈不上什么生态,作为特种行业的应用,基本已经足够,也具有很强的领先优势。
公司R:某 多年 MCU,SoC厂商,最新的SoC内置了 NPU,差不多有6T算力,能满足不少应用(包括小型的大模型)。但是可理解为集成产品,因为该司芯片自研能力一般。一些有高要求的特种行业并不敢使用。但目前用户较多,成本很低,加上有简单的工具链可用,也是一支潜力股。之前我参加过它们的生态大会,差不多有5000人参加,生态链还是相当不错的。
六:思考
FPGA的设计局限,懂的都懂,它设计之初就是为了做ASIC原型验证的。然后用于一些数据预处理,图像视频处理,协议转换等场景,主打一个快周期,运算快,可编程。和AI运算需要的并行运算并非一条路子。
另外,在量大情况下,FPGA的成本高于ASIC,如果应用于一个用量非常大的场景(百万),加上性能肯定略低于ASIC,一定是不合适的,FPGA的终点是ASIC。
对于,深度学习模型推理,这是一个相对固定,用量极大的场景,并不适合使用FPGA来完成。对于上面提到的FPGA AI +的方案,如果有办法将两颗芯片合封到一起,或者通过一个协议异构配合,也是可以替代 AI+方案的。(AI+方案注定规模小,无生态,属于定制项目型)
所以,我认为 Xilinx 的技术方案本身是没有问题的,目前没做起来,原因是没有将AIE当做一个独立的芯片来打造(投入太少),但野心太大,想与GPU(NVIDA)分庭抗礼。AIE 的定位是正确的,但是投入是不够的,它只是一个附庸。因为对于GPU/CPU,除了硬件,更重要的是还需要打造强大的生态,AMD肯定考虑过,所以有Vitis AI 这个产品,但是,骨子里的基因,并不具备这个能力,所以,只开了一个头。话说回来,NVIDA能够成功,也是有偶然因素的,因为GPU最早还是定位于显示,因为有了比特币,积累了一把财富,等到了AI的爆发。而老黄对于CUDA平台的建立,是非常超前的,提前做了很大的布局和投入。各种机缘巧合,加上天才的黄教主,才形成了NVIDA的强大的壁垒。
Xilinx的策略,是让资方相信,它可以进入AI领域这个更大的市场,于是,以一个非常不错的价格将自已打包卖给了AMD。AMD试图沿着Xilinx的想法,继续尝试,但花了一段时间去市场验证,结果很不好,基本没有落地的AI项目(竟争不过GPU,甚至NPU的解决方案),主要问题从表面上看是工具链存在问题,实际上还是一个生态的问题。于是, AMD很快放弃了 Xilinx原有的思路,将 AIE 引入 PC市场,看起来,已经暂时放弃了 FPGA + AIE 的组合(在中国的支持团队基本全部撤掉了)。当然,这也可能是因为AMD本身就有GPU的产品和市场,两者是有冲突的。但不管怎么说,实际情况就是,AMD撤掉了原来的VITIS AI的开发团队/售前团队,转向Ryzen AI (基于CPU的开发平台)。
既然自已做不到,能否找其它团队合作,买,买,买呢?很不幸,市场上并没有类似可以合作的企业, Google?太大了,人家不会理你。一些小的创业公司?没有生态,价值不大。
那国内的FPGA厂商应该如何做呢?放弃?或者采用喝一口汤的融合方案(打个下手)?
我的建议是:不能放弃,不要融合,寻求合作。
第一步:AI 模型训练
企业自身具有 AI 应用模型(主要是深度学习,神经网络模型的训练能力)的技术能力,这是根本,否则无法进行下面的步骤。至少有那么一两位资深人士。这是进入这个领域的前提。有了这样的人,才能能进入后面的步骤。不要小看这一点,这其实是很大难度的(因为人才跨领域的)。
第二步:软核IP
建立AI实验室,做一些预研的工作。预研的目标是完成2个目标。FPGA 的软IP(DPU)的简单尝试。注意,只是简单尝试,找到FPGA本身在AI运算上的特点,这个必须要掌所握,但是,这一定不是主要方向,但可以快速切入AI领域,用一两个外部项目,一方面打磨AI模型层的能力,而一方面的市场上形成可演示的产品。
软核IP的实现方法:
- 设计与实现:通过 HDL(如 Verilog 或 VHDL)设计一个定制的软 IP 核,利用 FPGA 内部的 DSP 单元、BRAM、逻辑单元等资源实现深度学习的推理。主要包括卷积、矩阵乘法、激活函数等操作的硬件加速器。
- 优化与调优:使用高层次综合(HLS)工具优化硬件架构,以实现更高效的运算单元布局。还可以通过流水线技术、并行计算等方法提高推理速度。
优点:
- 灵活性高:可以根据具体需求灵活配置和优化计算资源,适合多种神经网络结构和应用场景。
- 可定制化:软 IP 可以完全根据需求定制,适应性强,且能够在 FPGA 中进行快速迭代和升级。
- 节省成本:无需额外的硬件投入,仅依赖 FPGA 本身资源,适合小批量或快速开发。
缺点:
- 性能有限:相较于硬 IP 或专用芯片,软 IP 在计算密集型任务(如大规模深度学习推理)上的性能可能较弱,推理速度受 FPGA 资源限制。软核IP可以独立综合(固化在某个区域,提升性能和稳定设计),也可以和设计一起综合。
- 开发复杂度高:需要深入的 FPGA 开发经验和对深度学习算法的理解,开发周期较长。
第三步:硬核IP或合封AI芯片
建立AI实验室(如果有实力,可以和第二步并行),购买或自研 硬核 IP(实现深度学习模型的推理)。硬核IP一般需要在软件层面包装一个Macro IP。如果无法购买硬核IP,还可以找一款成熟的ASIC AI 芯片与FPGA合封,通过I/O进行调用。
硬核IP的实现方法:
- 硬 IP 集成:使用预先设计和验证好的 DPU(Deep Learning Processing Unit)硬 IP,如 Xilinx 的 DPU,可以直接在 FPGA 中集成该硬件加速单元,用于高效执行深度学习模型推理。
- 设计集成:通过设计工具(如 Vivado)将 DPU 硬 IP 集成到 FPGA 设计中,结合其他逻辑单元,实现完整的应用系统。
优点:
- 高性能:DPU 硬 IP 是为深度学习推理专门优化的硬件,加速效果显著,性能优于纯软 IP 实现。
- 开发难度低:由于 DPU 硬 IP 已经过优化和验证,开发者可以专注于系统集成和应用开发,减少了开发难度和时间。
- 兼容性强:通常支持多种深度学习框架(如 TensorFlow、Caffe),能够直接部署已有模型。
缺点:
- 灵活性受限:硬 IP 的配置较为固定,灵活性不如软 IP,难以针对特定应用进行深度定制。
- 成本较高:引入硬 IP 可能会增加开发成本,特别是在需要许可费或资源消耗较大的情况下。
合封实现方法:
- 芯片合封:将成熟的 ASIC AI 芯片(如 TPU、NPU)与 FPGA 芯片封装在一起,利用高速 IO 接口实现两者之间的数据通信与协同处理。
- 系统集成:通过设计专用的接口协议和数据路径,使 FPGA 控制系统能够高效地调用 AI 芯片进行深度学习推理任务。
优点:
- 最高性能:ASIC AI 芯片通常为特定任务高度优化,性能强大,适合高吞吐量、低延迟的深度学习推理应用。
- 工作负载分担:FPGA 负责系统控制与数据处理,AI 芯片专注于推理计算,两者协同工作可以充分发挥各自优势。
- 可扩展性:这种方案适合需要大规模部署的应用,可以根据需要选择不同的 AI 芯片,升级容易。
缺点:
- 成本最高:合封设计和生产成本高,同时需要处理复杂的集成和通信问题。
- 开发复杂度高:需要处理两种不同架构的协调工作,涉及高速 IO 设计、协议设计等复杂问题。
- 空间占用:合封可能增加整体芯片面积和功耗,尤其在资源受限的环境下可能受到限制。
第四步:完成集成的开发工具链
最终,还是要形成一个统一的自主产权的开发工具链。可能一部分是集成三方的。
所以,综上所述,FPGA要进入AI赛道,通过合作是必须的,但也要对相关的技术要有一定的掌控。不然,也没法定义合作的产品。
合作方,比如找到上面的H公司,F公司合作,等……
但是,AI开发生态是关键,这往往也是合作的障碍,有生态的看不起你,没生态的,你看不起人家。但它是能否做成的关键。就好像现在没有人再去做PC 操作系统一样。如果好的生态确实不存在,那就寻求一个更好的开发工具链了。
可见的 Cuda 这座大山就在那里,很难跨越,但如果只针对某一些行业和场景(FPGA有可替代性),只要AI模型的部署不要太困难,还是很有机会。
FPGA在AI领域的定位,这个问题困扰我很久了,本文算是给自已一个答复。