ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

AI加速器选型指南:GPU、TPU与NPU架构对比与实战

AI加速器选型指南:GPU、TPU与NPU架构对比与实战 今年第一波大模型推理服务优化做到一半我不得不面对一个老问题AI加速器到底怎么选。说老是因为从GPU、TPU到NPU这个名字已经被喊了好多年但真到了要下单、要规划算力、要把模型部署上线的节点绝大多数团队还是习惯性地把显卡当唯一答案。可现实是所有做AI加速的芯片本质上都在回答同一个问题你能不能把矩阵乘法和大量并行的数据搬运跑得更快、更省。这篇就是我对GPU、TPU、NPU三种架构的一次系统梳理给你一套不需要懂太多硬件细节也能照着做的选型思路适合正在给模型训练或者线上服务评估算力的算法工程师、平台架构师以及被老板逼着三个月内把推理成本降一半的人。1. 三种加速器的架构逻辑分歧通用并行、矩阵脉冲与低精度算子1.1 为什么会有三种加速器从工作负载结构说起所有AI加速器要解决的核心问题就一个计算密度。深度学习负载和传统软件最大的差异在于它绝大部分操作数是矩阵乘法和卷积而且可以接受一定范围内的精度损失。这给了芯片设计者一个偷懒的机会——我可以不做通用的复杂指令专门做矩阵乘激活函数搬运数据这几板斧做得又大又快又便宜。GPU、TPU、NPU恰好站在同一条路线的三个不同位置。GPU遵循的是大规模并行通用计算思路它内部有几千个最小计算单元每个都能执行相对通用的浮点运算配合调度器把成千上万的线程并发跑起来。这个设计的优势是适应面广无论你来的是矩阵乘、卷积、还是各种奇怪的自定义算子只要能把问题拆成并行子任务GPU都能吃下去。代价是控制逻辑和缓存占了大量芯片面积计算单元本身的占比并没有你想象的那么高。TPU走的是脉动阵列路线。整块芯片被设计成由大量小型计算单元组成的规则阵列数据像流水线一样在相邻单元间流动权重直接驻留在每个单元里不需要反复从内存加载。这样做的结果是矩阵乘法效率极其惊人同一块面积的芯片能塞进远多于GPU的计算单元。但它也有先天限制阵列的调度策略是固定的遇到矩阵乘以外的算子比如动态形状的注意力计算、复杂归约效率会断崖式下跌。NPU则把专用化推到了另一个极端。它通常只做INT8或INT16低精度整数运算数据宽度短、电路简单、功耗极低而且大量算子被固化成了专用引擎比如卷积引擎、全连接引擎、张量变换引擎。你可以把它理解成一口一个专项小灶单个任务做得又快又省电但换一道没见过的菜就抓瞎。1.2 用团队配置来打比方三支队伍的差别我经常给人打这样一个比方GPU是一个配备了多种岗位的成熟项目团队成员都能干事换个项目方向也有不少人能顶上TPU是一条单品种中央厨房流水线一旦菜谱定型出菜速度惊人但突然要加一道新菜整条线都要停工改模具NPU更像街边专卖店种类少但极致专精顾客排队只能买那几样但翻台率和每笔单子的利润都很好。这样一看三类加速器各自的能力圈就很清楚了GPU适合训练复杂的模型、研究性试验、算子千奇百怪的多框架混合负载。它用通用性换取了工程上的确定能跑。TPU适合规模化、形状稳定、以矩阵乘为主的大规模训练和推理任务。投入足够的改造时间后每瓦性能很可观但改造过程比较复杂。NPU适合推理链路已经稳定的低精度任务尤其是移动端、边缘设备和对功耗极度敏感的部署环境。1.3 另一个容易忽略的角度每瓦算力与每美元算力选型的本质是在两个约束之间找平衡墙上的电表额度和手里的预算额度。GPU通常拥有三种架构中最高的单芯片绝对性能但功耗和单价也最高TPU的绝对性能不低但往往以整机、整集群的形式交付对中小企业来说门槛偏高NPU的绝对性能看起来最小但单位瓦数和单位人民币能买到的有效识别速度通常最好所以端侧设备才会清一色选它。我在早期做选型时犯过一个错误只看单卡FLOPS数完全忽略功耗和算力利用率。后来有一段时间我把推理服务从GPU迁移到一个低功耗NPU加速卡上硬件成本砍了差不多一半但峰值算力的纸面数据只有原来GPU的几十分之一。结果实测之后图像分类服务的单并发时延反而快了因为小模型在小功耗的NPU上不需要等复杂的任务调度也没有巨大的显存带宽浪费。这件事给了我很深的一个印象——后文讲指标时我会再展开说峰值算力真的不是一切。2. 先把单位对齐再说从FLOPS到TOPS看懂算力指标的换算和陷阱2.1 FLOPS、TOPS、OPS到底是什么关系选型最容易翻车的地方是拿不同架构的数据直接比大小。GPU厂商喜欢标FP32或FP16的TFLOPSTPU厂商喜欢标BF16或INT8的混合精度算力NPU厂商则特别喜欢强调INT8、甚至INT4的TOPS。这三个单位看着像实际差了十万八千里。FLOPS是每秒浮点运算次数TOPS是每秒整数运算次数OPS则是两者混用的统称。换算的第一步是明确精度一次FP32运算如果要拆成INT8运算往往需要多次整数运算才能近似。所以理论上一块芯片标称100 TOPS的INT8算力大体可能相当于50 TFLOPS的FP16算力的一半甚至更低具体要看架构内是否有专门的浮点单元。我说一个更实际的换算方法你只看INT8 TOPS便宜不便宜纯属被营销数字牵着走。真正该问的是你跑的这个模型这100 TOPS里能用上多少。2.2 理论峰值之外的三个隐形指标选型表格里真正值得逐行对比的是下面三个一是内存带宽。深度学习不只是算得快还得把权重和中间结果及时搬进计算单元。假设你的模型有7亿参数FP16权重大约是1.4GB。每次走一遍前向推理理论上至少要读一遍这么多数据。如果你的加速器内存带宽只有100GB/s光读权重就要花14毫秒哪怕计算单元再闲也没用。带宽决定了很多模型的下限。二是片上缓存与数据复用能力。GPU和TPU都会尽量把数据分成块扔进片上缓存里反复使用避免频繁访问外面的内存。缓存越大、调度越积极实际拿到手的算力就越高。NPU通常缓存较小但因为它专攻低精度算子所需数据本身就少所以能用较小缓存达到不错效果。三是卡间互联带宽。大规模训练时梯度同步比前向计算还耗时间。如果加速器之间的互联带宽跟不上就会出现一千块卡跑不出三百块卡三倍性能的情况。2.3 用算术强度判断负载到底缺什么判断负载到底是算得慢还是搬得慢业界有个简单指标算术强度即一次数据搬运对应多少次计算。单位通常是FLOPS/Byte。比如某个矩阵乘数据量是2MB计算量是1GFLOPS那算术强度就是500FLOPS/Byte。芯片的硬件设计里有一条所谓平衡点曲线当你的负载算术强度低于这个点时性能被带宽卡死算力再高也没用高于这个点时才轮到计算单元说话。我建议你在选型前拿自己的模型做一个粗略口径测量。具体做法很粗暴跑一个batch前向用性能分析工具记录每秒实际读取的显存流量和实际FLOPS两者一除就是真实场景下的算术强度。把这个数和候选加速器的规格对比你很快会知道瓶颈在计算还是带宽。这个动作做上半小时胜过看十页产品宣传册。3. 分场景实测视角训练、推理和端侧分别该盯什么3.1 训练场景矩阵乘不是全部工程生态才是训练阶段选GPU仍然是综合负担最小的选择这话我敢说因为它的软件生态已经成熟到任何模型都有前人趟过坑的程度。但这不代表GPU在所有训练场景都是最优。如果你的任务是超大规模预训练矩阵乘的形状非常规整、权重形状稳定TPU脉动阵列的效率会明显优于同代GPU加速比可能达到1.5到2倍。代价是改造成本很高数据加载、优化器状态、混合精度策略都得照着它的调度习惯重写一遍。这里要特别提醒训练不只有GEMM通用矩阵乘。反向传播里的各种逐元素算子、Gather/Scatter、动态Mask、注意力计算这些在GPU上是顺手的事在TPU和NPU上可能需要拆解成多个子步骤。我见过某团队把一套BERT规模的模型从GPU迁移到TPU花了两周时间调性能最后发现瓶颈居然卡在LayerNorm算子上。原因很简单脉动阵列天生擅长规整运算遇到逐元素归约就得打折扣。如果你不是做超大规模预训练而是普通微调、小规模训练、频繁改模型结构现阶段最稳妥的还是GPU。好钢不能全用在刀刃上你的刀刃是快速试错和灵活调参不是每瓦特算力最大化。3.2 推理场景时延、吞吐、成本三个指标一块算推理场景和训练场景的最大区别是模型结构已经完全固定各种算子可以提前融合和量化。这时候NPU的优势才真正显现出来。推理服务有两条路线可走。一条是追求最低时延比如实时语音交互每一帧都要在几十毫秒内返回。NPU因为算子固化、任务调度轻量往往能提供更稳定的P99时延而GPU上的时延抖动反而更明显。另一条是追求最高吞吐比如离线批量图片处理你的目标是在限定电费内处理尽可能多的图片。这时候就得比单位功耗吞吐NPU的INT8算力和低功耗会显得格外诱人。我自己的经验是推理选型必须先定死两个数字可接受的P99时延和每千次推理的成本上限。把这两个数字写出来再去逐项对比候选设备基本不会跑偏。如果一项纸面算力指标比竞品高一倍但时延稳定性做不到它就不该进入第二轮筛选。3.3 端侧场景NPU上最典型的两个坑端侧部署是最典型、也最考验人的NPU应用场景。第一个坑是算子覆盖不全。你的模型可能95%的算子都被NPU支持了剩下5%的算子会退回CPU执行这一退回性能反而可能比全跑CPU还慢。因为数据要反复在CPU和NPU之间搬运搬运成本直接被放大。我见过一个手势识别Demo声称用了NPU加速实际只有30%的算子跑在NPU上推理时延比纯CPU还高。第二个坑是量化误差。NPU普遍只支持INT8或更低位宽权重和激活值的动态范围一旦掌握不好精度就会掉得很难看。很多团队在PC上用FP32模型跑出95%准确率一搬到NPU上直接掉到88%而且找不出原因。其实原因通常很朴素没有做校准集、量化范围选得太宽、某个敏感层没有保留浮点。常见对策是先做逐层敏感度分析把对量化敏感的层保留在CPU或更高精度单元上其余层再做INT8。4. 选型决策框架从负载推导需求而不是被架构名词带着走4.1 别让架构名词替你做决定很多选型讨论到最后都变成站队GPU派、TPU派、NPU派。但架构名词只是实现手段真正该做的是从工作负载往回推需求。我把这个方法总结成一个四象限分类法每次选型先给任务画坐标第一象限训练为主、模型频繁变动、算子多样。答案大概率是GPU。第二象限训练为主、模型结构高度稳定、矩阵乘绝对主导。可以认真评估TPU。第三象限推理为主、性能要求高、可以接受量化改造。考虑NPU。第四象限推理为主、但算子每天都在改或者要兼容多个框架。GPU或高规格NPU都行看成本。当然现实中会有很多混合态。我见过一类平台白天批量训练一个多模态模型晚上对生产流量做高并发推理。这种混合负载其实不适合单一架构硬扛GTX级别的通用卡做训练再加一块专用推理卡做线上流量可能比全部用顶级GPU方案更省钱也更快。4.2 一张可以直接抄的选型检查清单这里我把多年选型踩过的坑浓缩成一张清单每项都对应一个真实翻车场景。你可以直接照着逐条检查模型结构是否稳定到半年内不会大改是否有明确可测量的性能目标比如P99时延小于50毫秒是否有功耗约束比如整个边缘盒子只能给15瓦是否允许引入新的框架和算子手工适配团队里是否有人熟悉该加速器的调试工具链数据量是否大到需要卡间互联互联带宽是否已纳入评估是否有量化校准能力能否承受精度损失供应商是否提供持续驱动和编译栈升级而不是一锤子买卖每一条都打上通过或存疑如果某一行开始犹豫就值得先做那个负载的mini落地上板测试再决定买不买。4.3 混合部署与渐进式改造思路老实说绝大多数团队的算力规划都应该走渐进式改造而不是一次性全换。比较好的做法是把模型分成两类路径一类是探索型负载允许频繁改结构统一跑在GPU上保证迭代速度另一类是稳定型负载上线后结构固定再做迁移和优化。稳定型负载迁移到NPU或TPU后有时候能把单位请求成本压到原来的一半以下。我最近一次做图像质检项目就采用了这种混合思路白天训练模型阶段用GPU模型定稿后把线上推理的数据增强、卷积主干和分类头在NPU上跑INT8量化版本并把量化敏感的注意力分支留在CPU上。最终计算成本大约压低了40%而精度只掉了0.2个百分点。混合部署听上去不那么完美但生产环境本来就该以性价比和稳定为宇宙第一法则。5. 迁移落地的完整教训算子对齐、精度容忍与性能验证5.1 迁移前先做算子级风险清单一旦确定了要从GPU迁到TPU或NPU你第一件要做的不是装驱动而是生成一份算子级风险清单。我通常的做法是拿一份训练好的模型文件导出计算图之后逐层扫描把每个算子分类成三类完全映射、需要改写、不支持退回CPU。这一步纯粹是体力活但能提前暴露90%的坑。拿常见视觉模型举例常规卷积、BatchNorm、ReLU、Pooling这些在NPU上基本都有对应引擎而像可变形卷积、动态条件分支、复杂的topk和自定义Loss就很有可能是需要改写或者不支持的类型。把这些算子单独拎出来评估风险比直接整模型扔上去跑、然后对着报错日志猜半天要高效太多。5.2 精度对齐量化后的误差容忍怎么设精度对齐是迁移中最容易被低估的环节。很多人只盯着准确率看比如原来95分现在94.8分还行。但生产环境里的问题往往藏在极端样本里所以除了整体准确率还应该对比逐条输出的数值差异。我建议按照这样一个流程来做精度验证先在原框架用FP32把测试集推理结果保存下来作为基准再把同一批样本在新加速器上、按目标精度比如INT8跑一遍然后计算每条样本的输出差MAE把差得最离谱的5%挑出来分析。你可以设置容忍阈值比如分类任务允许95%条目的预测标签一致且MAE不超过某个绝对数。一旦出现系统性偏差优先找出是哪一层导致的把那层单独切到高精度或CPU上重跑。要是量化后精度掉得很厉害先别急着怀疑芯片大概率是校准集选得不对。校准集要覆盖真实部署时的数据分布而不能随便抽几百张训练集图片尤其不能全是易分类样本那样会把动态范围估窄。5.3 性能验证别只看总时延要看拆解和稳态性能测试最容易产生的错误判断是拿第一次跑出来的端到端时延就下结论。真实世界的加速器在冷启动时往往很慢跑几个batch后温度稳定、缓存命中上来了性能才会进入正常曲线。我的经验是至少先跑10次预热再用后50次的平均值作为代表同时记录P95和P99而不是只盯P50。除了总时延务必要拆开每一段算子的耗时。加速器自带的性能剖析工具通常能给出每个算子的平均执行时间和调用次数。你要做的是一眼找出耗时占比最大但又不在预期中的算子那些就是迁移不完整、数据搬运过度的症状。最常见的问题是有几个算子在CPU上回退执行导致CPU和加速器之间反复搬运数据时延直接在搬运中翻倍。5.4 我反复踩过、但你可以绕开的几个坑总结几个与具体品牌无关的通用教训。第一永远不要在迁移当天做重大发布至少留出一周做灰度验证和回滚准备。第二不要迷信算子全部支持的兼容性文档文档说支持和实测性能不崩是两件事。第三厂商给的样例代码可以直接跑但一定要拿自己的真实数据和真实batch shape再测一次因为很多性能数据是在最优情况下测出来的真实shape一旦不规则专用加速器性能波动非常大。第四保留一个GPU备用通道线上出问题时你能在30分钟内回切到稳定基线而不是干瞪眼等待厂商工单回复。回到开头说的话题。选型这件事本质是一场算力峰值、功耗预算、工程兼容性的三方谈判。GPU提供了通用性与确定性的安全网TPU在特定形状的大规模矩阵运算里做到了极致效率NPU则用低精度和专用化换来了极低功耗与单位成本。没有绝对最好的加速器只有最适合你当前负载阶段的那一款。按照我今天讲的这套逻辑先画负载类型再算算术强度然后跑性能验证最后做混合部署兜底你会比大多数只看参数表的人离真实答案近得多。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表