ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Atlas 300V Pro部署YOLOv5全流程:从硬件规格到性能优化

Atlas 300V Pro部署YOLOv5全流程:从硬件规格到性能优化 同时搜出“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”这两个问题的人大概率是和我去年一样的状态手上有一份训练好的YOLO权重想找一张算力卡做实时目标检测预算和机房功耗都有硬上限听人推荐了Atlas系列结果点开产品页面反而更懵了。Atlas这个词在硬件圈里指的不是扛天巨人而是昇腾AI计算产品线而“300V 24G”正是这条产品线里一张非常典型的边缘推理加速卡。我在这张卡上从零折腾到能稳定跑YOLOv5中间装坏过两次系统改过三轮推理代码也把ATC模型转换的报错信息翻了个底朝天。这篇文章不打算做产品手册搬运就把我自己的完整路径写下来先从硬件规格讲清楚它到底是什么卡再给一套可以直接复现的YOLO部署流程最后把那些文档里不会写但实际必然遇到的坑一并摊开。1. Atlas 300V Pro 24G先把“是不是运算加速卡”这个问题讲透1.1 从名称到规格这张卡到底长什么样先说结论Atlas 300V Pro 24G是一张不折不扣的AI运算加速卡但它不是大多数人脑子里那种“显卡”。它槽位、散热、供电方式都长得像显卡核心逻辑却完全不同。这张卡使用的是昇腾310P芯片板载24GB LPDDR4X内存整卡功耗在72W左右单槽半高设计走PCIe接口不需要外接辅助供电。我插在普通x86服务器上开机后它不会输出任何画面信号——它不负责显示所有算力都用来跑神经网络推理。网上经常被简称为“Atlas 300V 24G”的大多就是指这一张Pro版。它和Atlas 300I Pro的定位差异在于I系列更偏向通用AI推理V系列在视频分析视觉场景上做了专门的适配。实际部署时两张卡的驱动、CANN版本、模型转换流程完全一致所以在软件层面不用太纠结字母差异。规格方面我列一个自己实际用的版本不同批次可能有些微差别以官方规格书为准项目Atlas 300V Pro 24G 实测参数芯片昇腾310P板载内存24GB LPDDR4X整卡功耗约72W接口PCIe 4.0 x8形态单槽半高半长算力INT8百TOPS级别FP16约几十TFLOPS工作温度0℃~70℃我实测60℃以下稳定计算精度支持FP16 / INT8 / INT4这里有个容易混淆的点24GB是LPDDR4X颗粒不是HBM也不是传统意义上的GDDR显存。对这张卡的定位来说LPDDR4X足够用。它主要服务的场景是视频分析、目标检测、图像分类这类推理负载模型权重通常几百MB到几GB24GB容量能同时塞下多路模型或者给比较大的视觉模型预留充足空间。带宽虽然不如HBM但推理场景的数据搬运模式和训练不同瓶颈通常不在显存带宽上。1.2 推理卡和训练卡的定位差异它擅长什么这张卡的价值首先要从“推理卡”三个字理解。昇腾的产品线中训练侧有Atlas 800/900系列训练服务器用的是昇腾910系列芯片推理侧则有300I、300V、200 DK等产品核心是昇腾310系列芯片。310P这颗芯片从设计之初就是为推理而生的它不会去跑BP反向传播训练而是专注于模型前向推理。这意味着什么意味着如果你打算在Atlas 300V Pro上微调YOLO模型方向就错了。它能做的是把你训练好的权重部署上去以极低的功耗跑起来。我实测过一个场景同样的YOLOv5s模型在普通CPU服务器上跑640×640输入单帧推理就要800ms以上而这卡在FP16静态shape下能到20~30FPS功耗只有72W。这种能效比才是它存在的理由。另外要强调一个关键差异Atlas卡不能直接运行CUDA代码。很多从GPU迁移过来的开发者看到“加速卡”三个字就默认它能跑PyTorch装了torch发现根本识别不到设备才意识到事情没那么简单。昇腾的推理接口叫AscendCL模型需要从ONNX、TensorFlow或Caffe格式转换成.om离线模型再用ACL接口加载推理。这套流程比直接调PyTorch繁琐但一旦摸清整个链路非常清晰性能也更可控。1.3 拿它和GPU对比优势和短板同样明显在YOLO部署这个具体场景里Atlas 300V Pro和NVIDIA T4这一类GPU推理卡属于直接竞品。我的真实体感是性能绝对值上T4略占优但Atlas的能效比和成本优势很实在尤其当你需要多卡堆机器的时候。维度Atlas 300V Pro 24G常见GPU推理卡如T4级别计算架构昇腾310P AI CoreCUDA/Tensor Core开发接口AscendCLC/PythonCUDA / TensorRT模型格式.om需ATC转换.engineTensorRT转换功耗约72W约70W~150W生态成熟度昇腾社区持续完善中更成熟资料更多多卡扩展支持但需注意PCIe通道分配支持生态工具更丰富部署难度中等模型转换环节需要适应门槛低但授权和成本高单看这张对比表可能觉得Atlas没什么压倒性优势。但如果你把它放到一个长期运行的实际项目里72W功耗意味着散热压力小、电源压力小、机房租用电费更友好这些隐性成本在几十上百路视频分析场景里会放大成非常可观的数字。短板也很明显生态。遇到问题搜解决方案时CUDA生态的资料量是昇腾的几十倍很多冷门问题只能自己翻源码或者去社区提问这一点要有心理准备。2. 部署YOLO前的三条路线选择为什么我建议绕过最折腾的那条2.1 三条主流路线拆解Atlas系列部署YOLO网上能搜到的方法大致分三条路线每条路线的折腾程度和灵活度都不一样路线一CANN AscendCL原生推理。这是最底层、最稳定的方案。把YOLO导出成ONNX用ATC工具转换成.om再写C或Python代码调AscendCL接口加载模型、搬运数据、执行推理。优点是完全可控性能可以调到最优缺点是代码量大要自己处理输入输出内存管理还要自己写NMS后处理。路线二MindX SDK / 昇腾应用仓库的现成样例。华为官方在昇腾社区维护了大量视觉模型样例包括YOLOv5、YOLOv8的目标检测推理demo。这套方案把数据预处理、模型推理、后处理封装成了pipeline用配置文件串联各个插件节点。优点是开箱即用很多场景改改配置就能跑缺点是灵活性差想自定义特殊预处理逻辑时要和框架作斗争。路线三通过torch_npu把PyTorch模型直接跑在昇腾设备上。昇腾提供了PyTorch的适配插件装好torch_npu后PyTorch代码基本不用大改把模型和输入数据搬到npu上就能推理。这条路线对训练代码迁移很友好但推理性能一般不如路线一而且YOLO的很多实现依赖自定义算子碰到不兼容算子的概率不小。2.2 为什么我最终用原生ACL路线我三条路线都试过。MindX SDK样例确实快但一旦要改分辨率、改输入通道、接自定义解码模块pipeline配置就开始让人头大。torch_npu路线跑YOLOv5时遇到了几次算子不兼容虽然最终都能绕过但总感觉在走钢丝。最后我回到路线一用原生ACL写完整套推理流程才彻底踏实。原因有三个第一原生ACL的依赖最少只要把HDK驱动加固件和CANN Toolkit装对基本不会出现上层框架带来的诡异问题。第二性能最可控静态shape、AIPP预处理、多batch并发这些深度优化选项在原生接口上操作起来最直接。第三排查问题更容易一旦推理结果不对我可以打开模型转换日志、ACL日志、内存拷贝日志一层层定位而不是在一个封装好的pipeline黑盒里瞎猜。当然这条路线对基础有一定要求至少要懂ONNX、懂模型转换、会一点C或Python。我的建议是如果你是做产品原型、赶项目Demo直接用现成样例最小成本验证如果你要长期维护一个部署项目还是值得把原生ACL链路走一遍后面所有优化和排错都建立在这个基础上。2.3 给新手的路线匹配建议结合我个人踩坑经历给不同背景的人一个简单建议表你的情况建议路线第一次接触Atlas只想快速看到YOLO跑起来路线二先跑通再研究原理有C/Python基础准备做正式项目路线一值得投入时间手头就是PyTorch训练代码不想动结构路线三但要做好算子适配心理准备主业是算法不想碰太多底层细节路线二尽量用官方容器镜像已决定长期用Atlas做推理平台路线一把ACL接口吃透我属于最后一种所以后文所有步骤都按路线一展开。有一点提前说整个流程中“模型转换”是最容易劝退新手的一步但它其实藏着大量可优化空间值得耐心学。3. 实操全流程一台x86服务器上从零跑通YOLOv53.1 硬件安装与系统环境检查第一步先把卡物理装上。Atlas 300V Pro是半高卡很多塔式服务器需要换半高挡板机架式服务器一般没问题。插进PCIe x8或x16槽位后不需要外接供电。开机前建议先查一下BIOS引导设置重点确认Above 4G Decoding大于4G地址解码处于开启状态。很多服务器主板默认关闭不开启的话系统可能识别不到设备或者识别到但运行一段时间后掉线。操作系统方面官方支持Ubuntu、CentOS等主流发行版我实测用的Ubuntu 20.04 x86_64内核版本不要太老否则驱动编译阶段容易出问题。装系统时建议给根目录留足空间CANN Toolkit加模型转换缓存很容易吃掉几十GB。安装前确认gcc、make、python3、pip都已就位这些是后续编译和运行脚本的基础依赖。3.2 安装HDK和CANN Toolkit昇腾软件栈我把两层分开理解底层是HDK负责让操作系统认出这张卡并和硬件通信上层是CANN提供AscendCL接口、ATC转换工具和其他开发组件。两层必须配套版本错位是新手最容易踩的雷。HDK安装非常简单从昇腾社区下载对应版本的驱动和固件包以root权限运行# 安装驱动以Ascend-hdk-310p-npu-driver_version_linux-x86_64.run为例 ./Ascend-hdk-310p-npu-driver_version_linux-x86_64.run --full # 安装固件 ./Ascend-hdk-310p-npu-firmware_version_linux-x86_64.run --full安装完驱动后重启系统执行npu-smi info如果能看到卡的信息且Status为OK硬件层就通了。接着安装CANN Toolkit# 下载对应版本的Ascend-cann-toolkit ./Ascend-cann-toolkit_version_linux-x86_64.run --install # 设置环境变量 source /usr/local/Ascend/ascend-toolkit/set_env.sh这里有一个经验set_env.sh每次新开终端都要重新source或者直接写进~/.bashrc否则命令行里找不到atc命令也找不到Python的acl模块。我第二次装坏系统就是因为漏了这一步折腾了半天以为是驱动问题结果只是环境变量没生效。3.3 用npu-smi验证设备状态装完驱动和CANN后最揪心的时刻就是执行npu-smi info。正常的输出会列出一张卡显示芯片温度、内存使用量、功耗、算力使用率这些基础信息。我判断一张卡是否健康的三个标准一是Status必须是OK。如果显示Fault或者Unavailable基本是驱动和固件版本不配套。二是温度要正常刚开机空闲温度通常30~50℃如果一到60℃以上就要检查机箱风道。三是板载内存能看到总量正常显示24GB左右如果显示0说明固件或驱动有问题。确认能识别到卡之后再跑一下CANN自带的环境自检脚本确认atc和acl模块都可用python3 -c import acl; print(acl.__version__)如果这段不报错说明Python侧的ACL接口已经就绪。到这一步环境层面的工作基本结束可以进入真正的模型部署环节。3.4 YOLOv5权重导出为ONNX我用YOLOv5s作为示例。准备好权重后在能跑PyTorch的机器上不一定要Atlas服务器本机普通GPU或CPU机器都行导出ONNXpython export.py --weights yolov5s.pt --include onnx --opset 11 --batch-size 1这里有几个关键参数要解释一下。opset设为11是稳妥选择Atlas的ATC工具对ONNX opset 11支持得很好opset太高可能出现某些新算子不支持batch-size设为1对应静态单batch推理如果后续要动态batch需要导出时加--dynamic参数但我建议新手先固定单batch。导出的yolov5s.onnx中模型的输入节点名是images输出是三个不同尺度的特征图。我建议先在自己熟悉的库中用onnxruntime加载跑一遍确认模型本身没问题再做ATC转换。这一步看似多此一举实际上能把问题边界划得很清楚——如果onnxruntime都跑不出结果就说明模型导出有问题别急着去折腾Atlas。3.5 ATC模型转换从ONNX到.om把ONNX文件拷贝到Atlas服务器上执行ATC转换atc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_310p \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --output_typeFP16这条命令里几个参数我逐个说明。framework5表示输入是ONNX模型这个值对应关系建议记一下0是Caffe3是TensorFlow5是ONNX。soc_version要跟你的芯片严格匹配310P芯片常见的是Ascend310P3。如果填错ATC会直接报错报错信息里会列出当前版本支持的所有Soc版本照着改成正确的就行。output_typeFP16是把模型整体转成半精度推理对YOLO这种视觉模型精度损失通常可以忽略但推理速度提升非常明显。如果转换过程中遇到算子不支持、内存不足之类的错误最常见的处理办法是升级CANN版本或者回退ONNX的opset版本。转换成功后会生成yolov5s_310p.om文件这个模型在Atlas上自带动态shape吧不是这里固定了1×3×640×640。后面想换分辨率要重新转模型这也是Atlas部署的一个特点——静态shape的模型推理最快但灵活性差一点。3.6 编写AscendCL推理脚本跑通单张图片模型转换成功后只剩最后一步写代码加载模型、准备输入、执行推理、解析输出。Python侧调用ACL的流程非常固定核心步骤是初始化、创建Context、加载模型、申请设备内存、整理输入、执行推理、拷贝输出、释放资源。我给出一个高度简化的骨架能直观看到调用链路import acl import numpy as np import cv2 # 1. 初始化ACL acl.init() dev_id 0 acl.rt.set_device(dev_id) context acl.rt.create_context(dev_id) # 2. 加载.om模型 model_id acl.mdl.load_from_file(byolov5s_310p.om) # 获取模型输入输出信息 input_desc acl.mdl.create_desc() acl.mdl.get_input_desc(input_desc, model_id, 0) input_size acl.mdl.get_input_size_by_index(model_id, 0) output_desc acl.mdl.create_desc() acl.mdl.get_output_desc(output_desc, model_id, 0) output_size acl.mdl.get_output_size_by_index(model_id, 0) # 3. 申请设备内存 input_device_ptr, ret acl.rt.malloc(input_size, 2) output_device_ptr, ret acl.rt.malloc(output_size, 2) # 4. 图像预处理letterbox 归一化 HWC转CHW BGR转RGB # 注意YOLOv5训练时用RGB、归一化到0~1输入顺序千万不能弄错 img cv2.imread(test.jpg) input_data preprocess(img) # 得到float32的(1,3,640,640)数组 # 5. 拷贝输入数据到设备内存并执行推理 acl.rt.memcpy(input_device_ptr, input_size, input_data.ctypes.data, input_size, acl.memcpy_kind.memcpy_host_to_device) acl.mdl.execute(model_id, [input_device_ptr], [output_device_ptr]) # 6. 拷贝输出回Host解析三个特征图 NMS后处理 output_data np.zeros(output_size, dtypenp.uint8) acl.rt.memcpy(output_data.ctypes.data, output_size, output_device_ptr, output_size, acl.memcpy_kind.memcpy_device_to_host) detections decode_and_nms(output_data, model_conf0.25, iou_thres0.45) # 7. 画框保存 draw_boxes(img, detections)这个骨架的关键在于第4步和第6步的preprocess、decode_and_nms需要自己实现。YOLOv5的三个输出特征图对应三个不同网格大小的检测结果需要按官方代码的逻辑先解码出框坐标和置信度再做非极大值抑制。如果你不想从零写后处理可以直接参考YOLOv5官方仓库的Detect层实现把逻辑移植过来即可。我第一次跑通这张卡时看到画面里正确框出目标心里的石头才真正落地。从装卡到这一步正常情况下一个周末可以完成前提是每个环节都按顺序走稳。4. 从“能跑”到“跑满”针对300V Pro的4项性能优化4.1 静态shape优先别滥用动态shape先说很多刚上手的人容易犯的错为了让输入分辨率灵活把模型转成动态shape。ATC是支持动态shape的但动态shape意味着模型在运行时可能发生重编译推理延迟明显增加而且占用的设备内存也更大。对YOLO检测这类输入尺寸相对固定的任务我强烈建议按实际部署分辨率固定成静态shape。具体做法就是在导出ONNX时固定分辨率ATC转换时用固定的input_shape。我的经验是如果业务场景就是640×640那就固定1×3×640×640如果不同场合需要不同分辨率可以按几个常用分辨率分别转model推理时按实际输入选用而不是用动态shape一劳永逸。4.2 用FP16打底INT8追求极致Atlas 300V Pro这颗芯片的INT8算力是FP16的好几倍。部署YOLO模型时最稳妥的性能方案是先FP16跑通保证精度和功能没问题然后再用昇腾的模型压缩工具做INT8量化。FP16的转换成本几乎为零只需在ATC命令中指定output_typeFP16即可。视觉模型在FP16下精度损失通常可以忽略实测YOLOv5s的mAP下降不超过0.5个百分点。INT8量化则要用到AMCTAscend Model Compression Toolkit。思路很清晰准备几百张代表性的校准图片工具会统计每一层激活值的分布范围把FP16模型压缩成INT8模型。这一步收益很大我实测同一张卡上INT8比FP16快30%~50%代价是需要花时间准备校准数据集以及验证量化后的精度是否仍然满足业务要求。4.3 把图像预处理下沉到AIPP在ACL推理中一个很容易被忽略的性能瓶颈是Host侧的图像预处理。YOLO的输入预处理包括resize、letterbox、BGR转RGB、归一化这些如果全在CPU上做一旦视频路数上来CPU分分钟成为瓶颈。解决办法是使用Atlas的AIPP功能把预处理放到NPU侧完成。AIPP在ATC转换时配置通过一个aipp.cfg文件指定裁剪、缩放、通道顺序转换、均值方差归一化等参数。配置完成后推理脚本直接把原始图像数据丢给模型NPU在推理前自动完成预处理。我实测下来Host CPU占用率下降非常明显一起做多路视频分析时的瓶颈完全不同了。配置方式大致是在ATC命令里指定aipp_config参数atc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_aipp \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --insert_op_confaipp.cfg注意配置AIPP后AI输入的数据类型和排布都会变化推理脚本里就不能再自己归一化了直接喂原始图像数据即可。这个调整容易引起推理结果异常建议在切换AIPP时保留一个未启用AIPP的模型做对比验证。4.4 多batch和多路并发发挥24GB大内存的价值300V Pro拥有24GB板载内存跑单个YOLOv5s模型可能只占用几百MB剩余的容量白白闲着非常可惜。两种利用思路一种是batch推理一次输入多张图提高算力利用率另一种是多路视频流并发每路一个推理线程共享同一块模型显存。batch推理的前提是模型转换时支持多batch即ATC配置input_shapeimages:4,3,640,640推理时一次喂4张图。这样能明显提升吞吐量但单帧延迟不会降低。多路视频流并发是更符合实际业务的用法。一个模型占几百MB24GB内存理论上可以支持几十路视频流同时推理。实际操作时受算力上限、CPU解码能力和内存拷贝带宽限制不能无限叠加。我的经验是先用单路压测出耗时再估算算力余量逐步增加路数同时监控NPU使用和内存占用找到合理的并发数。我最后在项目里做到8路1080p视频源实时检测NPU使用率稳定在70%左右CPU侧解码和推流成为新的瓶颈。5. 我踩过的高频坑与排查思路5.1 驱动固件CANN版本三者不匹配先看官方配套表Atlas软件栈的“版本地狱”是最劝退新人的问题。驱动版本、固件版本、CANN版本三者之间严格配套用错一个就可能在npu-smi info时正常但一跑ATC或ACL推理就报错报错信息还特别隐晦。我踩过的一次具体问题是驱动和CANN都显示安装成功npu-smi也能看到卡但执行ATC转换时报“runtime component not found”。排查了大半天最后发现是CANN Toolkit的runtime包和驱动版本不匹配。解决办法很简单在昇腾社区找到官方版本配套表所有组件严格按表格里的版本号组合安装不要贪图新版本。强烈建议安装前先把驱动、固件、CANN的版本号统一记下来或者写进部署文档。我的服务器上最终稳定运行的一版是CANN 8.0系列配套HDK 24.1系列这个组合下的ATC转换和推理接口都没再出过怪问题。给你的建议是确认自己下载的版本组合在官方配套表里能查到再动手指安装。5.2 设备反复掉线检查BIOS的Above 4G Decoding第二个高频坑来自服务器BIOS。如果你明明把卡插好了系统里却经常出现设备掉线、npu-smi时有时无或者在运行高负载推理时卡突然消失首先去BIOS里确认Above 4G Decoding是否开启。这个选项的位置各品牌主板不一样通常在PCIe设置或高级内存设置里。关闭状态下一旦NPU请求超过4GB地址空间就会触发系统层的地址映射问题轻则设备访问异常重则整机死机。我当时换了三个PCIe槽位都不得其解最后翻到BIOS设置才发现问题根源。另外如果服务器同时插了多张卡记得确认PCIe通道分配是否满足卡的带宽需求虽然x8的带宽需求不算苛刻但通道被拆分后性能会明显下降。5.3 ATC转换时报算子不支持用这两个方案绕开YOLO的ONNX模型整体结构不算复杂但一旦你用的是比较新的YOLO变体很可能在ATC转换阶段遇到某些算子不支持的报错。最常见的报错是“Unsupported op”。我第一次转YOLOv8时就卡在了某个上采样算子上。第一套绕行方案是调整ONNX的opset版本。导出ONNX时把opset从17降到11或12很多新算子会自动展开成基础算子组合ATC就能识别。第二套方案是升级CANN版本新版本会持续补充算子支持如果当前版本卡住升级到最新版本往往能解决。实在绕不开的冷门算子可以用onnx-simplifier工具对模型做一次简化把冗余的shape运算、常量折叠掉再转一次试试。我在部署一个自定义检测头时就是靠onnx-simplifier把模型清理干净后成功转换的。要注意的是每次都保留原始模型转换失败时对比一下到底是算子问题还是配置问题不要盲目重试。5.4 推理结果全为零或框位置完全不对99%是预处理问题模型转换成功、推理脚本也跑通了但输出结果里检测不到任何目标或者画出来的框位置全乱这是最让人崩溃的场景。依据我的排查经验这类问题90%以上出在图像预处理上。常见的有三种情况一是图像没有做letterbox直接把原图resize成640×640导致目标形状被拉伸检测精度骤降二是通道顺序反了YOLOv5训练用的是RGB而OpenCV的cv2.imread读出来是BGR直接喂进去模型看到的颜色空间完全错误三是归一化方式不一致训练时归一化到0~1推理时却直接用0~255的原始像素值模型输出自然异常。处理办法就是严格复刻训练时的预处理逻辑。YOLOv5官方仓库的letterbox函数直接拿出来用确保resize比例、padding方式、通道顺序、归一化因子和训练时完全一致。我建议在切换AIPP或者调整预处理代码时用一个自己标注过的测试场景图像做回归验证确认结果正常再做批量推理。5.5 多路并发后效果差先看NPU使用率再找瓶颈最后说一个更偏工程层面的坑。当你开始跑多路视频流如果NPU使用率一直上不去但总帧率也不再提升说明瓶颈不在推理卡而在数据链路。最常见的有两种情况CPU解码瓶颈1080p视频流软件解码本身就消耗大量CPU占用太高会导致预处理线程被调度延迟NPU吃不饱内存拷贝瓶颈Host和Device之间反复拷贝大尺寸图像数据PCIe带宽被占满推理队列空转。两个思路解决一是用硬解码模块Intel的QSV或者独立显卡的硬编解码能力都能分担CPU压力二是减少无效拷贝利用AIPP把图像处理尽量下沉到NPUHost只需要把原始帧数据传过去避免在Host侧做过多中间格式转换。这一步调优没有万能公式我的方法是先用npu-smi info实时观察NPU使用率和内存占用再在代码里给预处理、拷贝、推理、后处理分别加上耗时打点哪个环节耗时最长就先处理哪个。最后分享一个我自己的判断标准一张Atlas 300V Pro能否把项目撑起来核心不是单卡性能上限而是你的数据链路能不能喂饱这张卡。把推理模型从FP16切到INT8、用AIPP做预处理、用多batch提高吞吐这些手段我都实测过性能提升确实立竿见影但全部优化完成之后你的系统瓶颈往往会从NPU转移到CPU解码和网络传输上。这也正是这类推理卡和GPU最不一样的地方它的功耗、体积、单价都在告诉你它是为长时间稳定跑业务设计的而不是为跑分设计的。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进