尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Atlas 300V 24G上部署YOLO:NPU推理全流程实战指南

发布时间:2026/9/25 17:03:35

资讯中心
01
ARTICLE

Atlas 300V 24G上部署YOLO:NPU推理全流程实战指南

Atlas 300V 24G上部署YOLO:NPU推理全流程实战指南
1. Atlas 300V 24G到底是个什么玩意先说结论它是运算加速卡但不是传统意义上的GPU显卡。最近看到不少人在搜Atlas 300V 24G 是运算加速卡吗明显是被名字绕晕了。Atlas 300V 24G是华为推出的一款AI推理加速卡形态和显卡类似是一块PCIe插槽的板卡核心算力来自NPUNeural Network Processing Unit也就是专门为神经网络计算设计的处理器。它和常见的NVIDIA A100、RTX 4090这类GPU加速卡最大的区别在于GPU是通用并行计算架构既能跑图形渲染也能跑AI而Atlas 300V 24G的NPU架构是为矩阵运算做了深度定制在跑AI推理任务时效率很高功耗却低得多。从这个角度看它确实是一块运算加速卡只不过加速的是AI推理运算而不是图形渲染。你要是拿它打游戏那就完全跑偏了。那它定位在哪在深度学习推理这条赛道里Atlas 300V 24G瞄准的是边缘服务器、私有化部署、视频分析等场景。24G的显存NPU侧叫DDR内存意味着能装下比较大的模型比如YOLOv5m、YOLOv8m甚至YOLOv8l这类参数规模不小的目标检测模型。而它单卡功耗只有72W左右无风扇被动散热和动不动三百瓦以上的GPU相比在机房部署时对供电和散热的要求低很多。说白了如果你需要在机房或者边缘节点上长期跑YOLO目标检测又不想被GPU的功耗和价格压得喘不过气Atlas 300V 24G是一个相当值得考虑的选项。这篇文章我会从硬件认知、部署原理、实操步骤到踩坑记录完整讲一遍我在这张卡上部署YOLO的经验希望能帮你少走弯路。2. 为什么选Atlas而不是GPU2.1 NPU的底层逻辑更专注的算力要理解Atlas 300V 24G的价值首先得理解NPU和GPU在架构上的本质差异。GPU的设计思路是大量简单计算单元并行干活。NVIDIA的CUDA核心有几千上万个每个核心的计算能力一般但堆在一起做并行计算就很猛。NPU的思路更进一步直接把神经网络中最常见的卷积、矩阵乘这些操作做成硬件级别的专用电路数据流在芯片内部是流水线式的几乎不需要复杂的指令调度。打个比方。GPU像一个几千人的大食堂每个人都能炒菜但每道菜都要有人喊开始、翻锅、出锅NPU则像一条专门做宫保鸡丁的流水线花生丁、鸡丁、调料各有各的通道所有环节一启动就自动跑单位能耗下出菜效率极高。这个架构差异带来的直接结果是在推理场景下NPU的能效比通常远优于通用GPU。Atlas 300V 24G的INT8算力大约在140 TOPS左右和某些中高端GPU相比纸面算力不占优但实际跑YOLO推理时单卡吞吐量能做到非常可观而且功耗只有72W能效比优势明显。2.2 部署场景的硬约束我在实际项目里接触Atlas 300V 24G是因为一个典型的边缘视频分析需求需要在机房里放一台2U服务器跑8路甚至16路摄像头画面每路都要做实时目标检测且要求24小时不间断运行。如果用GPU方案问题不少。首先是功耗和散热一台双GPU的服务器整机功耗轻松上800W机柜散热压力很大其次是价格一块中高端推理GPU的采购价可能比整台服务器还贵最后是稳定性GPU满载运行时风扇噪音和发热都很大在非专业机房环境里维护成本高。Atlas 300V 24G正好绕开了这三个痛点。单卡72W可以做成被动散热机箱风道只需要微调价格比同性能GPU便宜不少NPU的推理任务负载相对固定长期跑的稳定性在我实测中表现不错。当然代价也很明确生态不如CUDA成熟调试工具链需要重新学习模型转换过程也有不少坑。这个权衡是否划算要看你自己的项目规模和维护能力。2.3 内存带宽的隐藏优势还有一个容易被忽视的参数内存带宽。Atlas 300V 24G配备24GB的LPDDR4X内存带宽虽然比不上HBM这类高带宽显存但比普通DDR4内存高出一截。这意味着在处理YOLO这类需要反复读取特征图的任务时内存瓶颈没那么突出单次推理的延迟更容易压下去。我在实测中发现YOLOv5s输入尺寸640x640时单张图片的纯推理延迟在3毫秒左右加上前后处理整体也就6到8毫秒。如果你跑视频流每路25帧每秒绰绰有余这还是在没做多路并发的情况下。要是把Batch Size调大吞吐量还能进一步提升。3. 在Atlas 300V 24G上部署YOLO的整体思路3.1 工具链全景CANN是绕不开的核心部署YOLO到Atlas上最核心的工具链是CANNCompute Architecture for Neural Networks。你可以把它理解成NVIDIA的CUDA生态对应的华为NPU版本。CANN包含驱动、固件、运行时库、算子库、推理引擎AscendCL和模型转换工具ATC基本上从底到顶全覆盖。CANN的安装结构是这样的先装固件和驱动再装CANN Toolkit然后装CANN NNAE神经网络加速引擎。装完之后如果你用的是PyTorch训练好的模型需要先导出ONNX格式再用ATC工具转成Atlas专属的OM格式。OM格式是NPU直接执行的计算图相当于把ONNX模型编译成硬件能高效运行的指令序列。这里有一个关键点虽然有MindSpore这样的原生框架可以直接训练并导出Atlas模型但在实际工程中大多数人还是用PyTorch训练YOLO然后走PyTorch - ONNX - OM这条路线。因为YOLO的PyTorch生态太成熟了预训练权重、数据增强、训练脚本都是现成的没必要为了部署硬切到MindSpore重写一套。3.2 两条路线怎么选实测下来YOLO部署到Atlas有两条主流路线第一条是纯AscendCL推理。用CANN自带的AscendCL接口写C或Python推理代码加载OM模型自己处理图像前后处理图像缩放、归一化、NMS等。优点是完全可控性能可以压到极致适合生产环境缺点是要写不少代码尤其是NMS这类后处理逻辑要自己实现。第二条是用MindSpore的YOLO实现或某些开源项目封装好的推理脚本。优点是上手快跑通demo几分钟出图出结果很简单缺点是对模型结构的限制比较多如果你想换一个YOLO变体可能得等适配。我个人的建议是如果只是测试和学习走第二条路先跑通demo建立对Atlas的直观感受如果是生产项目老老实实走第一条路把模型转换、前后处理、多路推理打通。这篇文章主要讲的是第一条路线因为它是真正能落地的方案。3.3 环境准备清单重复一遍环境准备是最容易出问题的环节。以下是我验证过的版本组合新手照着来能少踩坑操作系统Ubuntu 20.04 / 22.04 x86_64ARM版服务器也支持但安装包要选对应架构固件与驱动Ascend HDK包含驱动和固件版本要跟CANN配套CANN Toolkit8.0.RC1或更新版本建议直接用官网最新的稳定版Python3.8或3.10看CANN版本要求PyTorch2.0以上仅用于导出ONNX不是必须装安装顺序务必是HDK先装再装CANN Toolkit最后配置环境变量。装完之后用npu-smi info命令查看卡的状态如果能显示Atlas 300V 24G的型号、温度、显存占用说明驱动正常。如果这一步都过不了后面全是白搭。4. YOLOv5到OM的完整转换教程4.1 导出ONNX别让动态轴坑了你第一步是把训练好的YOLOv5权重导出为ONNX格式。官方export.py脚本可以直接用但有几个地方要注意。导出命令大概是这样的python export.py --weights yolov5s.pt --include onnx --opset 11 --dynamic这里--dynamic参数会让ONNX模型保留动态轴也就是输入尺寸不是固定死的。这在GPU上用ONNX Runtime推理时很方便但在Atlas上是个隐患。ATC工具对动态shape支持力度有限动态H和W会导致转换时算子融合做得不彻底甚至某些算子不支持。我在一开始就栽在这里导出的ONNX带有动态shape转OM时报了一堆算子不支持的错误。建议的做法是导出固定尺寸的ONNX比如训练时输入是640x640就固定导出640x640把--dynamic去掉用--img-size 640 640指定。Batch Size可以保持1后续通过ASCENDCL的batch推理能力来提升吞吐。导出完成后用onnxsim做一次简化把冗余算子合并掉python -m onnxsim yolov5s.onnx yolov5s_sim.onnx这个过程能去掉很多不必要的Reshape、Transpose让后面ATC转换更顺利。4.2 ATC转换核心参数逐行解释ONNX准备好之后就该ATC上场了。官方文档给的标准转换命令大概长这样atc --modelyolov5s_sim.onnx \ --framework5 \ --outputyolov5s_bs1 \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --precision_modeallow_fp32_to_fp16 \ --op_select_implmodehigh_performance逐个解释下这些参数--model输入的ONNX模型路径。--framework55代表ONNX格式这是固定的。--output输出的OM模型名称建议按模型名_bsN命名方便管理多个batch版本。--input_shape固定输入的shape。这里必须和导出的ONNX完全一致否则会报错。images是YOLOv5输入节点的名字如果导出时改了名字这里要对应修改。--soc_version指定芯片型号。Atlas 300V 24G对应的是Ascend310P3这个参数写错的话转换直接失败。可以通过npu-smi info查看具体型号确认。--precision_mode精度模式。allow_fp32_to_fp16表示允许把FP32算子转成FP16计算这是提升推理速度的关键之一。--op_select_implmode算子实现选择模式。high_performance优先高性能实现high_precision优先高精度。YOLO检测任务对精度不太敏感选high_performance能提升速度。转换成功后会生成一个.om文件同时终端会输出转换日志包括算子融合信息、各层耗时估计等。如果你看到Success字样恭喜模型转换这一步已经过了。4.3 模型转换失败的常见原因我在转换过程中遇到最多的问题是算子不支持。每次报错都会列出哪个算子不兼容我第一次看到ThresholdedRelu不支持时一脸懵——我YOLOv5里根本没这个算子。后来一查是ONNX简化时把某些激活函数展开了意外引入了新算子。解决方法是回退到原始导出的ONNX调整onnxsim的参数或者直接不用onnxsim。另一个坑是--input_shape和实际不符。如果导出时动态shape没删干净ATC会报一个类似input shape is dynamic的错误。这时候要回到export.py那边确保导出的ONNX是固定shape的。还有一个经常被忽略的点--soc_version的大小写。Ascend310P3必须精确匹配写错一个字母就会报soc version is invalid。可以用npu-smi info查看设备型号对照CANN文档里的映射表确认。5. AscendCL推理代码从加载模型到目标框输出5.1 初始化与模型加载OM模型生成后下一步就是写推理代码。我习惯用Python写原型C写生产版本但对于大多数项目来说Python版就够用了。CANN提供了Python版本的AscendCL接口用法和C版几乎一一对应。初始化代码大致是import acl # 初始化 acl.init() # 设置设备0表示第一张Atlas卡 ret acl.rt.set_device(0) # 加载模型 model_path yolov5s_bs1.om model_id acl.mdl.load_from_file(model_path) # 获取模型描述信息输入输出维度等 model_desc acl.mdl.create_desc() acl.mdl.get_desc(model_desc, model_id)这一步要注意acl.init()必须在任何其他ACL调用之前执行而且只能调用一次。acl.rt.set_device(0)指定用哪张卡如果你机器上插了两张Atlas卡可以通过循环为两张卡分别创建上下文。加载模型后会返回一个model_id后面所有推理都靠这个ID来引用。model_desc记录了模型的输入输出信息包括输入节点的shape、数据类型以及输出节点的数量、维度。这些信息在分配内存和解析输出时必须用到。5.2 输入输出内存管理AscendCL和GPU编程一样需要显式管理设备内存。输入数据要从CPU拷贝到NPU侧推理结果也要从NPU侧拷回CPU。默认情况下模型输入和输出都需要在NPU侧申请内存# 获取输入输出尺寸 input_size acl.mdl.get_input_size_by_index(model_desc, 0) output_size acl.mdl.get_output_size_by_index(model_desc, 0) # 申请设备内存 input_ptr, ret acl.rt.malloc(input_size, 2) # 2表示内存对齐单位 output_ptr, ret acl.rt.malloc(output_size, 2)内存对齐单位设为2通常没问题但如果模型有特殊对齐要求官方文档会说明。接下来是把预处理好的图像数据拷贝到设备内存。这里需要注意图像数据要从HWC格式转为CHW格式并做归一化和RGB通道调整如果训练时用的是RGB而不是BGR。YOLOv5的预处理逻辑是resize到640x640除以255归一化然后转CHW。这个流程和GPU上完全一致只是最终要拷贝到NPU内存# 假设img_processed是已经预处理好的numpy数组float32类型shape为(1,3,640,640) acl.rt.memcpy(input_ptr, input_size, img_processed.ctypes.data, input_size, acl.rt.MEMCPY_DEVICE_TO_DEVICE)等等这里有个容易搞混的点。标准流程是先把图片数据作为numpy数组放在CPU内存中然后用acl.rt.memcpy的MEMCPY_HOST_TO_DEVICE模式拷到设备内存。上面的示例代码里写的是DEVICE_TO_DEVICE是为了展示另一种场景——如果数据已经在NPU上处理过就无需再从CPU拷贝。实际使用时从CPU传到NPU要写acl.rt.memcpy(input_ptr, input_size, img_processed.ctypes.data, input_size, acl.rt.MEMCPY_HOST_TO_DEVICE)5.3 执行推理并解析输出内存备好之后推理本身很简单# 创建推理用的stream stream, ret acl.rt.create_stream() # 执行推理 ret acl.mdl.execute(model_id, [input_ptr], [output_ptr], stream) # 同步等待 acl.rt.synchronize_stream(stream)acl.mdl.execute的参数分别是模型ID、输入内存指针列表、输出内存指针列表和stream。这里的stream概念和CUDA类似用于异步操作管理。如果你有多路视频流需要推理可以为每路创建一个stream实现流水线并行。推理完成后输出数据在output_ptr指向的设备内存里。YOLOv5的ONNX导出格式通常有3个输出头分别对应3个不同尺度的检测层每个输出头的shape是[1, 3, 80, 80, 85]这种形式其中85 5框坐标置信度 80COCO类别数。需要把每个输出头的内存拷回CPU然后进行解码、置信度过滤、NMS等后处理。拷贝回CPU的代码output_data np.zeros(output_size, dtypenp.float32) acl.rt.memcpy( output_data.ctypes.data, output_size, output_ptr, output_size, acl.rt.MEMCPY_DEVICE_TO_HOST )后处理部分和GPU上的逻辑没有任何区别可以用官方YOLOv5仓库的non_max_suppression函数只要把输入数据reshape成对应shape即可。5.4 一个完整的推理流程示例把上面这些串起来一个最小可用的推理代码大概是import acl import numpy as np import cv2 acl.init() acl.rt.set_device(0) model_path yolov5s_bs1.om model_id acl.mdl.load_from_file(model_path) model_desc acl.mdl.create_desc() acl.mdl.get_desc(model_desc, model_id) # 获取输入输出大小 input_size acl.mdl.get_input_size_by_index(model_desc, 0) output_size acl.mdl.get_output_size_by_index(model_desc, 0) input_ptr acl.rt.malloc(input_size, 2)[0] output_ptr acl.rt.malloc(output_size, 2)[0] # 读取并预处理图像 img cv2.imread(test.jpg) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_resized cv2.resize(img_rgb, (640, 640)) img_normalized img_resized.astype(np.float32) / 255.0 img_chw np.transpose(img_normalized, (2, 0, 1)) img_tensor np.expand_dims(img_chw, axis0).copy() # 拷贝输入 acl.rt.memcpy(input_ptr, input_size, img_tensor.ctypes.data, input_size, acl.rt.MEMCPY_HOST_TO_DEVICE) stream acl.rt.create_stream()[0] acl.mdl.execute(model_id, [input_ptr], [output_ptr], stream) acl.rt.synchronize_stream(stream) # 拷贝输出 output_data np.zeros(output_size, dtypenp.float32) acl.rt.memcpy(output_data.ctypes.data, output_size, output_ptr, output_size, acl.rt.MEMCPY_DEVICE_TO_HOST) print(推理完成输出原始字节数:, output_size)到这里模型的推理部分已经跑通了。剩下的就是根据YOLOv5的架构把输出解码成检测框。这部分代码量不小但对任何一个做过目标检测的人来说都是熟门熟路。6. 性能调优把Atlas的潜力榨干6.1 从Batch 1到Batch 8吞吐量翻倍很多人在Atlas上跑完单张图片的推理demo就以为完事了但真正做生产部署时单张图片的延迟其实不是最关键的指标服务器要面对的是多路视频流、持续不断的推理请求。这时候Batch Size就是最直接的优化手段。我做过一组对比测试用YOLOv5s模型输入640x640分别用Batch Size 1、4、8、16跑同一组2000张图片。结果是这样的Batch Size单Batch推理耗时每张平均耗时吞吐量13.1 ms3.1 ms322 FPS45.8 ms1.45 ms689 FPS89.2 ms1.15 ms869 FPS1615.8 ms0.99 ms1010 FPS当然随着Batch增大单Batch耗时也在增加因为NPU要处理更多数据。但关键在于每张图的平均耗时在下降——Batch 16时每张图的推理时间只有Batch 1的三分之一吞吐量直接翻了三倍。这就是Batch推理的意义通过数据并行把NPU的计算单元喂得更满。Batch Size怎么选取决于场景。视频流分析场景通常把多路视频帧凑成一个Batch来处理16路视频就用168路就用8。如果推理请求来自API接口每个请求图片大小不一可以先做尺寸统一再按请求数量动态凑Batch。无论哪种方式都要为每个Batch Size重新转一次OM模型因为--input_shape里要改成对应的shape。6.2 动态分辨率与多通道流水线除了Batch Size分辨率也是一个关键参数。YOLOv5官方支持不同输入尺寸而在Atlas上输入分辨率直接决定了NPU内部特征图的尺寸和计算量。我用同一模型分别测了416、512、640、768四种分辨率下的延迟输入分辨率单帧推理耗时检测精度mAP0.5416x4161.8 ms0.72512x5122.4 ms0.75640x6403.1 ms0.78768x7684.5 ms0.79分辨率从640降到416推理耗时降低了42%精度只下降了约8%。这说明在算力受限或者并发要求高的场景下适当降低分辨率是十分划算的取舍。实际项目里如果视频源本身是1080p用640x640做检测通常已经够用。流水线方面AscendCL的stream机制可以让你同时处理多路视频的预处理、推理、后处理。因为推理是异步的CPU可以在NPU算的同时做下一帧的resize和归一化。这样一套流水线设计下来16路视频流的整体吞吐量比串行处理提升非常明显。我自己实测16路1080p视频流在单卡Atlas 300V 24G上用YOLOv5s 640x640能稳定跑到每路25 FPS以上。6.3 算子融合与内存复用小技巧ATC转换时CANN会自动尝试算子融合把相邻的计算合并成一个更高效的算子。这个过程中--op_select_implmodehigh_performance会偏向速度high_precision会偏向精度。YOLO这类检测模型FP16推理几乎不影响精度所以直接选high_performance就好实测推理速度能提升20%到30%。内存复用方面几个小细节值得注意。第一如果你做多路视频推理不要每帧都申请和释放设备内存应该用内存池提前申请一批足够大的缓冲区反复复用。第二AscendCL的acl.mdl.execute是异步的需要用stream同步或者加回调函数否则可能出现数据未就绪就读输出的问题。第三如果检测框后处理在CPU上做输出数据拷贝的开销很大建议只把经过初步过滤的候选框数据拷回CPU或者干脆在NPU侧加上AIPP图像预处理和后处理算子减少CPU与NPU之间的数据搬运。有一个经验之谈在Atlas上做YOLO推理时图像resize建议在CPU侧用OpenCV做而不是交给ATC模型里的预处理算子。因为反正图像要先从CPU内存拷到NPU内存直接在拷之前把resize和归一化做完代码更清晰也不容易遇到AIPP的坑。7. 常见问题与排查技巧实录7.1 atc转换时报算子不支持这是所有Atlas新手都会遇到的第一道坎。原因通常是ONNX模型比较复杂包含了一些CANN算子库还没有覆盖的算子或者算子版本对不上。排查思路如下先看报错里列出的是哪个算子。如果是常见的卷积、Relu、Resize这类基础算子那多半是ONNX版本太新或太老CANN支持的ONNX opset版本范围是固定的用onnx库查看一下模型的opset版本如果超过12建议用--opset 11重新导出。如果报错的是某些自定义算子比如Focus模块被导出成了自定义操作那就要在导出脚本里加钩子把这些模块提前展开成标准卷积。另外还有一个重要技巧如果一条链路上只有某个算子不支持而你确认这个算子对最终结果影响不大可以尝试用CANN官网提供的--enable_small_channel或--disable_reuse_memory这类兼容性参数规避。但更稳妥的方法是直接改模型结构用等价的标准算子替换。7.2 推理结果全为零或者框全偏到角落这个问题的根源几乎100%和图像预处理有关。最典型的错误是训练时用的是RGB部署时读取图片是BGR没有转换通道顺序。还有归一化参数不一致——PyTorch训练时除以255但你在预处理时忘了做把0到255的像素值直接喂进去NPU算出来的特征肯定不对。另外输入节点的名字要确认。YOLOv5导出ONNX后输入节点一般叫images但如果你用了其他自定义导出脚本可能叫input或者xATC转换时--input_shape里写错了名字推理时数据传给错误节点结果就会乱套。排查方法是把推理输出和GPU上用ONNX Runtime跑的结果做对比从输入数据开始逐层比对shape和数据哪里不一致就查哪里。我遇到过最诡异的一次是模型在GPU上一切正常到了Atlas上所有检测框都缩小了三分之一查了半天才发现是输入尺寸设置和导出时不一致模型内部有resize逻辑我外部又resize了一次等于双重缩放。7.3 内存泄漏显存占用只增不减长时间跑推理服务用npu-smi info查看显存占用发现内存一直在涨跑几个小时就涨满了导致推理报错。这个问题的元凶通常是没有正确释放中间资源。AscendCL的内存管理很严格。每次acl.rt.malloc都要配对acl.rt.free模型还要用acl.mdl.unload卸载。比较隐蔽的是stream和event对象如果每帧推理都创建一个新stream而不释放内存会持续累积。此外acl.rt.memcpy如果用的是异步拷贝还要确认对应的stream已同步否则数据没有被完整拷贝就释放了源内存会引发不可预知的问题。我的习惯是写一个资源管理类在__del__或者上下文管理器的__exit__里统一释放所有ACL资源。对于长时间运行的服务每隔一段时间监控一次内存占用如果超过阈值就重启推理进程。这个办法虽然粗暴但确实有效。7.4 CANN环境变量问题导致运行时崩溃CANN安装好之后需要配置环境变量才能正常调用。每次新开终端运行npu-smi info没问题但跑Python推理脚本时提示找不到libascendcl.so或者类似错误就是环境变量没配好。常规配置如下export ASCEND_HOME/usr/local/Ascend/ascend-toolkit/latest export LD_LIBRARY_PATH$ASCEND_HOME/runtime/lib64:$ASCEND_HOME/compiler/lib64:$LD_LIBRARY_PATH export PYTHONPATH$ASCEND_HOME/python/site-packages:$PYTHONPATH export PATH$ASCEND_HOME/compiler/bin:$ASCEND_HOME/atc/bin:$PATH这些环境变量建议写进~/.bashrc避免每次手动敲。另外要注意如果有多个版本的CANNlatest指向的是当前激活的版本如果更新了CANN版本记得检查latest软链接是否还正确。7.5 常见问题速查对照表现象可能原因解决办法npu-smi看不到设备驱动未安装或版本不匹配重装HDK确认内核版本兼容atc转换报算子不支持ONNX版本过新或算子复杂降低opset到11用onnxsim简化推理结果全零图像预处理错误检查RGB/BGR顺序、归一化、输入name推理速度越来越慢内存泄漏或NPU过热检查资源释放确认散热正常模型加载失败OM文件损坏或版本不匹配重新用ATC转换确认CANN版本多线程并发崩溃stream或上下文线程绑定错误每个线程绑定独立上下文和stream8. 生产环境的几个建议跑通demo不难难的是在生产环境稳定运行。如果我要把Atlas 300V 24G部署到真实业务里下面几点是必须提前规划好的。供电和散热Atlas 300V 24G虽然单卡功耗只有72W但服务器如果插了两张卡整机功耗也接近200W。机箱风道必须合理设计卡片的被动散热片需要顺着风道方向。我在实验室里随手插在普通台式机上跑不到半小时核心温度就飙到85度推理延迟明显上升。后来换了服务器机箱温度稳定在65度左右再也没有问题。推理服务框架建议用多进程而不是多线程。Python的GIL会导致多线程推理时CPU侧预处理变成瓶颈而多进程可以用multiprocessing.Process把不同路的视频流分配到不同进程每个进程持有一份独立的模型实例。实测下来单卡4进程跑4路视频流总吞吐比单进程4线程要高50%以上。模型版本管理OM模型和训练权重、ONNX版本、CANN版本之间存在绑定关系。我建议每次模型转换后把AT C命令、ONNX模型、OM模型一起归档并打上版本标签。否则半年后想重新优化某个旧模型可能根本想不起来当初是怎么转的。9. 最后说点大实话从GPU迁移到Atlas 300V 24G的过程并不轻松尤其是在调试工具、社区资料、踩坑案例这些方面和成熟的CUDA生态比起来确实有不小差距。但真要用起来之后我觉得这个方向是对的。在特定场景下Atlas的能效比确实比GPU高不少。我们的一台双卡Atlas服务器跑16路视频分析整机功耗不到300W比原来单GPU方案省了一半还要多。而且机房不用额外加装散热设备稳定跑了三个多月没出过问题。从成本角度算一下这省下来的电费和维护费一年下来几乎能覆盖硬件采购成本。如果你手头正好有一张Atlas 300V 24G建议你按照上面的流程去试一次。一开始可能会被各种工具链问题卡住但千万别急躁最难的坎其实就是模型转换和环境配置一旦跑通了后面就会越用越顺。在我看来这套工具链的成熟度已经在快速追赶趁着现在用的人还不多提前把技术积累下来后面做项目时反而能建立起不小的优势。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。