1. AI芯片到底是什么,为什么突然成了焦点
如果你最近一年跟硬件圈、算法圈甚至投资圈的朋友聊过天,"AI芯片"这个词大概率是绕不开的。但很多人对这个概念的理解其实停留在"专门跑AI的芯片"这种模糊层面,真要问它跟普通CPU、GPU有什么区别,为什么英伟达能靠它冲到万亿市值,国产替代到底卡在哪一步,能说清楚的人并不多。我自己从2019年开始接触边缘推理硬件选型,后来陆续做过几套基于不同加速卡的推理集群方案,踩过的坑不算少,今天就把我对AI芯片这件事的观察和实操经验系统性地聊一聊。
先把定义说清楚。AI芯片并不是某一种特定的芯片架构,而是一类针对人工智能计算任务做了专门优化的处理器的统称。它的核心特征是在矩阵乘法、卷积运算、向量点积这类神经网络高频操作上,能提供远高于通用CPU的能效比和吞吐量。你可以把它理解成:CPU是瑞士军刀,什么都能干但都不算特别快;GPU是一把大砍刀,砍东西特别猛但干细活不行;而AI芯片更像是为特定工序定制的专用机床,只干一件事,但干得又快又省电。
这个类比其实还不够准确,因为AI芯片内部本身也分很多流派。按部署位置分,有云端训练/推理芯片和边缘端推理芯片;按架构分,有GPU、FPGA、ASIC、存算一体芯片、类脑芯片等等。每一类的适用场景、开发难度、成本结构都不一样。我见过不少团队一上来就说"我们要做AI芯片",结果连自己是做训练还是推理、面向云端还是终端都没想清楚,最后做出来的东西既打不过英伟达的通用性,又打不过专用ASIC的能效比,卡在中间非常尴尬。
所以这篇文章我打算从四个维度展开:第一是整体格局和架构流派,帮你建立判断框架;第二是核心技术细节和实操选型要点,这部分会有具体的参数对比和计算过程;第三是完整的落地流程,从需求分析到部署调优;第四是常见问题和排查经验。适合谁看?如果你是算法工程师想了解硬件选型,如果你是硬件工程师想了解AI负载特征,如果你是产品经理或技术管理者需要做技术决策,这篇内容应该都能给你一些直接可用的参考。
2. 当前AI芯片的整体格局与架构流派拆解
2.1 云端训练、云端推理、边缘推理三条赛道差异巨大
很多人把AI芯片当成一个统一市场来看,这是最大的认知误区。实际上云端训练、云端推理、边缘推理这三条赛道的技术需求几乎是正交的,用同一套逻辑去分析必然出错。
云端训练芯片的核心诉求是极致算力密度和高速互联。训练一个大模型,动辄需要几千张卡组成集群跑几周甚至几个月,这时候单卡算力、卡间带宽、显存容量和带宽、以及集群通信效率就是决定性因素。英伟达的H100、A100之所以统治这个市场,不只是因为单卡FP16算力高,更因为NVLink和InfiniBand这套互联体系让万卡集群的通信效率能做到接近线性扩展。国产芯片在这一块差距最明显,单卡算力可能追到70%到80%,但集群规模一上去,通信瓶颈和软件栈成熟度的问题就暴露了。
云端推理芯片的诉求完全不同。推理不需要反向传播,不需要存优化器状态,对显存容量的要求低很多,但对延迟、吞吐量和单位算力成本极其敏感。这个赛道里,除了英伟达的推理卡,还有大量ASIC方案,比如谷歌的TPU、亚马逊的Inferentia,国内也有不少创业公司在做。推理芯片的关键指标是"每美元能跑多少token"或者"每瓦能跑多少路视频分析",而不是单纯的峰值算力。
边缘推理芯片又是另一套逻辑。功耗通常被限制在几瓦到几十瓦,成本可能只有几美元到几十美元,工作环境可能是高温、震动、无稳定供电的工业现场。这时候算力绝对值不重要,重要的是能效比、接口丰富度、以及工具链的易用性。我做过一个智慧农业的项目,客户要求芯片能在户外60度环境下稳定跑YOLOv5s,功耗不超过5瓦,最后选型的时候发现很多标称算力很高的芯片根本过不了温度关。
下面这张表是我根据实际项目经验整理的对比,参数是典型量级,具体型号会有差异:
| 维度 | 云端训练 | 云端推理 | 边缘推理 |
|---|---|---|---|
| 典型功耗 | 300-700W | 75-300W | 2-30W |
| 精度需求 | FP16/BF16/FP8 | FP16/INT8 | INT8/INT4 |
| 显存容量 | 40-80GB | 8-32GB | 共享或1-8GB |
| 互联要求 | 极高(NVLink/IB) | 中等 | 极低 |
| 成本敏感度 | 低 | 中 | 极高 |
| 软件栈成熟度要求 | 极高 | 高 | 中 |
| 典型部署规模 | 百卡到万卡 | 单卡到百卡 | 单芯片到十芯片 |
2.2 GPU、FPGA、ASIC、存算一体四条技术路线怎么选
搞清楚赛道之后,下一个问题就是技术路线。这四条路线我都在项目里实际用过或者深度评估过,说说真实感受。
GPU路线目前是绝对主流,尤其是云端。它的优势是通用性强、软件生态成熟、开发门槛相对低。你用PyTorch写的模型,基本不用改代码就能跑在CUDA上。但GPU的能效比在推理场景下其实不算优秀,因为它有大量为图形渲染和通用计算保留的冗余电路。英伟达自己也意识到了这个问题,所以推出了专门砍掉图形部分的推理卡,但架构底子还在那里。
FPGA路线的特点是灵活性极高,你可以根据模型结构重新配置硬件逻辑,做到"模型即硬件"。但FPGA的开发周期长,需要硬件工程师写RTL或者用HLS,调试难度大,而且峰值算力通常不如同代GPU。我参与过一个金融风控的FPGA加速项目,延迟确实能做到比GPU低一个数量级,但开发投入的人力成本是GPU方案的3倍以上。所以FPGA适合那种对延迟极度敏感、模型结构稳定、且出货量不足以摊薄ASIC流片成本的场景。
ASIC路线是能效比的终极答案。谷歌TPU就是典型代表,针对Transformer做了大量定制优化,单位算力成本能做到GPU的几分之一。但ASIC的致命问题是"一次流片,终身绑定",模型结构一变,硬件就可能不适用了。而且流片成本极高,7nm工艺一次流片动辄几千万美元,没有足够大的出货量根本回不了本。国内很多AI芯片创业公司走的都是ASIC路线,但真正能量产并持续迭代的屈指可数。
存算一体路线是最近几年比较热的方向,核心思路是把计算单元和存储单元放在一起,消除数据搬运的功耗和延迟。传统冯诺依曼架构下,跑一个神经网络,大部分功耗其实花在数据在内存和计算单元之间来回搬运上,真正用于计算的功耗可能只占10%到20%。存算一体理论上能把能效比提升一到两个数量级,但目前工艺成熟度、精度、可编程性都还有明显短板,离大规模商用还有距离。
选型建议:如果你的模型结构还在快速迭代,优先选GPU;如果模型已经稳定且对延迟极度敏感,评估FPGA;如果出货量足够大且模型结构固定,考虑ASIC;存算一体目前建议保持关注,暂不作为主力方案。
2.3 国产AI芯片的真实处境与突破点
聊AI芯片不可能绕开国产替代这个话题。我过去三年接触过不下十家国产AI芯片公司的产品,有实际部署经验的也有五六家。客观地说,进步很大,但差距依然明显,而且差距不只在硬件本身。
硬件层面,单卡峰值算力其实追得比较快。一些国产训练卡标称的FP16算力已经能达到A100的70%到80%,推理卡在INT8下的能效比甚至在某些场景下反超。但问题在于,峰值算力只是纸面参数,实际有效算力取决于软件栈能把硬件利用率压榨到什么程度。英伟达的CUDA经过十几年迭代,算子库、编译器、通信库、 profiling工具一应俱全,一个新手也能比较容易地把模型跑到70%以上的硬件利用率。国产芯片的软件栈普遍年轻,算子覆盖不全,编译器优化不够,同样的模型可能只能跑到30%到40%的利用率,这就把硬件优势抵消掉了。
另一个容易被忽视的点是集群互联。训练大模型不是单卡的事,几千张卡要高效协同,对互联拓扑、通信协议、容错机制的要求极高。这方面国产方案和NVLink+InfiniBand的组合还有代差。我见过一个国产集群项目,单卡跑benchmark没问题,一上到512卡,有效算力利用率直接掉到40%以下,大部分时间花在等通信上。
但突破点也是有的。在特定垂直场景下,国产芯片反而有优势。比如安防视频分析,国产芯片对国内视频编码格式的支持更完整,对多路视频流的调度优化更贴合实际需求。再比如一些工业质检场景,模型结构简单且固定,国产ASIC的性价比优势就能体现出来。所以我的判断是,国产AI芯片不应该追求全面对标英伟达,而应该在细分场景里做到"够用且便宜",先活下来再谈超越。
3. 核心技术细节与实操选型要点
3.1 算力指标怎么看:TOPS、TFLOPS、有效算力三者区别
选AI芯片第一个要看的指标就是算力,但这里面的坑特别多。厂商标称的算力数字,和你能实际用到的算力,可能差好几倍。
TOPS是每秒万亿次整数运算,通常用于衡量INT8精度下的推理算力。TFLOPS是每秒万亿次浮点运算,用于衡量FP16、FP32等精度下的算力。这两个单位不能直接比较,因为精度不同,一次运算能完成的工作量不同。一般来说,INT8的算力数字会是FP16的2到4倍,但这不代表INT8就更快,因为量化本身会带来精度损失,有些模型量化后精度掉得厉害,根本不能用。
更关键的是有效算力这个概念。厂商标称的是理论峰值,实际能跑到多少,取决于内存带宽、算子效率、编译器优化、batch size等多个因素。我实测过一张标称256 TOPS INT8的推理卡,跑ResNet-50的时候实际利用率只有35%左右,跑BERT的时候因为注意力机制的特殊性,利用率能到55%。而另一张标称只有128 TOPS的卡,因为内存带宽更大、算子优化更好,跑同样的模型反而更快。
所以我的经验是:不要只看标称算力,一定要拿自己的实际模型去跑benchmark。如果拿不到实物,至少要看第三方评测报告,而且要看跟你模型结构相近的评测。下面这个计算过程可以帮你估算理论上的算力需求:
假设你要部署一个YOLOv5s模型,输入640x640,目标帧率30FPS。YOLOv5s的单帧计算量大约是17 GFLOPs(FP16)。那么每秒需要的算力是:
17 GFLOPs × 30 FPS = 510 GFLOPs/s = 0.51 TFLOPS看起来很低对吧?但这是理论计算量,实际部署时因为算子融合、内存访问、调度开销,实际需要的算力可能是理论值的3到5倍。所以你需要一张标称算力至少在2 TFLOPS以上、且实际利用率能到50%以上的芯片。如果厂商标称10 TFLOPS但实际利用率只有20%,那有效算力只有2 TFLOPS,刚好卡在边缘,没有余量。
3.2 内存带宽与容量:最容易被忽视的瓶颈
如果说算力是AI芯片的"发动机马力",那内存带宽就是"油箱到发动机的油管粗细"。马力再大,油供不上来也白搭。
神经网络推理过程中,每一层的权重、激活值、中间结果都需要在内存和计算单元之间搬运。以Transformer为例,自注意力机制的计算强度其实不高,大部分时间花在把Q、K、V矩阵从内存读进来、算完再写回去。如果内存带宽不够,计算单元就会频繁空转等数据。
我做过一个对比测试:两张算力相近的推理卡,A卡内存带宽400GB/s,B卡内存带宽900GB/s,跑同一个BERT-base模型,B卡的吞吐量是A卡的1.8倍。算力一样,差距全在带宽上。
内存容量同样重要。大模型推理时,模型权重需要全部加载到显存里。一个7B参数的模型,FP16精度下需要14GB显存,INT8量化后需要7GB,INT4量化后需要3.5GB。如果你的芯片只有8GB显存,那FP16根本跑不了,只能量化,而量化可能带来精度损失。所以选型时一定要算清楚:模型参数量 × 精度字节数 × 1.2(预留激活值和中间结果空间)= 最低显存需求。
3.3 精度与量化:INT8、FP16、BF16怎么取舍
精度选择是AI芯片部署里最需要权衡的环节。精度越高,模型效果越好,但算力消耗和内存占用也越大。精度越低,跑得越快越省,但可能精度掉得没法用。
FP32是训练时的默认精度,推理时基本不用,太浪费。FP16是推理的黄金标准,精度损失极小,绝大多数模型从FP32转到FP16后精度掉不到0.1%。BF16是谷歌提出的格式,动态范围比FP16大,适合训练,推理时用得少。INT8是推理的主流量化精度,通过校准把浮点权重和激活值映射到8位整数,理论上能带来2到4倍的速度提升,但精度损失取决于模型和校准方法,有的模型掉1%以内,有的能掉10%。
量化不是简单地把浮点数截断成整数,需要一套校准流程。常见的方法有:
- 训练后量化(PTQ):用一批校准数据跑一遍模型,统计每层激活值的分布,计算出缩放因子。优点是简单快速,不需要重新训练。缺点是精度损失相对大。
- 量化感知训练(QAT):在训练过程中模拟量化误差,让模型学会适应低精度。优点是精度损失小,缺点是需要重新训练,成本高。
- 动态量化:运行时根据实际数据分布动态调整缩放因子,适合激活值分布变化大的模型。
我的实操经验是:先试PTQ,如果精度掉得能接受就用PTQ,掉得太多再考虑QAT。校准数据的选择很关键,一定要用真实业务数据,不能用随机数据。我见过一个团队用ImageNet的均值方差去校准一个医学影像模型,结果量化后精度直接崩了,因为医学影像的像素分布和自然图像完全不同。
注意:量化后的模型一定要做完整的精度验证,不能只看几个样本。建议用至少1000条真实业务数据做回归测试,对比量化前后的准确率、召回率等核心指标。
3.4 工具链成熟度:决定实际开发效率的隐形指标
这一点是很多选型时容易忽略的。芯片硬件参数再漂亮,如果工具链难用,开发效率低,项目周期就会被拖垮。
评估工具链成熟度,我一般看这几个维度:
- 算子覆盖度:主流模型里的算子,芯片是否都支持?不支持的算子能不能回退到CPU?回退后性能损失多大?
- 编译器优化能力:能不能自动做算子融合、内存复用、流水线调度?还是需要手工调优?
- 调试和profiling工具:能不能看到每层的耗时、内存占用、硬件利用率?出问题了能不能定位?
- 框架支持:支不支持PyTorch、TensorFlow、ONNX?转换工具好不好用?
- 文档和社区:文档是否完整?遇到问题能不能找到答案?
我评估过的一家国产芯片,硬件参数很漂亮,但工具链只支持Caffe和TensorFlow 1.x,PyTorch模型要经过复杂的转换流程,而且转换后经常出现算子不支持的情况,需要手工写插件。这种工具链,即使硬件免费送,项目成本也降不下来。
4. 从需求到部署:AI芯片落地完整流程
4.1 需求分析与场景定义:先想清楚再选型
我见过太多项目一上来就选芯片,结果做到一半发现选错了,推倒重来。正确的顺序应该是:先定义场景,再推导需求,最后选芯片。
场景定义要回答这几个问题:
- 模型是什么:结构、参数量、输入输出规格、精度要求。
- 部署在哪里:云端机房、边缘服务器、终端设备?供电、散热、空间条件如何?
- 性能要求是什么:延迟上限、吞吐量下限、并发路数?
- 成本约束是什么:单芯片预算、功耗预算、整体拥有成本?
- 生命周期多长:模型会不会频繁更新?硬件需要支持几年?
把这些问题的答案写下来,形成一份需求规格书,然后再去匹配芯片。比如一个智慧工厂的缺陷检测项目,需求可能是:YOLOv5s模型,输入1280x1280,延迟不超过50ms,部署在产线工控机上,功耗不超过30W,成本不超过2000元,模型半年更新一次。根据这些需求,你就能快速排除掉云端训练卡、高功耗GPU,聚焦在边缘推理芯片上。
4.2 硬件选型与验证:benchmark要这样跑
选型阶段最忌讳只看厂商PPT。我的做法是:拿到候选芯片后,用自己真实的模型和真实的数据跑一轮完整benchmark。
benchmark要覆盖这几个维度:
- 单帧延迟:从输入到输出的端到端时间,包括预处理和后处理。
- 吞吐量:在满足延迟要求的前提下,每秒能处理多少帧。
- 精度:量化后的模型精度损失是多少。
- 功耗:满载和典型负载下的实际功耗。
- 稳定性:连续跑24小时,看有没有内存泄漏、性能衰减、异常崩溃。
- 温度:满载运行时的芯片温度,是否触发降频。
我一般会准备一个benchmark脚本,自动跑完这些测试并生成报告。下面是一个简化的测试流程示例:
# benchmark伪代码,实际使用时需要根据芯片SDK调整 import time import numpy as np def benchmark(model, input_data, warmup=100, iterations=1000): # 预热,让芯片进入稳定状态 for _ in range(warmup): model.infer(input_data) # 测延迟 latencies = [] for _ in range(iterations): start = time.perf_counter() model.infer(input_data) end = time.perf_counter() latencies.append((end - start) * 1000) # 转毫秒 # 统计 latencies = np.array(latencies) print(f"平均延迟: {latencies.mean():.2f} ms") print(f"P50延迟: {np.percentile(latencies, 50):.2f} ms") print(f"P99延迟: {np.percentile(latencies, 99):.2f} ms") print(f"最大延迟: {latencies.max():.2f} ms") # 吞吐量 = 1000 / 平均延迟 print(f"吞吐量: {1000 / latencies.mean():.2f} FPS")跑完benchmark后,把结果和需求规格书逐条对比,满足所有硬性指标的才能进入下一轮。如果多个芯片都满足,再比较成本、工具链、供货稳定性等软性指标。
4.3 模型转换与量化实操:一步步来
选定芯片后,下一步是把训练好的模型转换到芯片能执行的格式。这个过程通常包括:模型导出、图优化、量化、编译。
以ONNX为中间格式的典型流程:
- 从训练框架导出ONNX:PyTorch用
torch.onnx.export,TensorFlow用tf2onnx。导出时要指定输入输出的名称和动态维度。 - ONNX图优化:用
onnx-simplifier做常量折叠、算子融合、死代码消除。 - 量化:用芯片厂商提供的量化工具,或者通用的ONNX Runtime量化工具。需要准备校准数据集。
- 编译:用芯片厂商的编译器把量化后的模型编译成芯片可执行的二进制。
- 精度验证:在芯片上跑验证集,对比量化前后的精度。
这里面最容易出问题的是量化环节。我踩过的坑包括:校准数据太少导致缩放因子估计不准、某些算子不支持量化导致精度崩塌、量化后的模型在芯片上跑出来的结果和模拟器不一致。所以每一步都要做验证,不能等到最后才发现问题。
4.4 部署与性能调优:让芯片跑满
模型转换完成后,部署到实际环境,还有一轮性能调优的空间。同样的模型和芯片,调优前后性能可能差一倍。
调优的主要手段:
- batch size调整:增大batch size能提高硬件利用率,但会增加延迟。需要找到满足延迟要求前提下的最大batch size。
- 多线程/多流并行:如果芯片支持多流,可以把多个推理请求并行处理,提高吞吐量。
- 预处理和后处理卸载:把图像缩放、归一化等预处理放到GPU或专用硬件上,减轻CPU负担。
- 内存复用:复用输入输出缓冲区,减少内存分配开销。
- 算子调优:某些芯片允许对特定算子指定不同的实现方式,需要根据实测选择最优的。
我做过一个视频分析项目,初始部署时单卡只能跑8路1080p视频,经过batch size调整、多流并行、预处理卸载三轮调优后,单卡能跑22路,提升接近3倍。所以部署不是终点,调优才是真正榨干硬件性能的环节。
5. 常见问题与排查技巧实录
5.1 精度掉得厉害怎么办
这是量化部署最常见的问题。排查思路按顺序来:
- 确认是量化导致的还是其他原因:先在浮点模式下跑一遍,确认模型本身没问题。再在芯片上跑浮点模型(如果支持),确认芯片的浮点实现没问题。最后才对比量化前后的差异。
- 检查校准数据:校准数据是否覆盖了真实业务的各种场景?数量是否足够(一般建议500到1000条)?分布是否和测试集一致?
- 逐层分析:用工具对比量化前后每一层的输出差异,找到精度损失最大的层。通常是第一层和最后一层对量化最敏感。
- 混合精度:对敏感层保留FP16,其他层用INT8。大多数芯片工具链都支持这种混合精度模式。
- 换量化方法:PTQ不行就试QAT,或者试不同的校准算法(最大最小值、KL散度、均方误差等)。
我遇到过一个案例,量化后mAP掉了15个点,逐层分析发现是第一个卷积层的问题。把第一层改成FP16后,mAP只掉0.5个点,速度几乎没影响。所以不要一上来就放弃量化,很多时候是局部问题。
5.2 实际性能远低于标称值
这个问题我在前面提过,原因通常是内存带宽瓶颈、算子效率低、或者batch size太小。排查步骤:
- 确认benchmark条件:厂商标称值通常是在最优batch size、最优输入尺寸下测的。你的实际场景可能batch size只有1,性能自然差很多。
- 看硬件利用率:用profiling工具看计算单元、内存带宽、缓存的利用率。如果计算单元利用率低但内存带宽跑满了,说明是内存瓶颈。
- 检查算子实现:某些算子可能有多种实现,默认的不一定是最优的。查文档看有没有调优选项。
- 尝试不同的batch size和输入尺寸:找到性能拐点。
5.3 多卡/多芯片扩展效率低
单卡跑得好,一上多卡就拉胯,这是集群部署的经典问题。原因通常是通信瓶颈。排查:
- 测单卡到双卡的扩展效率:如果双卡效率只有1.5倍而不是2倍,说明通信开销已经很明显了。
- 看通信占比:用profiling工具看通信时间占总时间的比例。如果超过30%,说明通信是瓶颈。
- 优化通信:能不能用更高效的集合通信算法?能不能做梯度压缩?能不能调整并行策略(数据并行、模型并行、流水线并行)?
- 检查拓扑:芯片之间的互联带宽是否对称?有没有跨NUMA节点?
下面这张表是我整理的常见问题速查:
| 现象 | 可能原因 | 排查方法 | 解决方向 |
|---|---|---|---|
| 量化后精度暴跌 | 校准数据不匹配 | 对比校准集和测试集分布 | 换校准数据,试QAT |
| 实际FPS远低于预期 | batch size太小 | 测不同batch size下的FPS | 增大batch size |
| 延迟波动大 | 内存分配抖动 | 看内存分配日志 | 预分配内存池 |
| 多卡扩展效率低 | 通信瓶颈 | 测通信时间占比 | 优化通信策略 |
| 芯片温度过高降频 | 散热不足 | 监控温度曲线 | 改善散热,降频使用 |
| 长时间运行后性能下降 | 内存泄漏 | 监控内存占用 | 修复泄漏,定期重启 |
5.4 工具链踩坑经验
最后分享几个工具链相关的踩坑经验,这些都是文档里不会写的:
- 版本兼容性:芯片厂商的SDK版本、编译器版本、驱动版本之间有严格的兼容矩阵,升级任何一个都可能出问题。建议锁定一套验证过的版本,不要轻易升级。
- 算子不支持:遇到不支持的算子,优先找替代实现,而不是自己写插件。自己写的插件往往性能很差,而且后续维护成本高。
- 模拟器和实机不一致:有些芯片的模拟器结果和实机结果有差异,尤其是量化相关的。最终验证一定要在实机上做。
- 文档滞后:芯片厂商的文档往往滞后于实际SDK版本,遇到问题多问FAE,或者看SDK里的示例代码。
我在实际项目里最大的体会是:AI芯片选型,硬件参数只占30%,工具链和生态占70%。一张参数漂亮但工具链难用的芯片,会让整个项目团队痛不欲生。反过来,一张参数中等但工具链成熟的芯片,能让开发效率提升好几倍。所以如果你正在做选型,一定要把工具链评估的权重调高,最好让实际开发的工程师参与评估,而不是只让管理层看PPT做决定。
另外,AI芯片这个领域变化太快,今天的主流方案可能两年后就过时了。保持对新技术路线的关注,但不要盲目追新。在项目里,稳定可靠比先进更重要。