ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Atlas 300V 24G推理卡深度解析:从YOLO部署到性能调优

Atlas 300V 24G推理卡深度解析:从YOLO部署到性能调优 这两年搞AI落地的人估计都躲不开一个词Atlas。我最早接触Atlas 300V 24G这块板卡是在一个智慧园区项目里客户要求同时跑几十路实时视频流做安全帽和区域入侵检测预算又卡得死买不起一水儿的旗舰GPU。当时就是抱着试一试的心态拿Atlas 300V去验证结果一跑就是一年多期间还经历了从YOLOv5换到YOLOv8、从单卡折腾到多卡的全过程。这篇文章就把我对这块卡的完整理解和实操经验盘一盘重点回答那个被问烂了的问题Atlas 300V 24G到底是不是运算加速卡以及怎么在上面把YOLO系模型跑得又快又稳。先说结论它是运算加速卡而且是那种专门为推理场景设计的加速卡。它和常说的训练卡不一样不是用来从零训练大模型的而是把已经训练好的模型跑出高吞吐、低延迟。整个部署链路和GPU大同小异但坑又完全不一样。这篇文章我会从硬件定位、环境搭建、模型转换、推理调优到问题排查把每个环节掰开揉碎讲清楚尤其适合正在选型或者卡在部署环节的工程师看。1. 先搞清楚Atlas 300V 24G是什么卡、能干什么1.1 这块卡的身世和定位Atlas 300V是昇腾AI产品线里的一款推理卡。核心芯片是昇腾310P内部集成了AI CoreAI计算核心、ARM CPU核、DVPP视频预处理单元和各类编解码引擎。整卡的形态是标准半高半长PCIe卡插在服务器的PCIe插槽上就能用不挑整机品牌只要是标准x86或ARM服务器基本都能兼容。很多刚接触的人会把它和“深度学习显卡”画等号这个理解对了一半。它确实承担神经网络的计算任务但它更擅长的是“把训练好的模型跑起来”而不是“把模型从零练出来”。训练场景需要的是大规模并行计算和高速数据回传推理场景则更看重延迟、吞吐、功耗和单位成本。Atlas 300V就是奔着后者去的。卡上的24G指的是板载内存容量准确说是LPDDR4X显存。24G这个容量在推理卡里属于比较舒服的档位比常见的8G、16G推理卡宽松不少。跑当前主流的YOLO系模型甚至一些轻量级Transformer模型都能装下且还能余出batch空间。1.2 24G显存到底意味着什么很多同学对“显存大”没什么具体概念我举个例子。YOLOv5m的模型权重大概在40MB上下转成OM离线模型后体积不会暴涨。理论上一张24G卡塞下几百个YOLOv5m实例都行但实际不会这么干因为推理性能还受AI Core利用率和内存带宽限制。显存更实际的意义在于能开更大的batch。以YOLOv8s为例如果输入分辨率是640x640在Atlas 300V上单batch推理的延迟大约在几毫秒到十几毫秒之间开batch 4到batch 8吞吐能成倍往上翻。24G显存可以让batch开得更激进这是小显存卡做不到的。还有一个容易被忽略的点Atlas 300V支持多路视频硬解码。卡上集成了DVPP模块能直接对H.264/H.265视频流做解码、缩放、色域转换不需要占用CPU和AI Core来干这些脏活累活。24G内存也会分一部分给DVPP做帧缓存。这就是为什么Atlas 300V在视频分析场景特别吃香——解码、预处理、推理、后处理全链路都能在卡上完成CPU只负责分发任务和接收结果。1.3 为什么偏偏是YOLO成为主力场景YOLO系列在工业界的地位不用多说从YOLOv5到YOLOv8再到最新的YOLOv9、YOLO11目标检测的主流战场始终有它的一席之地。Atlas部署YOLO之所以成为热搜词一方面是因为YOLO模型的算子结构相对规整转换到昇腾OM格式的兼容性好另一方面是Atlas的推理性能对CNN类模型特别友好。一张Atlas 300V 24G跑YOLOv5s640x640输入单卡吞吐可以做到几百FPS级别的理论算力指标实际多路视频流跑下来每路十几到几十FPS完全没问题。具体数值取决于视频路数、分辨率、模型大小和是否开启AIPP等优化。这个性能水平落在成本上单路视频分析的硬件摊销非常低这也是很多集成商选它的核心原因。2. 部署YOLO的整体方案与硬件选型逻辑2.1 为什么选Atlas而不是纯GPU方案这个问题我每次分享都会被追问。先说结论不是所有场景都适合用Atlas但视频推理类场景它确实是性价比很高的选择。拿GPU方案对比。一张主流推理级GPU显存和算力都强能跑任意框架任意模型生态也确实成熟。但代价是贵、功耗大、供货周期长。Atlas 300V 24G的典型功耗只有几十瓦无需外接供电插上PCIe就能跑。同样跑几十路YOLO视频流整机功耗和硬件采购成本能低一截。Atlas的另一大优势是软硬一体。CANN工具链虽然上手曲线比CUDA陡但一旦跑通稳定性相当不错。尤其是硬件解码、图像预处理这些能力被深度整合到推理流水线里以后CPU负载很低整机可以塞更多路数。当然它也有短板算子兼容性不如GPU全模型转换偶尔要动算子或改结构社区资料少中文文档虽然多但碎片化严重遇到问题排查成本高。所以我的选型建议是如果你的业务以YOLO家族、ResNet系、轻量分类模型为主推理场景明确且量大Atlas是很好的选择如果模型结构经常变、需要频繁实验新论文模型GPU方案依然更省心。2.2 部署整体流程概览在Atlas上跑YOLO整个流程可以拆成四段环境准备、模型转换、推理执行、业务集成。环境准备包括安装驱动、固件、CANN工具包配置环境变量。模型转换是把PyTorch或ONNX模型通过ATC工具转成昇腾的OM格式。推理执行有两种方式一种是直接用CANN提供的Python接口写推理脚本另一种是通过MindSpore或TensorFlow框架的后端来加载OM模型。业务集成就是把它接进你的视频流服务、告警服务、业务平台里。很多人会觉得“模型转换”这步最玄学其实它是最标准化的。只要ONNX导出没问题、算子兼容性检查通过ATC转出来的OM模型就能直接跑而且跑起来比原框架下更高效。后面我会详细讲每个环节的实操命令和参数。2.3 硬件环境准备要点先别急着怼驱动把硬件环境搞对了能少踩一半坑。Atlas 300V是标准PCIe卡但要注意主板PCIe插槽供电能力。虽然它不需要外接供电但PCIe插槽本身要能提供足够的电流老服务器或低端主板可能出现供电不足导致卡识别不稳定。散热也是个容易翻车的点。这张卡是被动散热设计依靠服务器系统风扇风流带走热量。如果装在塔式服务器里也没有专门对着卡吹的风扇高负载下核心温度容易飙到90度以上触发降频性能和稳定性都会受到影响。建议至少保证卡周围有持续气流。另一个要点是PCIe链路协商。Atlas 300V支持PCIe 3.0/4.0如果插在PCIe 3.0 x8或x4的插槽上也能用但会限制数据吞吐。单路视频流解码传帧的数据量不大影响不明显但如果是大批量离线图片推理、频繁在卡和CPU之间搬数据x16和x4的差异就很可感了。装机时尽量插在CPU直连的PCIe x16槽位上。3. 从零开始Atlas 300V上跑通YOLOv8的完整步骤3.1 驱动、固件和CANN的安装环境安装是整个流程里最容易“劝退”的一环因为版本组合很重要。昇腾的软件栈有严格的对齐关系驱动版本、固件版本、CANN版本要匹配切换版本不能只看单独某个组件。建议直接去昇腾社区下载对应产品线的驱动固件包和CANN工具包按照官方文档里“驱动固件安装”一节操作。常规步骤是先安装驱动再升级固件最后安装CANN。安装前最好先用npu-smi info确认系统能否识别到卡识别不到的先查PCIe枚举和供电。# 查看是否可以识别到昇腾设备 npu-smi info # 若识别正常会列出设备信息包括芯片型号、内存大小、固件版本等安装驱动时推荐用root用户执行CentOS/Ubuntu都支持。安装完成后设置环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh这个环境变量文件会把CANN的编译工具链、运行时库路径都加进去。每次新开终端记得重新source或者写进/etc/profile里。3.2 从PyTorch权重到ONNX模型环境就绪后先把模型从PyTorch转成ONNX。这里踩过的坑比想象中多。YOLOv8官方仓库导出ONNX很方便ultralytics库自带export功能。但有几个细节必须注意。第一opset版本不能太低也不能过高。常见兼容区间是11到13推荐固定12。我用opset 11转过YOLOv8s能在ATC转换成功但某些算子的表达方式不是最优的opset 13某些新算子ATC支持得一般。opset 12最稳。第二导出时要把模型切成推理模式关闭训练专用的算子避免出现nn.Dropout、nn.BatchNorm等影响结构的模块被导出。ultralytics库默认导出DNN推理图一般没问题但如果有自研检测头最好像这样导出import torch from ultralytics import YOLO model YOLO(yolov8s.pt) model.model.eval() dummy_input torch.zeros(1, 3, 640, 640) torch.onnx.export( model.model, dummy_input, yolov8s.onnx, opset_version12, input_names[images], output_names[output0], dynamic_axes{images: {0: batch}} )注意这里dynamic_axes我只设了batch维度动态高度和宽度保持固定640x640。这是有意为之过高频次的动态分辨率会导致ATC转换出来的模型性能下降如果业务分辨率基本固定直接静态尺寸最好。第三导出后用onnxsim过一遍可以清理掉很多冗余节点。命令是python -m onnxsim yolov8s.onnx yolov8s_sim.onnx这一步我几乎每次都会做能明显减小ONNX体积对ATC转换成功率和转换时间都有正向影响。3.3 ATC工具把ONNX转成OM模型拿到干净的ONNX后核心动作是用ATC工具转成OM模型。ATC命令参数很多但常用参数就几个atc --modelyolov8s_sim.onnx \ --framework5 \ --outputyolov8s_ascend \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --output_typeFP16 \ --insert_op_confaipp.cfg逐个参数说清楚。--framework5表示输入是ONNX模型。--output是转换产出的OM文件前缀。--input_shape必须和导出ONNX时的输入shape一致如果导出时动态batch这里可以固定一个batch值比如1,3,640,640。--soc_version要填你实际芯片版本Atlas 300V对应Ascend310P3不同小版本可能不同建议用npu-smi info查看芯片具体型号后对照文档填。--output_typeFP16是精度模式。昇腾推理卡走FP16是性能最优路径YOLO这种目标检测模型对FP16精度损失不敏感可以放心用。如果业务对精度极其敏感也可以保持FP32但吞吐会打折。--insert_op_conf是AIPPAI Preprocessing配置文件。AIPP的作用是把图像的缩放、归一化、通道变换这些预处理塞进模型里让NPU在推理时顺带完成。这是Atlas上做视频推理的关键优化。一个典型的AIPP配置如下aipp_op { aipp_mode: static input_format: RGB888_U8 mean: 0.0 0.0 0.0 min: 0.0 0.0 0.0 csc_switch: true rbuv_swap_switch: true }input_format取决于你的输入源。如果你的上游是BGR的OpenCV帧记得设置rbuv_swap_switch: true或对应的通道交换参数否则推理结果会是“歪”的。mean和min对应归一化参数如果模型训练时用了ImageNet的mean/std在这里填mean为对应值min填像素缩放比例。实际使用要按YOLO模型的预处理参数来填YOLOv8一般用范围[0,1]归一化那min可以填0.003921569即1/255。转换成功的标志是看到ATC run success然后目录下会多出yolov8s_ascend.om文件。如果中途报错大概率是算子不支持或shape不匹配。报错信息里会明确提示是哪个算子失败可以记录下来去昇腾社区搜绝大多数情况都有解。3.4 用Python接口跑通推理验证模型转好后可以先用CANN的Python接口做一次最小化验证。import numpy as np import cv2 from ais_bench.infer.interface import InferSession model_path yolov8s_ascend.om session InferSession(0, model_path) img cv2.imread(test.jpg) img cv2.resize(img, (640, 640)) img img[:, :, ::-1] # BGR - RGB # 如果AIPP里没有配置预处理自己要先做归一化和HWC-CHW img img.astype(np.float32) / 255.0 img np.transpose(img, (2, 0, 1)) img np.expand_dims(img, axis0).copy() outputs session.infer(feeds[img]) print(outputs[0].shape) print(outputs[0])ais_bench是昇腾社区提供的推理benchmark工具也封装了Python接口用来做单卡推理验证很方便。InferSession(0, model_path)里的0是设备ID。如果服务器插了多张卡可能有0、1、2等多个设备。这一步跑通之后模型层面就算通了。接下来要做的就是把推理输出解析成检测框。YOLOv8的输出是二维数组形状是(1, 84, 8400)前4列是框坐标cx, cy, w, h后面80列是类别置信度。后处理逻辑和PyTorch里一样只是把数组在内存里搬出来用NumPy处理就行。在实际项目中我不会把后处理放在Python脚本里慢慢跑而是会用C或者CANN的流式处理做或者至少用多进程池来并行做后处理因为Python的逐框NMS在640x640输入下要消耗几毫秒多路视频累加起来很可观。4. 性能调优与推理加速的实用技巧4.1 固定shape与多batch是最大的免费午餐很多人在GPU上习惯了动态shape到了Atlas还没改过来。Atlas在当前版本里对动态shape不是不能支持但性能损失明显。核心原因是静态shape可以让ATC在编译时做极致的内存布局优化和算子融合动态shape意味着编译器要为多种形状准备多个优化分支效率自然下降。所以我的做法是如果业务分辨率是固定的比如摄像机输出1080p推理缩放成640x640就用静态shape导出和转换。如果未来可能调整分辨率优先考虑在AIPP里做缩放而不是给模型传不同分辨率的输入。多batch同理。单路视频推理时batch1没问题但如果你有8路视频把8帧拼成一个batch输入到模型里推理总耗时基本只比单帧多20%到40%平均到每路就是巨大的吞吐提升。这就是24G显存的意义所在。最优batch值需要实测我从经验看YOLOv8s在Atlas 300V上batch4或batch8都比较甜点。4.2 开启AIPP把预处理搬进NPUAIPP是Atlas性能调优绕不开的名字。它把彩色空间转换、归一化、图像缩放这些预处理下沉到NPU流水线里CPU和DVPP只需要负责把原始图像数据送进显存剩下的矩阵运算全部在昇腾芯片内部完成。配置AIPP时有几个细节容易翻车aipp_mode选static时mean和min在转换期就固定下来了推理期间不能改。如果你的多路视频对每个通道有不同归一化参数要拆成多个OM模型分别加载。csc_switch控制RGB/YUV色彩空间转换视频流解码出来的通常是YUV格式需要启用CSC再做推理。crop参数可以指定裁剪区域比如只检测画面中间区域时用AIPP裁剪比在DVPP里裁剪效率更高。我遇到过一个项目现场视频源是鱼眼摄像头画面边缘畸变严重只关心中心区域。最开始在后处理里做ROI过滤浪费了大量算力。后来在AIPP里直接用crop把边缘裁掉整机支持的路数直接翻倍。4.3 编解码与推理并行流水线Atlas 300V内置的DVPP模块支持硬件编解码这是它对比纯GPU推理的一个隐藏优势。GPU做视频解码一般要调用CPU的软解或者单独的NVDEC而Atlas的DVPP可以直接吃H.264/H.265码流。要充分利用这块能力建议把解码、缩放、推理组织成流水线。解码线程从RTSP拉流把码流送进DVPPDVPP输出的YUV帧经过AIPP归一化后直接送进推理队列。推理线程从队列取batch帧做模型推理。后处理线程负责NMS和业务逻辑。线程之间用无锁队列或环形缓冲连接避免互相阻塞。我在项目中实测一个这样的流水线单张Atlas 300V 24G跑YOLOv8s 640输入、1080p视频源一路视频的端到端延迟可以控制在50毫秒以内同时支持16到24路视频流模型越小路数越多。如果只做8路CPU占用几乎可以忽略。4.4 精度与性能的平衡选择Atlas上跑YOLOFP16是默认的最优解。FP16对比FP32在检测精度上差异通常在0.1到0.3个mAP以内肉眼几乎看不出差别但吞吐能提升不少。如果你对精度极敏感还有一个折中方案只在特定层保持FP32其他层用FP16。ATC支持在转换时指定哪些层用高精度但配置复杂除非必要我不建议一开始就碰。另外要提醒一句任何精度的优化都不能替代模型本身的验证。部署之前一定要准备一批评测集对比PyTorch浮点模型和OM模型的检测结果确认没出现大面积漏检或错检后再上线。我见过有人FP16转换后没做对比结果某个类别AP掉了5个点上线后业务方反馈一堆最后排查发现是某个算子在FP16下动态范围不够强制改回FP32才解决。5. 踩坑实录部署过程中最常见的6个问题5.1 驱动固件版本不匹配昇腾的坑千千万版本不匹配占一半。症状就是npu-smi info能看到卡但跑推理时提示找不到runtime或报错版本不一致。解决办法只有一条严格按照昇腾社区“驱动固件与CANN版本配套表”安装。不要想着“都用最新的”就一定没问题最新版本往往和旧硬件存在兼容性磨合期。我自己的习惯是先固定CANN版本再找配套的驱动固件版本。CANN版本选择考虑因素是业务SDK是否兼容驱动固件则完全跟着CANN走。装好后跑一遍npu-smi info确认固件版本号与驱动版本号都能对上。5.2 模型转换失败算子不支持这是模型转换阶段最常报的错误。常见提示是Unsupported operator或Op type xxx is not supported。解决方法优先级从高到低升级CANN版本新版工具链往往补齐了旧版缺失的算子。手动重写模型中不支持的算子用支持的算子组合实现同样功能。把不支持的子图拆出来走CPU这个操作复杂且性能差非不得已不推荐。YOLO系列的算子一般都比较标准遇到算子问题概率低。真正的重灾区是自己魔改检测头用了一些冷门算子比如某些自定义的attention实现。所以我的建议是新项目先用YOLO官方结构验证整条链路确认通了之后再做魔改出了问题也容易定位。5.3 推理时报显存不足或设备内存申请失败24G显存看着大但如果你在多路视频流水线里频繁创建和释放内存可能会产生碎片化问题。昇腾的运行时对显存管理有自己的策略频繁申请释放小内存块时间长了会出现申请失败但显存明明还有空闲的情况。解决办法是尽量复用内存。在C或Python里提前分配好一个内存池每帧推理都从池里取内存跑完再还回去避免一次次调用rtMalloc。CANN也提供了一些内存池接口但如果你用Python最简单的方式是把np.ndarray建好复用利用Python的垃圾回收机制尽量减少内存重分配。还有一个容易被忽略的坑dvpp通道数量上限。DVPP不是无限通道每张卡的通道数有限具体以文档为准多路视频流同时解码会撞上限。一旦撞了表现为部分视频流报解码失败。解决方案是做通道复用比如只对关键帧解码或者把不活跃的视频流关掉解码通道节省资源。5.4 推理结果全零或检测框异常这个问题的排查路径基本是先检查输入数据。YOLO对输入数据的格式极其敏感特别是通道顺序、归一化范围、像素类型。我在实际项目中曾遇到过一个隐藏很深的坑视频流解码出的YUV数据直接送进AIPP后由于rbuv_swap_switch没配置对R和B通道对调导致检测框位置完全错乱。调整AIPP配置后立刻恢复。另一个常见原因是input_format设置错误。比如模型训练时用RGB但解码出来是BGR帧你没有做通道交换就直接送进去模型看到的是“另一个世界”的图片结果自然不可信。排查方法很简单找一张已知内容的图分别用PyTorch和OM模型推理对比输出向量。如果差异巨大基本可以断定是输入预处理阶段的问题。5.5 PCIe带宽瓶颈很多人以为推理卡只和算力有关忽略了数据通路。Atlas 300V虽然推理速度快但如果输入数据要从CPU内存拷贝到卡上而卡和CPU之间的PCIe链路又不够宽整体吞吐就会被拖累。这个瓶颈在多路图片离线推理场景特别明显。把几百张图片一次性从磁盘读进来逐张拷贝到卡上推理PCIe传输时间会超过推理时间。解决办法是尽可能把数据准备和推理异步化让CPU预取下一批数据卡在跑当前batch时下一批数据已经等在显存里。如果项目对吞吐要求很高还有一种思路尽量在卡内完成全链路把解码和预处理都在DVPP里做CPU通过PCIe传的只是压缩码流而不是原始图像能显著降低PCIe负载。5.6 长时间运行稳定性问题Atlas 300V在机房环境下可以7x24小时稳定运行但前提是散热到位。我遇到过整机被动散热不良跑高负载两小时后卡面温度稳定在95度左右开始出现偶发推理超时。后来在机箱侧板加了一个风扇直吹温度压到75度以内问题消失。另外供电稳定性也不能掉以轻心。PCIe插槽供电不足时高负载瞬间电流会导致电压跌落直接表现为推理进程异常退出或设备复位。如果服务器是多年老机建议认真检查电源瓦数或者干脆换新平台。还有一个容易被忽略的是固件版本。昇腾会定期发布固件更新修复一些偶发稳定性问题。生产环境建议每半年左右评估一次是否需要升级固件升级前一定先在测试环境跑满负载验证。5.7 常见问题速查表现象可能原因快速排查方向npu-smi看不到卡PCIe识别失败、供电不足、插槽损坏换插槽、检查供电、查看系统日志驱动装不上内核版本或gcc版本过老确认OS版本、升级内核组件推理报版本错误驱动固件与CANN不匹配按官方配套表重新安装ATC转换失败算子不支持、opset过高、shape不匹配查看报错算子名、升级CANN、改opset推理结果全零输入预处理错误检查AIPP配置、通道顺序、归一化参数吞吐上不去batch太小、PCIe瓶颈、后处理阻塞增大batch、异步化、用C后处理跑高温降频散热不良、机箱风道差增加散热、清理灰尘、改善风道偶发崩溃显存碎片、供电波动、固件bug内存复用、检查电源、升级固件版本6. 终端部署方案的两种扩展思路6.1 多卡叠加扩展路数当单张Atlas 300V 24G的路数不够时第一反应不是换更贵的卡而是考虑多卡堆叠。CANN天然支持多设备管理代码里通过设备ID区分即可。多卡部署时要注意设备亲和性。每张卡要绑定特定的CPU核心和内存NUMA节点避免跨节点访问导致延迟波动。这个细节在单卡场景不明显多卡并发时如果两张卡都在抢同一个CPU核做数据搬运延迟会显著增加。负载均衡上最简单可靠的方式是按视频流ID哈希分配到不同卡上。比如16路视频卡0跑ID偶数的卡1跑ID奇数的。这种方式实现简单、运行稳定而且哪天某一卡若挂了只需要把它的流切到另一张卡业务可快速恢复。6.2 边缘盒子与服务器方案的取舍Atlas 300V是PCIe卡形态必须插在服务器里。它之上还有昇腾的Atlas 500系列边缘盒子形态后者更紧凑、功耗更低、适合部署在路侧或工厂现场。如果你是在机房集中式部署多路视频分析选服务器Atlas 300V这种方式维护方便、算力弹性好。如果是分布式部署在每个摄像头旁边做本地分析边缘盒子更合适。两种方案各有利弊关键是别买错形态。我见过有项目在机房买了大量边缘盒子结果发现盒子不支持某些企业级网络协议又得绕路做网关转换白白增加成本。从开发角度来看两种形态的模型转换流程几乎一致都是ONNX转OM。所以即使你现在用服务器方案开发将来往边缘盒子迁移的成本其实很低这算是昇腾生态的一个隐性优势。7. 对“运算加速卡”这件事的最后一点个人体会从更广义的视角看Atlas 300V 24G确实是一块运算加速卡但它的定位从来不是通用计算而是AI推理的专用加速器。它适合的场景很清楚模型固定、推理量大、延迟敏感、成本控制严格。把它用在这些地方它能发挥出超过同价位GPU的性价比但如果非要拿它去训练新模型那纯粹是自找麻烦训练场景显著依赖训练框架和算子生态的丰富度这不是它的强项。我个人在实际操作中的体会是Atlas这条产品线最大的学习成本不在硬件而在软件栈思维的转换。GPU部署习惯了动态shape、Python生态包一切到了CANN这套工具链里必须接受“离线编译优先、静态shape优先、预处理下沉优先”的思路。一旦把这个思路扭过来后续的项目推进速度会快很多。最后再分享一个小技巧调试阶段不要一上来就跑多路视频流。先用单张图片跑通模型转换和推理再用单路视频流调试解码链路最后再加多路并发。每一步都把日志和性能数据记录下来出了问题能快速定位到具体环节。看起来慢实际是部署效率最高的路径。如果这篇文章能让你少走几步弯路那我这些在机房熬夜、在服务器前面对着一堆报错日志排查的日子就没白费。后续如果时间允许我会再写一篇关于Atlas上YOLO后处理性能优化和C推理服务搭建的文章那个话题展开讲又是一大篇。
返回列表