
AI加速器选型这件事说简单也简单说复杂也复杂。简单在于你只要知道自己要跑什么模型、预算多少、团队熟悉哪套工具链答案基本就浮出水面了。复杂在于市面上关于GPU、TPU、NPU、FPGA、DPU的资料要么过于学术化满篇都是峰值算力、TOPS、能效比这些参数要么过于厂商导向看完之后你只知道某家产品好却不知道它为什么好、在什么场景下好、换一个场景还灵不灵。我自己在多个项目里做过推理部署和训练加速的选型踩过不少坑也积累了一些不太会在官方文档里写出来的经验。这篇文章不打算给你一个“万能选型表”而是想从计算范式这个根子上把这几类硬件的本质差异讲清楚让你在面对具体项目时能自己推导出该选什么。1. 为什么“算力参数”几乎从来不是选型的决定因素1.1 峰值算力和实际吞吐之间的鸿沟几乎每个刚接触加速器选型的人第一反应都是去看TOPS或者TFLOPS。这个思路不能说错但它的问题在于峰值算力是在极其理想的条件下测出来的——数据已经在片上、没有访存瓶颈、算子形状完美对齐、散热和功耗都不受限。真实项目里这些条件一个都满足不了。我做过一个对比测试同一批ResNet-50推理任务在一块标称算力很高的GPU和一块算力只有它一半的NPU上跑结果NPU的端到端吞吐反而高出不少。原因很简单这个模型的算子结构恰好和NPU的硬件流水线高度匹配数据搬运的开销被压到了最低。而GPU那边虽然算力富余但kernel启动开销和显存带宽成了瓶颈。所以选型的第一原则是先看你的模型算子特征再看硬件的计算范式是否匹配最后才看算力数字。算力数字只在同架构、同代际的产品之间比较才有意义。1.2 计算范式才是分水岭所谓计算范式我把它拆成三个维度来看并行粒度是细粒度数据并行如GPU的SIMT还是粗粒度张量操作如TPU的脉动阵列还是事件驱动的稀疏计算如FPGA的可编程逻辑。存储层次片上缓存多大、带宽多少、片外访存延迟如何。这一项往往比算力更能决定实际性能。编程模型是通用编程CUDA、OpenCL还是图编译XLA、TVM还是硬件描述语言Verilog/VHDL。编程模型直接决定了你的团队能不能驾驭它。这三者组合起来就形成了不同加速器的“性格”。GPU像一把瑞士军刀什么都能干但干什么都不是最优TPU像一条专用产线一旦产品对路效率极高但换产品就要重新调线NPU更像嵌入式专用芯片针对特定算子族做了硬化功耗和成本控制得好但灵活性有限FPGA则是一块可重塑的“数字黏土”你可以把它捏成任何形状但捏的过程很费功夫。1.3 一个真实的选型翻车案例前年我参与过一个边缘侧视频分析项目初期选型时团队里有人力推某款高端GPU理由是“算力充足、生态成熟、以后扩展方便”。听起来很有道理但我们忽略了一个关键约束设备是装在户外机柜里的供电只有PoE散热靠自然对流。那块GPU的TDP直接超出了整个机柜的供电预算。后来换成了NPU方案算力只有原来的三分之一但功耗降到了十分之一而且模型经过量化后精度损失在可接受范围内。这个教训让我明白选型不是选最强的而是选约束条件下最合适的。约束条件包括功耗、散热、成本、团队技能栈、供应链稳定性甚至包括你能不能买到货。2. GPU通用并行计算的“默认选项”及其隐性成本2.1 GPU的计算范式本质GPU的核心设计思想是“用大量简单的计算单元掩盖访存延迟”。它有成百上千个流处理器每个都能独立执行指令通过超高的线程级并行来填满流水线。这种架构对规则的大规模矩阵运算非常友好因为矩阵乘加可以拆成大量独立的乘累加操作正好喂饱这些流处理器。但GPU的“通用性”是有代价的。它的指令调度、寄存器分配、缓存管理都是硬件自动完成的这带来了灵活性也带来了开销。比如一个简单的element-wise加法在GPU上需要启动一个kernel经历驱动层调度、网格划分、线程块分配等一系列步骤这些固定开销在小算子场景下会非常明显。2.2 什么场景下GPU是首选根据我的经验以下几类场景GPU几乎是默认选择训练任务尤其是大模型训练GPU的生态成熟度无可替代。PyTorch、TensorFlow对GPU的支持最完善各种分布式训练框架、混合精度训练、梯度检查点等技术都是围绕GPU设计的。算子种类多且变化频繁的研究型项目今天跑Transformer明天试Mamba后天搞扩散模型GPU的通用性让你不用为每个新算子重新设计硬件。需要快速迭代和调试的场景CUDA的调试工具链Nsight、compute-sanitizer非常成熟遇到问题容易定位。2.3 GPU选型中容易被忽略的坑显存带宽比显存容量更关键。很多人选GPU只看显存多大但实际推理和训练中带宽往往先成为瓶颈。特别是batch size较大时权重和激活值的搬运量急剧上升带宽不足会导致算力利用率大幅下降。多卡互联方式决定扩展效率。NVLink和PCIe的带宽差距是数量级的。如果你打算做多卡训练务必确认卡间互联是NVLink还是PCIe。我见过一个项目买了8卡服务器但没注意互联方式结果多卡训练效率只有单卡的3倍不到远低于预期。驱动和框架版本的兼容性是个雷区。CUDA版本、驱动版本、PyTorch版本三者之间有严格的对应关系。升级其中一个而不管另外两个轻则报错重则训练结果异常。建议在项目开始时就锁定一套经过验证的版本组合不要轻易动。实操建议在采购GPU服务器之前先用目标框架的官方Docker镜像做一次完整的训练和推理验证确认版本兼容性和性能表现再决定采购配置。3. TPU为张量计算而生的“专用产线”3.1 脉动阵列与数据复用TPU最核心的设计是脉动阵列Systolic Array。你可以把它想象成一条工厂流水线数据从一端流入在流经每个计算单元时完成乘累加结果从另一端流出。这种设计的关键优势是数据复用率高——权重可以在阵列中停留不需要反复从内存读取。这种架构对矩阵乘法极其高效因为矩阵乘法的本质就是大量的乘累加操作而且权重矩阵可以在阵列中复用。但它的局限性也很明显如果算子不是标准的矩阵乘法比如包含大量分支、循环或非规则访存脉动阵列的效率会急剧下降。3.2 TPU的编程模型与使用门槛TPU不直接暴露硬件细节而是通过XLA编译器将高层框架的计算图编译成TPU指令。这意味着你不能像写CUDA那样精细控制硬件但好处是编译器会自动做算子融合、内存分配和流水线调度。使用TPU的最大门槛在于你的模型必须能被XLA良好地编译。动态形状、控制流复杂的模型在TPU上往往会遇到编译失败或性能骤降的问题。我试过把一个包含大量动态分支的检测模型移植到TPU上结果编译时间超过半小时而且推理延迟比GPU还高。后来把动态部分改成静态图才有所改善。3.3 TPU适合什么样的团队TPU最适合的场景是模型结构相对固定、以标准矩阵运算为主、团队有较强的编译器和系统调优能力。如果你的团队习惯了PyTorch的动态图调试方式切换到TPU需要一定的适应期。另外TPU通常以云服务形式提供对于需要本地部署的场景不太友好。4. NPU边缘与端侧的“能效优先”选择4.1 NPU的设计哲学NPU的设计目标非常明确在有限的功耗和面积预算下高效执行神经网络推理。它通常针对常见的算子卷积、池化、激活、全连接做了硬件硬化同时支持INT8甚至INT4量化以进一步降低功耗和提升吞吐。和GPU的“大而全”不同NPU是“小而专”。它的计算单元数量远少于GPU但每个单元的效率更高因为不需要处理通用计算的复杂性。这种设计让NPU在边缘设备上非常有竞争力——同样跑一个目标检测模型NPU的功耗可能只有GPU的十分之一。4.2 量化是NPU发挥性能的前提NPU的算力优势很大程度上建立在低精度量化之上。如果你把FP32模型直接丢给NPU性能往往惨不忍睹因为硬件就是为INT8设计的。所以使用NPU的第一步通常是做量化感知训练QAT或训练后量化PTQ。这里有个坑量化不是简单的精度截断而是需要校准的。PTQ需要一批代表性数据来统计激活值的分布确定量化参数。如果校准数据分布和实际推理数据差异大精度损失会很明显。我建议在校准阶段至少用几百张覆盖各种场景的样本并且对比量化前后的精度指标。4.3 NPU生态的碎片化问题NPU最大的痛点是生态碎片化。不同厂商的NPU有不同的工具链、不同的算子支持列表、不同的量化方案。你为某款NPU写的模型转换脚本换一款NPU可能完全不能用。这导致迁移成本很高。我的应对策略是在模型设计阶段就尽量使用NPU友好的算子避免冷门操作同时保留一份ONNX格式的中间表示方便在不同NPU之间切换。另外选型时要重点考察厂商的工具链成熟度和社区活跃度这比纸面算力重要得多。5. FPGA与DPU可编程性与数据搬运的另类解法5.1 FPGA的计算范式空间换时间FPGA和前面几类加速器的根本区别在于它不是按时间顺序执行指令而是通过配置逻辑单元和连线在空间上“搭建”出一个专用电路。这意味着你可以为每个特定任务设计最优的数据通路没有指令开销没有冗余计算。这种范式的优势在特定场景下非常突出超低延迟、确定性时序、极低功耗。比如在高频交易、实时信号处理、工业控制等领域FPGA往往是唯一能满足延迟要求的方案。但代价也很明显开发周期长、门槛高、调试困难。写Verilog/VHDL和写Python完全是两种思维方式。而且FPGA的资源有限复杂的神经网络往往放不下需要做大量的裁剪和近似。5.2 FPGA在AI加速中的实际定位坦率地说FPGA在通用AI加速领域并不是主流选择。它的优势场景是算法固定、批量小、延迟敏感、功耗受限。比如某些雷达信号处理、医疗影像前端预处理、工业质检等。这些场景的共同特点是不需要跑大模型但对实时性和确定性要求极高。如果你考虑用FPGA做AI加速我建议先问自己三个问题算法会不会频繁变化团队有没有硬件工程师延迟要求是否真的无法用其他方案满足如果三个答案都是“是”再考虑FPGA。5.3 DPU被低估的数据搬运专家DPU数据处理单元的定位和前面几类加速器不同它主要解决的是数据中心内部的“数据搬运”问题。在分布式训练和推理中大量的时间花在网络通信、数据压缩、加密解密上这些任务占用CPU资源却不产生直接计算价值。DPU把这些任务卸载过来让CPU和GPU专注于计算。在AI集群中DPU的价值体现在降低网络延迟、提升存储访问效率、释放CPU算力。如果你的项目涉及大规模分布式训练或高并发推理服务DPU值得纳入考虑。但它不是计算加速器不要指望它提升模型推理速度。6. 从项目约束反推选型一套可复用的决策流程6.1 先明确约束条件选型的第一步不是看硬件参数而是列约束。我通常会把约束分成四类约束类型具体问题影响性能约束延迟上限、吞吐下限、精度要求决定算力需求和精度方案功耗约束供电能力、散热条件排除高TDP方案成本约束硬件采购、部署运维、人力投入决定性价比边界团队约束技能栈、开发周期、维护能力决定技术可行性把这四类约束列清楚之后可选范围通常就缩小了一大半。6.2 再匹配计算范式约束明确后根据模型的计算特征匹配范式模型以标准矩阵运算为主且需要训练优先GPU。模型结构固定推理为主追求极致能效考虑NPU或TPU。延迟极敏感算法固定批量小评估FPGA。分布式场景通信开销大考虑DPU卸载。6.3 最后做小规模验证任何选型决策在正式投入之前都应该做小规模验证。验证的目标不是跑分而是确认三件事模型能否顺利部署、实际性能是否满足约束、团队能否驾驭工具链。我见过太多项目在POC阶段表现良好但规模化部署时因为工具链问题或运维复杂度而翻车。经验之谈POC阶段一定要用真实数据和真实负载不要用玩具数据集。很多性能问题只有在真实数据分布下才会暴露。7. 几个常见选型误区的拆解7.1 “算力越高越好”这是最普遍的误区。高算力意味着高功耗、高成本、高散热需求。如果你的任务本身是访存密集型而非计算密集型高算力根本发挥不出来。选型时要看的是“有效算力”即在实际任务中能利用上的算力比例。7.2 “生态成熟就万事大吉”生态成熟确实能降低开发成本但也意味着竞争激烈、差异化困难。有时候选择一个生态相对小众但更匹配任务的硬件反而能获得更好的性价比。关键是要评估迁移成本和长期维护成本。7.3 “一步到位选最强的”硬件迭代很快今天的最强配置两年后可能就落后了。与其追求一步到位不如选择可扩展性好的方案预留升级空间。比如选择支持多卡扩展的服务器平台或者选择支持模型热更新的推理框架。7.4 “忽略供应链和长期支持”这一点在近年尤其重要。选型时要考虑芯片供应是否稳定厂商是否提供长期驱动更新社区是否有活跃的开发者生态我遇到过项目上线后厂商停止维护工具链的情况被迫整体迁移代价极大。8. 写在最后选型是权衡不是考试做了这么多项目我越来越觉得加速器选型没有标准答案。同一个任务在不同的约束条件下最优解可能完全不同。重要的是理解每类硬件的计算范式本质知道它们的优势和边界在哪里然后根据自己项目的实际约束去做权衡。如果你只能记住一句话我希望是先看约束再看范式最后看参数。参数是结果不是原因。理解了计算范式你就能透过参数看到硬件的真实能力边界做出真正适合自己的选择。另外不要害怕试错。小规模验证的成本远低于大规模翻车的代价。多花两周做POC可能省下几个月的返工时间。这个账怎么算都划算。