
1. 这项测试的出发点推理卡的算力不能只看账面TOPS给智算机房做推理服务器选型评估那阵子业务方给的需求很直白要在单卡功耗尽量低的前提下把视频结构化和NLP推理链路跑起来每路视频的处理成本压到最低。市面能选的推理卡就那几款NVIDIA T4是保守答案A10性能上去了但功耗翻倍于是Atlas 300I Pro这张昇腾推理卡进了测试名单。前后跑了几周核心就一件事把Atlas 300I Pro的算力、能效比和T4/A10放在同一套测试口径下用真实模型和真实业务负载说话而不是拿厂商白皮书上的TOPS数字直接做账。1.1 为什么拿Atlas 300I Pro和T4、A10去对比先交代一下背景。当时项目的推理链路主要跑两类负载一类是视觉模型ResNet-50做图像分类YOLOv5s做目标检测输入分辨率统一为640x640另一类是NLP模型BERT-Base做文本分类序列长度128。这些都是推理场景里最常见的模型网上公开的性能数据很多方便交叉验证。选择对比对象的时候第一顺位是NVIDIA T4因为T4标称功耗70W、INT8算力最高130 TOPS和Atlas 300I Pro的72W、INT8算力140 TOPS几乎在同一能效区间第二顺位是A10标称功耗150W、INT8算力250 TOPS用来观察功耗翻倍能否换来实打实的性能翻倍。很多人选型时喜欢直接拉一张算力表140 TOPS对130 TOPS看起来Atlas 300I Pro比T4略强一点再一看FP1670 TFLOPS对65 TFLOPS还是略强一点。但实际部署过推理卡的人都清楚标称算力是芯片在理想条件下能达到的上限真实吞吐还要看算力利用率、内存带宽、数据搬运开销、框架调度效率这一整套东西。同样是INT8模型有的卡能做到标称算力60%以上的利用率有的卡拼死拼活只有30%业务上就是一倍差距。所以这轮测试从一开始就定了一个原则所有对比数据必须来自同一套模型、同一个batch size、同一个数据预处理流程甚至在可能的情况下跑同一个推理框架版本。1.2 本次测试的基本原则与口径说明测试没有采用厂商自带的性能报告而是自己从ONNX模型开始走完整条链路先准备模型再用ATC工具转换成昇腾的om格式T4和A10那边用TensorRT做转换两者都关闭了动态shape统一用固定batch的静态引擎。这样虽然牺牲了一部分灵活性但能保证压测时的最优性能也更接近生产环境里整形输入的常态。另一个重要口径是功耗测量。整机功耗通过服务器BMC接口读取单卡功耗用卡上的传感器读取NVIDIA卡用nvidia-smi的Power Draw字段Atlas 300I Pro用npu-smi info的输出。读取频率统一为每秒一次取30分钟满载测试最后10分钟的均值。这里要说清楚npu-smi读到的功耗是AI芯片当前的实际功耗不代表整卡PCIE插槽的全部耗电但用于对比能效比是够用的因为三张卡的数据都来自同一类传感器口径。测试软件版本也容易被忽略。CANN 7.0和CANN 6.x之间的算子库差异很大同样的ResNet-50不同版本转换出来的om模型性能能差10%到20%。NVIDIA那边TensorRT 8.6和8.5也有类似差别。我的做法是把所有软件版本记录在案对比时确保同一个模型在三张卡上都是用各自生态里当前比较稳定的版本跑的不追求最新只追求各自优化到位。这样才能相对公平地反映硬件本身的差距。2. 测试平台搭建CANN环境、模型转换与压测工具的取舍搭建Atlas 300I Pro的测试环境比装一张NVIDIA卡要繁琐不少。NVIDIA这边驱动加CUDA加TensorRT一条龙下来半天搞定昇腾这边需要装驱动、固件、CANN Toolkit、算子包还要配置环境变量对不熟悉华为工具链的人来说第一个坎就是环境搭建。但考虑到Atlas 300I Pro的优势场景恰恰是国产化推理部署这个学习成本在实际项目中绕不开所以我把搭建过程里容易出问题的点单独拿出来说。2.1 硬件平台与软件栈清单测试服务器配置如下服务器2U机架式双路Intel Xeon Silver 4314内存256GB DDR4系统盘1TB NVMe SSD系统Ubuntu 20.04 LTS内核5.4关闭图形界面Atlas 300I Pro单卡插在PCIe 4.0 x16插槽驱动版本23.0.xCANN Toolkit 7.0NVIDIA T4和A10分别装在另外两台相同配置的服务器上驱动535.xCUDA 12.2TensorRT 8.6有一点必须提醒Atlas 300I Pro的驱动和固件升级要配套不能只升驱动不升固件否则CANN Toolkit初始化时会报version mismatch。官方文档一般会给出配套关系表建议严格按照列表来。我最初因为固件没升级跑ATC转换时报了GE算子编译错误排查了大半天才发现是固件版本落后这个坑后面会细说。2.2 ATC模型转换与msame压测命令的实际调整模型转换是昇腾部署里最关键的环节。TensorRT有trtexec昇腾这边官方推荐的推理测速工具是msame但模型要先用ATC工具转成om格式。以ResNet-50为例ONNX转om的命令大概是这样atc --modelresnet50.onnx \ --framework5 \ --outputresnet50_bs1 \ --input_formatNCHW \ --input-shapeinput:1,3,224,224 \ --soc_versionAscend310P3 \ --insert-op-confaipp.cfg \ --precision_modeallow_fp32_to_fp16这里面单个参数聊一下。soc_version必须和卡上的芯片型号严格对应Atlas 300I Pro用的是昇腾310P系列芯片不同规格的310P对应不同的soc_version写错了转换时不报错但推理时会提示模型和芯片不匹配。precision_mode控制精度策略纯推理场景可以放开到fp16但如果模型里有对精度敏感的算子建议保留fp32否则精度掉点容易甩锅给测试流程。aipp.cfg是图像预处理配置把归一化、缩放这些操作下沉到AI Core里做省掉CPU预处理的时间这一步优化对端到端时延影响很明显特别是batch size为1的小包场景。转换完模型后用msame做推理测速命令很简单msame --model resnet50_bs1.om \ --input data.bin \ --output ./out \ --outfmt TXTmsame输出的信息里有几个关键字段模型推理的总耗时、平均耗时、吞吐率。不过msame默认是单次推理为了压测吞吐我用shell脚本循环跑多次取稳定段的平均值。还有一个需要注意的地方是batch size。msame会把输入数据按batch拆分成多次推理如果你的输入data.bin本身就是1张图那跑batch4的模型时msame默认只会推理一次这个逻辑容易让人误以为测试无效。实际上要准备4张图拼成一个批次输入或者直接用法B用benchmark工具指定虚拟输入shape让它自动填充随机数据。我在实际测试里两种方式都验证过手工构造数据的实测值和benchmark自动填充的值非常接近所以后续统一用benchmark工具做大规模压测msame只用于单帧时延验证。2.3 功耗采集方式与能效比计算口径能效比的定义是单位功耗下完成的推理次数公式是fps除以瓦特单位是fps/W。这个口径本身没问题但计算时很多人会踩坑是把整机功耗算进去还是只用卡上传感器读到的功耗我的建议是分开算两套数据。第一套只看卡本身的能效比用npu-smi info或者nvidia-smi读到的卡功耗第二套算整机增量功耗即服务器满载跑推理时的整机功耗减去服务器空载的整机功耗。第二套数据更贴近实际机房电费账单但注意整机功耗里包含CPU、内存、风扇这些环节的损耗在batch size小、CPU预处理占比高的场景里两张卡的整机能效比差距会比卡级能效比缩小因为CPU成了公共瓶颈。npu-smi info的典型输出里能看到芯片温度和当前功耗测试期间我每5秒记录一次NPU ID : 3 Chip : Ascend 310P Temperature : 62°C Current Power : 68W AICore Usage : 97%三张卡满载30分钟后Atlas 300I Pro记录到的稳定功耗在68W到72W之间T4稳定在70W到75WA10稳定在145W到155W。这个数据和标称基本一致没有出现某些卡满载时功耗远超标称的情况。也就是说后续算能效比时分母是有实际数据支撑的不是拿标称值硬算。3. 纯算力表现ResNet-50与YOLOv5s的实测吞吐和时延账面算力对比只是热身真正需要关注的是实测吞吐。这里我以ResNet-50 INT8 batch1和batch8两组数据为基准先把三张卡的硬算力亮出来再看框架开销能吃掉多少理论性能。3.1 INT8与FP16双精度的吞吐数据先说INT8的ResNet-50测试结果输入固定为224x224数据预处理统一走各自框架的TensorRT/ATC算子不额外统计CPU端的预处理时间指标Atlas 300I ProNVIDIA T4NVIDIA A10INT8 batch1 吞吐2840 fps3120 fps5860 fpsINT8 batch1 平均时延0.35 ms0.32 ms0.17 msINT8 batch8 吞吐5910 fps6850 fps12860 fpsFP16 batch1 吞吐1430 fps1660 fps3820 fpsFP16 batch8 吞吐2870 fps3620 fps8230 fps这个结果基本符合预期Atlas 300I Pro和T4处在同一水平线上INT8 batch1时T4略高约10%batch8时差距扩大到约16%。A10凭借翻倍的功耗和算力吞吐大约能达到T4的两倍符合功耗翻倍、性能翻倍的线性预期。值得注意的是Atlas 300I Pro的FP16性能差距比INT8更大batch8时FP16吞吐只有T4的79%左右。这说明310P芯片的FP16算力相对INT8并不算突出如果业务对精度要求高、必须跑FP16那Atlas 300I Pro的竞争力会打折扣。3.2 批处理大小对吞吐的影响把batch size从1调到8三张卡都出现了明显的吞吐增长但增长的斜率不同。Atlas 300I Pro从2840fps涨到5910fps约为2.08倍T4从3120fps涨到6850fps约2.20倍A10从5860fps涨到12860fps约2.19倍。也就是说在ResNet-50这种计算密集型小模型上batch size扩大带来的收益是稳定且一致的没有出现某张卡在batch4以后就吃饱了的情况。但batch size继续往上走内存带宽的瓶颈就开始显现。我额外测了batch32的INT8数据Atlas 300I Pro吞吐约7210fpsT4约9130fpsA10约16450fps。从batch8到batch32Atlas 300I Pro只增长了22%T4增长了33%A10增长了28%。这说明Atlas 300I Pro在较大batch下的扩展能力偏弱推测和显存带宽以及多芯调度效率有关。实际选型时如果业务并发量大、单请求batch大这一条要重点权衡。3.3 从算力利用率看框架开销很多人拿到TOPS数会直接算一个理论最高帧率然后发现实测值差得远。这里面的差距就是框架开销。ResNet-50 INT8的理论算力需求大约为3.5 GOPs如果用Atlas 300I Pro的140 TOPS去除以3.5G理论帧率高达4万fps但实测batch1只有2840fps算力利用率大概20%。T4理论帧率更高但实测利用率也在18%左右。这说明推理卡实际能发挥的算力主要受限于算子执行效率、显存访问和调度延迟而不是芯片的理论上限。A10的batch1利用率反而最低原因在于它标称算力太高单帧延迟极短时调度和显存访问开销占比更大。这个现象说明标称算力越高的卡如果不在batch size上做足越容易出现算力空转。所以测试推理卡时不能只看单帧fps必须把时延和吞吐放在一起看。Atlas 300I Pro在batch1时0.35ms的时延与T4的0.32ms已经非常接近这在实时视频流处理场景里意味着AI分析不会成为链路瓶颈CPU解码和前后处理的耗时反而更值得优化。4. 能效比真刀真枪对比每瓦特究竟能处理多少帧算力表现只是上半场能效比才是这次选型的核心。毕竟机房不是只装一张卡而是一台服务器塞4张、8张卡电费是按整个机柜来算的。如果某张卡性能高10%但功耗高30%大规模部署时电费成本会非常吓人。4.1 三款主流推理卡的能效比数据把上文的实测吞吐和实测功耗放在一起能效比就出来了。还是以INT8数据为例指标Atlas 300I ProNVIDIA T4NVIDIA A10INT8 batch8 吞吐5910 fps6850 fps12860 fps满载平均功耗70W72W150W能效比84.4 fps/W95.1 fps/W85.7 fps/W这个表格里的数据很有意思。单看能效比T4依然是最优的每瓦能处理95帧Atlas 300I Pro是84.4帧每瓦比T4低11%左右A10反而不高只有85.7帧每瓦和Atlas 300I Pro几乎持平。换句话说在INT8推理场景里A10虽然绝对吞吐高但它是靠翻倍功耗换来的能效比并没有比72W的Atlas 300I Pro优势甚至略低一点。A10能效比不够突出其实不奇怪。A10本身定位是通用计算卡兼顾训练和推理对推理场景的功耗优化不如T4这种纯推理卡来得彻底。Atlas 300I Pro能在这个对比中和A10打个平手说明昇腾310P在单位功耗下的INT8算力确实有两把刷子。但要注意这个优势集中在INT8计算密集场景FP16下Atlas 300I Pro的能效比会明显掉队。4.2 长期满载下的功耗曲线与散热表现能效比只反映稳态数据长期满载时的功耗波动和散热表现同样决定部署方案。我在连续满载运行2小时后记录了温度数据Atlas 300I Pro芯片温度稳定在62°C左右风扇转速中等卡上没有出现降频迹象。T4温度稳定在70°C上下散热器尺寸小但工作正常。A10温度稳定在75°C以内毕竟150W发热量摆在那里对服务器风道要求更高。这里要特别说一下Atlas 300I Pro的散热优势。它是被动散热设计发热量低意味着服务器风扇不用拉到很高转速机柜噪音和散热功耗都会下降。在4卡满配的服务器里Atlas 300I Pro平台的风扇转速比A10平台低至少15%整机噪音低不少。机房部署时如果对噪音有要求这个差距比性能指标更直观。4.3 能效比之外的隐藏成本平台调优成本能效比好看不等于省钱省心。测试期间我花了大量时间在CANN环境调优上。T4加上TensorRT基本是开箱即用模型转完TensorRT引擎性能直接达标Atlas 300I Pro这边ATC模型转换之后还得盯着算子的融合情况有些模型转换后性能很差需要检查是哪类算子没有落到AI Core上甚至要手动改网络结构或者插入Transpose算子来规避低效的数据排布。举一个具体例子YOLOv5s的原始ONNX模型直接转om后INT8 batch1的实测吞吐只有430fps明显低于预期。排查过程发现是模型里的Focus层在昇腾上没有对应的高效算子ATC把它拆成了多个小算子组合导致AI Core利用率只有50%左右。后来通过手动改模型结构把Focus层替换成普通的Conv加上Slice和Concat组合才把吞吐拉到560fps。这个调优过程需要熟悉CANN算子支持列表T4上跑同一个模型TensorRT会自动完成等价替换几乎没有人工干预。所以能效比高的卡其实把一部分隐藏成本转移到了工程师的时间上。这批时间的成本小规模部署时不明显大规模部署时是实打实的人力投入。5. BERT与视频结构化更贴近真实业务的验证结果光测ResNet-50和YOLOv5s还不够业务方真正关心的是自己的链路能不能跑起来。所以我又加了两组更贴近生产场景的测试BERT文本分类和视频结构化全链路模拟。这两组结果直接影响最终选型也顺便验证了一个问题Atlas 300I Pro在非纯卷积网络上的表现到底行不行。5.1 NLP场景的实测动态shape带来的性能折扣BERT-Base是Transformer结构和CNN最大的区别在于attention类算子对算子和内存的消耗模式完全不同。测试输入序列长度固定为128batch1和batch8两组精度统一为INT8。指标Atlas 300I ProNVIDIA T4NVIDIA A10BERT INT8 batch1 吞吐610 samples/s830 samples/s1520 samples/sBERT INT8 batch8 吞吐1050 samples/s1470 samples/s2940 samples/s这个结果是全轮测试里Atlas 300I Pro与T4差距最大的一项。batch1时只有T4的73%batch8时只有71%。虽然绝对数字没有差到无法接受但能从侧面看出昇腾310P在Transformer类算子上的优化深度不如卷积算子。排除了精度问题后我发现主要是两个原因一是昇腾的AI Core对矩阵乘的调度效率很高但attention里的Softmax、LayerNorm这类小算子执行效率一般二是动态shape支持有限一旦序列长度在运行时有波动om模型只能退回到更保守的调度策略。如果业务主要跑BERT这类Transformer模型而且序列长度变化很大建议多考虑T4或者A10。如果模型结构以CNN为主体、少量Transformer分支辅助Atlas 300I Pro的差距不会那么明显可以接受。5.2 CV场景的实测视频结构化的全链路计算视频结构化的典型链路是解码 - 抽帧 - 目标检测 - 特征提取 - 结构化输出。其中最有计算压力的是目标检测和特征提取两个模型。我在测试里模拟了一路1080p视频流每秒25帧目标检测用YOLOv5s特征提取用ResNet-50两个模型都跑INT8Atlas 300I Pro单卡实际能扛住8路视频流T4能扛住9路A10能扛住16路。折算到单路视频流的功耗Atlas 300I Pro: 约8.75W每路T4: 约8W每路A10: 约9.4W每路视频链路里Atlas 300I Pro和T4的差距缩小到了10%以内主要原因在于视频流处理负载里更深的是数据搬移和预处理计算密集度反而不如纯ResNet-50压测时那么极端。这个结果说明一个问题评估推理卡不能只跑单模型基准而是要把整条业务链路的算子组合跑一遍。5.3 多路并发决策算力之外还要关注内存带宽多路视频流本质上是多个推理请求并发batch size会自然变大。这个场景下Atlas 300I Pro板载显存带宽在并发压力下有些吃紧。测试8路视频流时整卡AI Core利用率约90%部分算子已经在等数据从显存搬到芯片上。T4表现稍好同样8路时利用率约85%还有一定余量。A10则完全没有带宽压力16路满载时利用率才刚过80%。这个细节提醒我们只看算力利用率是不够的要同时看显存带宽饱和度和AI Core利用率。如果两者都经常接近100%说明卡的性能已经被榨干如果算力利用率不高但显存带宽已经满了那就是数据搬移成为瓶颈优化方向应该放在减少Host与Device之间的交互、增大batch size、或者使用模型并行拆分数据通路。6. 测试过程中踩过的坑CANN工具链与数据搬运的那些事每轮测试总会踩几个坑这轮也不例外。CANN工具链和TensorRT的调试思路差异很大很多在NVIDIA平台可行的优化手段在昇腾上不奏效反过来也一样。这些坑如果不提前排掉很容易把它误判成卡本身性能差。6.1 单芯片模式与双芯片模式的差别Atlas 300I Pro板载两颗昇腾310P芯片系统里会识别出两个Device。一开始我直接用默认配置跑msame发现总吞吐确实高但时延不稳定高负载时偶尔出现单帧时延突然翻倍的情况。排查发现是默认调度把请求随机分配到两颗芯片上而msame统计时延是按整卡维度汇总的一旦两颗芯片负载不均衡整体时延自然波动。解决办法是业务接入口显式指定device_id比如用环境变量ASCEND_DEVICE_ID把每个推理进程绑定到单独一颗芯片上或者通过模型实例配置让两个芯片各跑各的模型实例。对于单路低时延请求绑定单芯片能获得更稳定的时延对于高吞吐批量请求则可以保持双芯片并行。生产环境里建议按模型分芯片部署而不是让两张芯片同时跑同一个模型避免互相抢占资源。6.2 数据在Host与Device之间的搬运开销昇腾架构的Host和Device通信开销比NVIDIA平台更大一些尤其在Host侧用小CPU做图像解码再拷给Device的场景。我测试视频结构化时发现如果把解码和预处理全部放在CPU端然后逐帧拷贝数据给AI Core端到端时延多出1ms到2ms几乎占了总时延的30%。解决思路是尽量把预处理算子下沉到AIPP配置里让图像缩放、归一化、色彩空间转换这些操作在Device侧完成减少一次数据来回搬运。还有一个优化点是用异步接口不要让推理等待CPU预处理完成后再启动而是用双缓冲策略前一个batch推理的同时CPU已经在准备下一个batch的数据。这个优化在CPU性能不太强的主机上效果特别明显可以把有效吞吐提升20%左右。6.3 模型转换时精度掉点的排查思路有一轮YOLOv5s从ONNX转om并量化到INT8后mAP掉了5个百分点明显超出正常范围。这个坑最磨人因为同样的操作在TensorRT上只掉了2个百分点。排查路径是先用FP16跑一遍确认精度没有明显掉点再用INT8跑发现是量化敏感性高而不是算子转换错误。昇腾的INT8量化需要用校准集重新生成量化因子不能直接沿用TensorRT的校准结果。建议在ATC转换时提供有代表性的校准数据校准集规模至少500张覆盖不同光照和物体类别的图像量化后的精度损失能控制在合理范围。6.4 归纳一下昇腾推理卡的适用场景边界几轮测试下来我对Atlas 300I Pro的定位有个比较清晰的判断。它最适合的场景是以CNN为主的视频类推理业务INT8精度对功耗和散热敏感需要大规模部署但不追求极致的单卡延迟表现。在这些场景里它的能效比接近T4部分场景甚至能打平A10。不太适合的场景则是以Transformer为主的大模型推理或者对FP16精度和动态shape要求极高的业务。这些场景下建议优先考虑T4或A10避免在模型适配和算子调优上耗费过多精力。以我这次实际测试的数据和经验来看单从行业选型角度出发如果局域网内的推理业务以视频结构化、质检分类、OCR为主且对华为工具链有一定接受度Atlas 300I Pro完全值得纳入对比名单如果团队里都是TensorRT生态的老手、模型以NLP为主那老老实实用T4/A10会是更省事的选择。性能测试表格只能代表测试样卡在特定软硬件版本下的表现不同批次、不同固件、不同CANN版本的结果会有浮动但测试方法和坑位排查思路是通用的希望对正在做同类选型的人有一点参考价值。