恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Atlas 300V 24G部署YOLOv5/YOLOv8:从CANN环境到推理调优全攻略

  • 首页
  • 资讯中心
  • /
  • Atlas 300V 24G部署YOLOv5/YOLOv8:从CANN环境到推理调优全攻略

相关资讯

5.9minifyAll前端压缩:TaoToken统一Key接入VS Code压缩工作流 2026/9/25 8:00:00
AI安全门槛的三重阀值:TTPs映射率、对抗鲁棒性与零日预测 2026/9/25 8:00:00
OpenCodex Windows 服务控制台窗口问题全解析:从根因调查到“无窗口后台服务“的完整修复路径 2026/9/25 7:55:00

最新资讯

厨房清洁用品出海KOL营销:头部+垂类+素人协同打法解析
大模型时代深度伪造检测与AI滥用防御实战指南
Oracle到瀚高数据库数据抽取工具:从类型映射到断点续传
ZCode偷传代码风波:AI编程工具数据安全与防护指南
Agent技能库实战:从提示词堆砌到可复用能力模块化
SQL Server 触发器字段级监听:UPDATE() 与 COLUMNS_UPDATED() 实战

今日推荐

AI元人文:从工具使用到思维重构的深度探索
Python+CNN车牌识别实战:从数据预处理到模型训练与部署
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

Atlas 300V 24G部署YOLOv5/YOLOv8:从CANN环境到推理调优全攻略

发布时间:2026/9/25 8:00:00
Atlas 300V 24G部署YOLOv5/YOLOv8:从CANN环境到推理调优全攻略 如果你最近在碰AI落地相关的东西一定会反复刷到一个词atlas部署yolo。很多人拿到一台装了Atlas 300V 24G的服务器第一反应就是“这不就是运算加速卡吗装上驱动直接就能跑模型”。你要是真这么干大概率会卡在第一步。我当初也一样以为这卡跟显卡差不多结果发现它连显示输出接口都没有软件栈跟CUDA完全是两套体系。这篇文章把我从零部署YOLOv5/YOLOv8到Atlas 300V 24G的过程完整写下来包括型号确认、CANN环境搭建、ATC模型转换、pyACL推理代码、预处理和上线前后最容易踩的坑适合刚拿到昇腾推理卡、或者准备做摄像头视频流目标检测的工程师参考。1. 先把“运算加速卡”这个概念盘清楚Atlas 300V 24G是什么、不是什么1.1 一张不接显示器的PCIe卡核心任务只有推理Atlas 300V 24G是一张PCIe接口的AI推理加速卡不是图形卡更不是通用GPU。它没有显示输出口不能拿来跑OpenGL也不能用CUDA那套生态。官方给它的定位很明确视频分析、图像分类、目标检测、OCR、推荐系统这类推理密集型任务。24G指的是板载内存容量这个容量对目标检测场景的意义非常大你可以把更大的模型、更高的batch size塞进去也可以把多个模型同时常驻在卡上切换时不用反复加载。第一次插卡开机后找不到显示设备这是正常的因为它压根没打算接显示器。我建议在插卡之后用命令行的方式确认硬件不要指望什么“显卡驱动自动装好”。在Ubuntu服务器下第一步先看PCIe设备是否能识别到昇腾设备执行lspci | grep -i ascend如果能看见一行类似“Ascend”的条目说明卡至少已经被主板感知如果这条命令什么都没有大概率是物理插接或者PCIe槽位问题先别急着装软件。为什么我强调先确认硬件因为Atlas这卡在软件安装失败时表现得跟“没插卡”一模一样。我接过一个朋友的项目他远程操作服务器前半小时全在排查依赖库最后才发现卡根本没插到位。所以第一步永远是硬件状态不是包管理。1.2 用npu-smi确认卡的真实状态确认PCIe设备之后安装好驱动和固件再执行npu-smi info正常情况下你会看到类似下表的信息字段说明Device ID0、1等编号对应后续代码里的device_idChip Name芯片型号比如Ascend 310P系列Memory24G是否被占用Temperature卡温度推理时注意别超温降频AICoreAI计算核信息Status状态正常一般显示OK我在实际项目里遇到过一个诡异情况npu-smi info能显示卡但状态列不是OK而是D或者Fault这种情况下跑任何推理代码都会直接报设备无法初始化。通常把服务器重启一次能解决如果重启后还是异常状态检查固件版本是否和驱动匹配。这种硬件层的坑软件写得再好也绕不开。另外一点要注意的是Atlas 300V是单卡单芯片的推理加速卡服务器里插了两张代码里的device_id就要对应好。很多人写代码时默认用device 0结果第二张卡一直闲着。通过npu-smi info能看到每一张卡的负载和温度如果有两张卡以上建议在代码里显式指定device_id让多张卡分担不同路视频流而不是把负载全压在第一张上。1.3 你的CUDA经验在这里基本要清零做模型部署的人大多有NVIDIA GPU背景对torch.cuda.is_available()、TensorRT这一套非常熟。但Atlas不是CUDA生态它的加速栈叫CANN对应的运行环境是ACLAscendCL或者是更上层的MindSpore、MindX。你不能直接把PyTorch的模型权重扔上去也不能把它识别成“另一个显卡”更不能用nvidia-smi监控它。这是个认知层面的转变刚开始会很不习惯。你会发现网上现成代码少、报错信息不直观、社区回答普遍偏官方。所以我的建议是老老实实按官方工具链走先把“模型转换→推理代码→资源释放”这个小闭环跑通再谈优化。2. 模型转换这一步才是atlas部署yolo的关键2.1 先从pt导出ONNX并处理掉多余的算子Atlas不直接支持PyTorch的权重格式它需要的是经过ATC转换后的OM模型文件。所以部署YOLO的第一站是先把.pt权重导出成.onnx再在这个基础上做后续转换。以YOLOv5为例官方仓库自带导出脚本python export.py --weights yolov5s.pt --include onnx --opset 11导出的时候我强烈建议固定输入shape不要为了“灵活”而导出动态shape。动态shape在ATC转换阶段不是不行只是会牺牲一部分性能而且在后处理内存分配上也会更麻烦。目标检测场景下输入尺寸一般是固定的640×640那就让它固定。导出的ONNX如果里面有一些Ascend算子库不支持的算子比如某些特殊上采样方式或者GridSample之类的东西ATC转换时会直接报不支持算子。解决方式有三个方向一个是换一个更接近官方导出版本的YOLO结构第二个是改opset版本再导出一次第三个是给ATC加上算子替换或自定义算子处理。绝大多数情况下前两个方案就能解决问题自定义算子属于实在没辙才走的路。2.2 CANN环境准备驱动、固件、Toolkit三者一个都不能少转换OM前服务器上必须装好完整的CANN环境。昇腾的这个体系分三块驱动、固件、CANN Toolkit。驱动负责让系统能识别卡固件负责底层运行Toolkit提供ATC转换工具、ACL运行库和Python接口。装完之后环境变量这一步特别关键。每次打开新终端我建议先执行source /usr/local/Ascend/ascend-toolkit/set_env.sh这个脚本会把atc、msprof、ACL库路径都加进PATH和LD_LIBRARY_PATH。如果忘记source最常见的结果是执行atc的时候提示“命令找不到”或者Python import acl时失败。我遇到过一个比较坑的情况服务器上同时装了CANN Toolkit和nnrt轻量版推理运行时两个包的环境变量互相打架。后来我把nnrt卸了只保留完整Toolkit问题才消失。如果你只是做推理部署原则上nnrt更轻量但如果你还要做模型转换或者调试直接用Toolkit更省心少装一套东西就少一套变量冲突。2.3 ATC命令拆解一次把参数看懂环境准备好后执行模型转换。YOLOv5s的ONNX转OM我用的命令大致如下atc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_bs1 \ --input_shapeimages:1,3,640,640 \ --input_formatNCHW \ --soc_versionAscend310P3 \ --insert_op_confaipp.cfg几个关键参数解释一下--framework55表示ONNX模型这是ATC里固定的编号别记成1或2那些是给Caffe和TensorFlow用的。--input_shape输入名称要和ONNX里一致YOLOv5通常叫imagesYOLOv8不一定可以用Netron打开模型看一眼输入节点的名字别想当然。--soc_version这个必须和你卡实际芯片对应。不同驱动版本、不同硬件批次npu-smi info显示出来的Chip Name会有差异填错会导致最终生成的OM在加载时直接报“soc version mismatch”。最稳妥的办法是拿npu-smi info显示的芯片型号去CANN支持矩阵里查对应的soc_version写法。我在这里翻过车因为网上教程写的是Ascend310P实际跑环境认的是Ascend310P3少个尾巴整个模型都加载不了。--insert_op_confAIPP预处理配置文件后面第四章会细说。转换完成后会生成.om文件。正常的转换过程会打印好几行包含“Success”的信息看到失败也不用慌把报错信息里的大写编号记下来去搜索比看中文描述更精准。2.4 转换失败时优先排查的三个方向我在转换YOLO的时候踩得最多的坑有三个第一个是不支持的算子。报错里会直接提示某个op无法识别这时候优先考虑重新导出ONNX。比如YOLOv5在某些版本下导出时带的自定义NMS算子会出问题导出时选择不带后处理的版本后处理完全交给推理代码来做最干净。第二个是shape不匹配。输入名称写错、维度写错、batch size不一致都会导致ATC失败。这里面最隐蔽的是ONNX输入名称不是默认的images而是类似input或者x你可以用onnx这个Python包加载模型后把输入节点名打印出来确认无误再写进命令。第三个是Soc版本填错。这个问题前面说过最好就是让npu-smi info和你手上的CANN版本说明对齐不要照抄任何网上教程里的具体值。转换成功后千万别急着写一堆新代码先用最简单的方式把.om加载进去跑一次确认模型文件本身没问题再往上层封装业务逻辑。3. 写推理代码pyACL那套申请资源的规矩3.1 初始化顺序不能乱init、set_device、create_context、create_streamAtlas的Python推理接口叫pyACL底层是C的ACL库。每一个Python进程在使用卡之前必须按固定顺序做四件事初始化ACL、设置设备、创建上下文、创建执行流。顺序乱了后面的调用会各种报错。我写最小推理代码时开头的模板是这样的import acl import numpy as np # 1. 初始化ACL ret acl.init() assert ret 0 # 2. 指定设备 device_id 0 ret acl.rt.set_device(device_id) assert ret 0 # 3. 创建上下文 context, ret acl.rt.create_context(device_id) assert ret 0 # 4. 创建流 stream, ret acl.rt.create_stream() assert ret 0这里每一步返回的都是整数错误码0表示成功非0就是各种问题。很多人第一次跑代码时只检查了最后一步前面初始化失败也没发现最后报一个莫名其妙的内存错误排半天查不出来。所以我每个步骤都会断言一下至少能把问题定位到具体是哪一步。还需要注意一个进程里不要反复acl.init()也不要重复set_deviceACL的初始化是进程级的开一次就好。如果你在写多线程并发每个线程可以有自己的context和stream但进程级别的初始化只需要一次。3.2 模型加载以后内存才是大头初始化完成之后加载OM模型model_id 0 ret acl.mdl.load_from_file(yolov5s_bs1.om, model_id) assert ret 0这里load_from_file会返回一个model_id后续所有推理都靠这个id来定位模型。加载模型本身不是难点真正麻烦的是输入输出的内存准备。Atlas模型需要的输入不是随便一个numpy数组而是通过ACL申请的设备内存。官方接口里你要先拿到输入和输出各自的大小然后调用acl.rt.malloc在设备侧申请内存再用acl.rt.memcpy把主机侧的数据拷进设备内存。可以用一个描述结构来获取模型输入输出信息model_desc acl.mdl.create_desc() ret acl.mdl.get_desc(model_desc, model_id) input_num acl.mdl.get_num_inputs(model_desc) output_num acl.mdl.get_num_outputs(model_desc) 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_buffer, ret acl.rt.malloc(input_size, 2) output_buffer, ret acl.rt.malloc(output_size, 2)这里的代码看着繁琐但它反映了一个核心逻辑推理数据不能直接访问主机内存必须显式放到设备侧。这跟GPU编程里的H2D拷贝是同一个思路只是换了一套API名字。如果你习惯写PyTorch代码可能会觉得这个过程啰嗦但正是这种显式管理让Atlas推理资源边界非常清楚也让你能一眼看出内存是在哪里分配、哪里释放的。3.3 把预处理好的图像送进模型执行假设你已经用OpenCV读了一帧图并且做了resize、letterbox、归一化、通道转换最后得到的是一个连续内存的numpy数组shape是(1, 3, 640, 640)dtype是float32。要先把它从numpy数组转成一个ACL能识别的指针然后拷进设备内存input_data np.ascontiguousarray(input_data, dtypenp.float32) host_ptr acl.util.numpy_to_ptr(input_data) ret acl.rt.memcpy(input_buffer, input_size, host_ptr, input_size, 1)最后一个参数1表示H2D方向这一点很容易记反。拷完之后调用模型执行ret acl.mdl.execute(model_id, input_buffer, output_buffer, input_size, output_size)注意这个版本的execute是同步执行也就是说调用返回到这一步时推理已经结束。如果想用异步就用execute_async配合stream后面等acl.rt.synchronize_stream(stream)。执行完成后把输出数据从设备内存拷回主机侧output_data acl.util.ptr_to_numpy(output_buffer, (output_size,), np.uint8)然后再根据YOLO的输出格式解析坐标、置信度和类别。YOLOv5的原始ONNX输出一般是[1, 25200, 85]这种形态需要配合anchors做解码和NMS如果你在导出ONNX时已经把后处理封装进模型那输出的结构会不一样。我在第一次跑通时用的是不带后处理的版本因为出问题时更容易定位到自己的代码而不是依赖模型内部行为。3.4 什么时候必须调用acl.rt.reset_device很多人写推理脚本时用完就结束进程完全不释放资源开发时问题不大但放到常驻服务里就是灾难。我建议在推理循环结束后或者进程退出前按顺序释放acl.mdl.unload(model_id) acl.rt.free(input_buffer) acl.rt.free(output_buffer) acl.rt.destroy_stream(stream) acl.rt.destroy_context(context) acl.rt.reset_device(device_id) acl.finalize()这个顺序基本和申请顺序相反。如果某个进程反复加载模型但从来不unload卡上的内存会一点点被吃满最后出现设备不可用的假象。我甚至见过一个服务挂在那里只要重启进程就能恢复就是因为之前的进程没有正常释放设备内存。如果你是用Flask或者FastAPI做推理服务建议把ACL初始化和模型加载放在启动阶段不要在每次请求进来时重新init、重新load_model。模型加载本身有一定耗时而且反复加载会让显存碎片化服务一跑久就越来越不稳定。4. 预处理和DVPP帧率上不去通常不是模型的问题4.1 用OpenCV做resize会吃掉大量CPU很多初版推理代码都是先用OpenCV处理图像再送进模型。单路视频流的时候OpenCV的resize和归一化开销并不明显但一旦变成10路、20路视频流CPU很容易被打满帧率不升反降。这时候要意识到一个事实Atlas卡上是有硬件图像处理单元的DVPP就是干这个的。DVPP里包含VPC视频图像处理模块专门做resize、crop、色域转换还有JPEG解编码。把预处理从CPU挪到DVPP才算真正把推理卡的资源用了起来。4.2 DVPP的VPC通道一次搞清resize和格式转换DVPP不是一个拿来即用的函数你需要先创建一个VPC通道然后反复使用它处理图片。基本流程是acldvppCreateChannel创建通道acldvppCreatePicDesc创建图片描述符acldvppVpcResize执行缩放最后销毁图片描述符和通道这里最容易踩的坑是格式和对齐。DVPP对图片的宽高有对齐要求通常需要是2的倍数不同CANN版本和不同芯片型号还会要求更大的对齐边界。如果你的输入图片分辨率是1920×1080这个本身没问题但当你从DVPP拿到输出图像后它的内存布局可能是有对齐padding的不能直接当成普通BGR数组去读。我的建议是第一版不要用DVPP先把CPU预处理跑通保证模型推理流程没问题再回头优化预处理。直接一步到位用DVPP很可能遇到一个“图像花了”的问题你都不知道是模型输入错了还是格式解析错了。4.3 AIPP配置把resize和归一化都交给模型输入比在代码里写预处理更省事的做法是在ATC转换模型时把AIPP配置一起嵌进去。这样推理代码只需要往输入内存里塞原始图像数据模型自身会在输入阶段完成缩放、裁剪、格式转换和归一化。一个用于YOLOv5归一化的静态AIPP配置可以写类似这样aipp_op { aipp_mode: static input_format: RGB888_U8 src_image_size_w: 640 src_image_size_h: 640 csc_switch: true rbuv_swap_switch: true crop: false mean_chn_0: 0 mean_chn_1: 0 mean_chn_2: 0 min_chn_0: 0.003921627 min_chn_1: 0.003921627 min_chn_2: 0.003921627 }这段配置的意思是把输入当作RGB888格式的原始图像在模型输入前做一次色域转换和一个归一化到0-1的操作。mean_chn是减均值min_chn是缩放系数YOLO的预处理正好是除255所以这里填了1/255左右的值。具体字段的计算顺序以CANN官方文档为准不同版本会有细微差异。用了AIPP之后代码里就不要再归一化一遍否则等于归一化了两次模型输出会变得一个置信度都出不来。我在这个点上栽过跟头结果检查了很久才发现问题出在重复归一化。4.4 我在AIPP上踩过的一个坑静态AIPP在ATC转换时就把输入尺寸固定死了如果模型的输入shape是640×640那么送入AIPP的原始图像也必须被期待为这个尺寸或者由DVPP先resize到这个尺寸再喂给AIPP。当时我把静态AIPP配成320×320然后用一个640×640的模型输入shape去跑结果推理出来的结果全是乱框。后来我用动态AIPP并让DVPP先统一resize到固定尺寸整个流程才稳定下来。这个经验说明了一件事AIPP和DVPP是配合使用的不是你二选一。DVPP负责把各种分辨率的视频帧统一成模型需要的尺寸和格式AIPP负责在模型入口做归一化等操作。两个配合好CPU那边就能少一大块负担。5. 上线前我一定会检查的七件事5.1 环境变量和LD_LIBRARY_PATH最容易背锅Atlas程序跑起来报错一半以上的问题能在环境变量上找到线索。最常见的是LD_LIBRARY_PATH里同时存在多个CANN版本的库路径Python进程加载ACL动态库时加载错了版本直接段错误或者报“cannot open shared object file”。我的检查习惯是在项目目录写一个env.sh把必要的source集中写进去source /usr/local/Ascend/ascend-toolkit/set_env.sh export PYTHONPATH/usr/local/Ascend/ascend-toolkit/latest/pyacllib/python/site-packages:$PYTHONPATH export LD_LIBRARY_PATH/usr/local/Ascend/ascend-toolkit/latest/pyacllib/lib64:$LD_LIBRARY_PATH版本不同路径会略有差异但你只要保证每次启动服务都走同一个env.sh就能大大降低“本机能跑、换台机器就跑不起来”的概率。5.2 /dev/davinci设备节点与容器权限Atlas推理时驱动会在系统里创建/dev/davinci0这类设备节点。如果代码报device open failed先别急着怀疑代码执行ls -l /dev/davinci*如果设备节点不存在说明驱动或者固件没装好如果节点存在但是权限不够进程可能无法打开设备。尤其是用Docker部署时容器里默认是看不到宿主机设备节点的必须用--device参数把设备映射进容器docker run -itd \ --device/dev/davinci0 \ --device/dev/davinci_manager \ --device/dev/hisi_hdc \ --device/dev/devmm_svm \ -v /usr/local/Ascend:/usr/local/Ascend \ your_image /bin/bash一次性忘映射任何一个节点都可能出现“打不开设备”或者“设备忙”的怪报错。5.3 驱动、固件、CANN版本对应关系昇腾这套体系特别讲究版本匹配。驱动和固件配套驱动和CANN配套这些版本如果对不上npu-smi info可能正常但一跑推理就随机报错。我没法在这里给你一份不变的版本对应表因为官方会持续更新而且不同硬件型号适配的版本组合不同。正确做法是安装前先去官方文档找到你的硬件型号的推荐软件组合安装后把版本信息记录下来作为部署清单的一部分。能用一个固定镜像把驱动、固件、CANN都打进去就尽量打进去不要在生产环境用“最新版”随意升级。5.4 一个最小可复现的检查流程上线前我通常会写一个最小脚本按顺序验证import acl print(acl init:, acl.init()) print(set device:, acl.rt.set_device(0)) model_id 0 print(load model:, acl.mdl.load_from_file(yolov5s_bs1.om, model_id))这个脚本不做任何图像逻辑只验证ACL能不能初始化、模型能不能正常加载。如果这一步都过不了后面写再多推理代码也没有意义。我无数次看到有同事拿着一个几百行的推理脚本去排查环境问题最后发现只是模型加载失败这个最小脚本能在30秒内帮你排除掉环境层的大部分问题。5.5 日志和排错从哪里看CANN运行过程中的日志默认在~/ascend/log/下里面分plog和slog两种文件。plog是Python侧运行日志slog是C/C侧的运行日志。遇到段错误或者ACL接口返回非0错误码时这两个目录里的日志比任何网上搜到的信息都可靠。还有一个重要的习惯ACL接口返回的错误码不要只看数字。CANN官方文档里有一份完整的错误码表比如507001这类编号对应特定模块的问题。搜索时把错误码整体输入比描述症状更容易命中官方或社区里的同类问题。6. 调优从单路到多路batch和Stream怎么选6.1 先定基准单路推理时模型本身花多久在谈并发之前先让一个基本场景跑稳单张640×640图像输入从预处理到推理结束统计耗时。这个数字是你的基准线。我用一个简单的time测量发现模型本身在Atlas 300V 24G上的执行耗时和CPU预处理耗时几乎一样多。也就是说如果不做任何优化卡是闲着等待CPU干活的。这就能解释为什么很多人觉得“卡不卡在模型卡在数据喂不进去”。所以调优的第一步就是先量化模型执行占多少、预处理占多少、拷贝占多少。用日志分别打点三个环节都记录下来后面优化目标就清晰了。6.2 batch推理不是把多张图塞进去就完事batch推理确实能提高吞吐但前提是你得有足够多的并发请求。对目标检测而言把4张图拼成一个batch再去跑一次模型卡上的算力利用率通常能明显提高但batch size不是越大越好因为batch越大单次推理的延迟也会相应增加并且显存占用线性上升。我的实践做法是把不同batch size的模型都转换出来比如yolov5s_bs1、yolov5s_bs4、yolov5s_bs8然后在同一组视频流上用实际数据测吞吐。不要凭感觉选每张卡的内存和算力都不一样最优batch只能靠实测。6.3 多Stream并发别把一张卡当单核用如果你的服务是同时处理多路视频流每个流单独开一个stream并发推理会更贴合实际业务。ACL里可以创建多个stream每个stream执行不同的模型或不同的输入数据。简单来说Model执行时execute_async会把任务提交到指定的stream上然后你可以立刻返回去处理下一帧预处理等需要结果时再synchronize_stream等待。这样CPU预处理和AI推理能重叠起来整体吞吐上去很多。多个stream之间没有严格的锁竞争因为它们共享同一个设备上下文。如果每路视频流都固定占用一个stream代码会清晰很多也方便单独统计每一路的时延。6.4 通过profiling找瓶颈CANN自带性能分析工具msprof可以用它采集算子耗时和内存占用。用法大致是msprof --applicationpython infer_demo.py --outputprof_result运行结束后会生成性能数据目录里面有算子级别的耗时统计。重点看两个东西一是模型内部哪些算子耗时占比最高二是预处理和推理之间的空闲时间。不过我不建议一上来就做profiling。先把DVPP和AIPP配好再用多Stream把CPU和卡的重叠跑起来如果吞吐还是上不去再上msprof查具体算子。很多时候瓶颈压根不在算子而在你的数据拷贝链路太长中间多做了一次无谓的格式转换。另外Atlas 300V 24G这种大显存卡很适合在一个进程里常驻多个模型。你可以把YOLO、OCR、分类模型一次全部加载进显存用不同的stream并发调用这样卡的利用率能始终维持在高位。我最后那版服务就是这么设计的YOLO负责目标检测检测到目标以后把局部区域交给OCR模型识别两个模型同时常驻延迟只比单模型多一点点但能力上完全跑通了一条完整的视觉流水线。从我第一次接触这张卡到现在最深的感受是Atlas 300V 24G本身不是跑不动YOLO它的问题从来不是算力而是工具链的思维方式跟GPU不太一样。只要耐下心把ATC转换和ACL的资源管理搞清楚再叠加上DVPP和Stream优化它的稳定性和吞吐在视频流场景里是完全可以接受的。整个部署过程中最让我头疼的不是算子转换也不是性能调优反而是环境变量和权限这种看似简单的环节。建议你拿到卡之后先花半天把官方例子跑通别急着改模型改代码再一点一点把YOLO的逻辑接进去这条路走的弯路最少。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号