一句话定义:FPGA(Field-Programmable Gate Array,现场可编程门阵列)推理加速,就是把训练好的神经网络计算逻辑,用硬件描述语言“编译”成芯片内部的真实电路,让数据按模型需要的方式在芯片里流动,而不是像 CPU、GPU 那样一条条执行指令。
这个比方:把芯片比作生产车间。CPU(Graphics Processing Unit 之外的中央处理器)是一位什么都会的老师傅,但一次只能干一件事;GPU 是几千名只会加减乘除的实习生,场面壮观,但派活、收活、排队都要花时间;ASIC(Application-Specific Integrated Circuit,专用集成电路)是为某道工序定制的流水线,一旦刻好,效率最高,但改不了。FPGA 则是用乐高积木搭出来的流水线:今天生产 A 产品,就把它拼成 A 的样子;明天换成 B 产品,拆了重拼。芯片里那些“积木”是查找表(LUT)、触发器、DSP 运算单元和片上存储块(BRAM);把这些基本单元连成什么样,由配置文件决定,而配置文件随时可以重写。
它为什么省电:有三点。第一,位宽可以裁剪。模型经过量化后如果只需要 8 位甚至 4 位整数,电路就只搭 8 位加法器,不像 GPU 要按固定的宽位宽通路运行。第二,没有指令开销。没有取指、译码、缓存缺失带来的抖动,延迟是可预测的,这对实时控制类场景很关键。第三,数据流可以做成流水线。每一层的计算单元首尾相接,数据像在传送带上一样经过,不像 GPU 那样反复读写显存。
与相邻概念的区别:
| CPU | GPU | FPGA | ASIC | |
|---|---|---|---|---|
| 硬件可改 | 否 | 否 | 可反复重配 | 流片后固定 |
| 能效 | 低 | 中 | 较高 | 最高 |
| 开发周期 | 天 | 天到周 | 数月 | 以年计 |
| 适合 | 逻辑复杂、分支多 | 训练与大吞吐推理 | 低延迟、低功耗、中小批量 | 极大量、模型固化 |
什么时候值得为它重写一遍硬件逻辑:判断标准其实就三条。
一是模型稳定、但通用芯片的能耗或延迟始终差一口气。比如工业相机质检、车载感知、医疗影像前端设备,模型上线后几年不变,功耗和散热又有硬性限制。
二是延迟必须确定。金融行情、电机控制、雷达信号处理这类场景,怕的不是平均慢,而是偶尔抖一下;GPU 的调度和缓存抖动正好是企业用户最不想要的。
三是产量不大不小。产量太小,做 ASIC 的工程费摊不平;产量很大、模型又不再变,ASIC 单位成本更低。FPGA 站在中间的区间里。
反过来说,如果模型三个月一换、团队里没有懂 RTL(Register Transfer Level,寄存器传输级)或 HLS(High-Level Synthesis,高层次综合)的工程师、需求还在反复试错,那就先别考虑 FPGA:光是把 Python 里的一个算子写成时序收敛的硬件电路,就可能耗掉几个月。工具链生态也远不如 CUDA 成熟,很多问题得靠看波形图排查。
对从业者的意义:不需要会写 Verilog,但要知道这条路的成本和边界。当有人提出“我们的推理延迟必须压到毫秒级,而且不能有抖动”时,你应当能把 FPGA 放进选项清单,也能说清楚它会带来几个月的工程投入。对普通人来说,这块芯片多半藏在你看不见的设备里:它不训练模型,也不跑通用软件,只负责把某一个已经想清楚的计算,用最省的方式反复做下去。具体型号与工具支持情况,以厂商官方页面为准。
