新闻详情

新闻详情

首页 / 资讯中心 / 详情

Atlas 300V 24G推理加速卡上部署YOLO目标检测实战指南

发布时间:2026/9/21 1:24:57来源:尧图网络
Atlas 300V 24G推理加速卡上部署YOLO目标检测实战指南
1. Atlas到底是什么先理清这个概念做AI推理这件事做了好几年我身边一直有朋友讨论Atlas系产品。有人觉得它是服务器有人以为它是边缘计算盒子还有人直接问Atlas 300V 24G是运算加速卡吗。说实话这几个说法都有点沾边但都没说到点上这个困惑不解决后面的部署、调优、踩坑都容易走弯路。Atlas是面向AI计算场景的一整条硬件产品线背后用的核心芯片是昇腾系列AI处理器。它不是一个单一设备而是一个从数据中心到边缘侧、从训练到推理的完整矩阵。以我实际接触过的产品为例Atlas 800推理服务器、Atlas 300I推理卡、Atlas 300V系列加速卡以及Atlas 200开发者套件它们在产品定位、接口形态、适用场景上都是明显不同的。很多人容易把Atlas当成一个具体型号来搜资料结果越搜越乱本质上是没分清这条产品线的层级关系。那这个内容适合谁看主要是两类人一类是刚接触昇腾生态、手里正好有一张Atlas 300V或者一台Atlas服务器想跑YOLO目标检测但不知道怎么下手的开发者另一类是还在选型阶段卡在到底该买GPU还是Atlas推理卡这个选择题上的工程师。这篇文章我会把Atlas产品线、Atlas 300V 24G的真实定位、以及在一个实际项目中用Atlas部署YOLO的完整过程都拆开讲里面有环境搭建细节、模型转换命令、推理脚本框架还有我反复踩过的几个坑。看完之后至少你在Atlas上跑通一个YOLO模型不会觉得心里没底。2. 一张推理卡的真实定位与核心价值2.1 先从产品线看Atlas 300V在哪个层级昇腾相关的硬件产品虽然看着型号多但梳理下来就两条主线训练和推理。训练侧常见的是Atlas 800T系列或Atlas 900集群用的是昇腾910系列处理器主要负责大模型训练和科学计算。推理侧则是Atlas 800I系列推理服务器、Atlas 300I系列推理卡以及Atlas 300V系列加速卡这个系列的目标很纯粹把训练好的模型高效地跑起来追求单位功耗下的吞吐量。Atlas 300V 24G在推理产品线里属于加速卡这个形态不是计算卡。它的全称里面通常带Pro是一款半高半长、单槽位的PCIe卡直接插到x86服务器或Atlas服务器里就能用。我测试用的那张卡在中端X86服务器上开机后通过npu-smi命令行工具能看到卡的状态和NVIDIA的nvidia-smi类似。这里要注意很多新手把加速卡等同于计算卡这是个误解。广义上它当然在做运算加速但更准确地说它是AI推理加速卡目标是深度学习模型的推理不是通用计算也不是训练。2.2 关键参数背后的工程含义Atlas 300V 24G搭载的处理器是昇腾310P系列的推理芯片显存给了24GB支持PCIe 4.0接口单卡功耗大概在几十瓦级别。这个参数组合在工程上意味着几点24GB大显存特别适合视觉类模型批量推理。YOLO、OCR、人脸识别这类任务单张图预处理后可能只有几MB显存里能塞下大量中间结果批处理跑起来吞吐量很可观。我做YOLOv5s推理测试时batch size加到8甚至16都不会有显存压力这在民用显卡上是不太敢想象的。功耗低意味着部署环境不需要改造电源。普通服务器一个PCIe插槽就能带起来机箱内散热压力也小不像训练卡需要专门的风道和供电设计。卡上自带DVPP硬件模块可以完成图像缩放、格式转换、抠图、视频解码等预处理操作不需要CPU参与。这一步对整体推理延迟的影响非常大后面我会详细讲。有人会问24G显存是不是跟4090差不多这个问题不能这么比。显存容量只是其中一个维度更重要的是硬件架构、软件栈和应用定位。Atlas 300V的强项是低功耗推理和高密度部署不是拿来跟训练卡比跑分。2.3 和GPU对比Atlas的真正差异化优势在哪我最初接触Atlas时也一直拿它跟GPU比比来比去总觉得生态不如CUDA丰富这个判断方向没错但容易忽略一个事实Atlas在主攻的推理场景里有自己的护城河。第一能效比。同样做一批基于YOLO的检测任务一张Atlas 300V的功耗可能在几十瓦而一张同级别性能的GPU功耗往往高一截。在机房电费敏感的今天大规模部署推理节点时这个差距乘以几十上百台机器成本差异就非常明显。第二视频解码能力。视觉推理场景里有大量来自IPC摄像头、录播系统、视频文件的输入流Atlas的DVPP模块支持硬件解码不需要额外配解码卡。相比之下GPU上的视频解码虽然也有NVENC/NVDEC但在很多虚拟化或容器环境里反而容易碰到License限制Atlas这边省心不少。第三模型保护。Atlas的OM模型是经过加密和编译的一定程度上可以保护模型权重不被轻易提取这对商业落地项目是个额外加分项。当然它也有短板算子生态、社区资料、第三方框架适配不如CUDA那么成熟这也是我后面要重点讲怎么绕坑的原因。一句话总结就是如果目标是在低功耗、高密度的服务器集群里大规模跑AI推理Atlas值得认真考虑如果目标是研究、训练、快速试错那还是先留在CUDA生态里更省事。3. 在Atlas上部署YOLO从零到一的手把手过程3.1 环境准备与软件栈梳理我在Atlas 300V 24G上跑通的第一个视觉模型就是YOLOv5随后也试过YOLOv8。整个过程的核心链路是用PyTorch训练或者下载官方权重把模型导出为ONNX格式再用ATC工具转换成OM格式最后编写基于AscendCL的推理程序加载OM模型执行推理。先看环境。硬件层面我用的是一台双路x86服务器插了一张Atlas 300V 24G卡操作系统是Ubuntu 20.04。软件层面需要装的东西不少但捋清楚之后会发现其实就四块组件作用建议版本昇腾NPU驱动让操作系统识别NPU设备与CANN版本配套CANN Toolkit昇腾计算架构包含ATC、AscendCL、算子库等与驱动版本配套CANN Kernels包配套算子包与Toolkit匹配Python环境跑推理脚本3.7~3.9建议3.8装驱动和CANN时最烦的一点是版本匹配。驱动版本、CANN版本、固件版本三者如果不对齐最常见的结果就是npu-smi能显示卡但初始化失败或者ATC转换直接报版本相关错误。我的经验是先确定CANN版本再找配套的驱动包不要两个都取最新版。安装CANN时需要注意默认安装路径是/usr/local/Ascend装完后需要重新加载环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh验证环境是否正常可以看一眼NPU状态npu-smi info能列出卡的详细信息包括芯片型号、显存、驱动版本说明驱动层面没问题。接着验证CANN工具链运行ATC时如果提示Ascend AscendCL相关库找不到大概率是环境变量没生效或Toolkit和Kernels版本不匹配。3.2 模型导出PyTorch权重转ONNX的细节YOLOv5官方仓库里提供export.py可以直接导出ONNX格式。命令大差不差python export.py --weights yolov5s.pt --include onnx --opset 11但有几个细节值得注意。第一ATC对动态shape的支持虽然存在但会带来额外性能损失所以导出时最好固定输入尺寸。我用的是640×640代码里要保证输入输出的shape是固定的避免后面转换时出现动态维度。第二opset版本会影响算子映射我测试时opset 11比较稳opset太高或太低都会在ATC阶段遇到不理解的情况。第三YOLOv5的检测输出层在导出时通常保留三个尺度的输出也就是三个输出节点这在ATC转换时需要逐一对齐输入输出名称。YOLOv8的情况类似但输出结构略有不同导出时建议临时修改模型结构把检测头的拼接逻辑剥离掉只保留Backbone和Neck的输出后处理用Python单独实现。这样做的原因是OM模型里实现复杂的NMS逻辑既困难又容易出问题不如把解码、置信度过滤、NMS都放到Host侧用NumPy就能搞定。3.3 ATC模型转换从ONNX到OM的关键命令环境准备好之后核心动作是模型转换。ATC工具全称是Ascend Tensor Compiler作用就是把ONNX、TensorFlow的PB、MindSpore的IR等格式的模型转换成昇腾专用的OM模型。我以YOLOv8为例给出一个能用的转换命令注意这里的细节我自己踩过好几次坑。atc --modelyolov8s.onnx --framework5 --outputyolov8s_bs1 --soc_versionAscend310P3 --input_shapeimages:1,3,640,640 --loginfo各参数含义如下--model输入的ONNX模型路径。--framework5表示ONNX3表示MindSpore1表示TensorFlow。--output输出OM模型的前缀名。--soc_version芯片型号必须和实际硬件完全一致。Atlas 300V 24G对应一般是Ascend310P3或Ascend310P用npu-smi info查看芯片型号后填对应的值填错直接转换失败。--input_shape固定输入维度。--loginfo保留详细日志排错时能省很多时间。转换过程中最容易出的问题是算子不支持。ONNX模型里如果包含ATC不支持的算子日志里会出现Unsupported Op之类的关键字。我的做法是先转一次看报错然后用onnxsim或onnx-modifier把不支持的算子替换掉。常见的比如一些自定义NMS算子、部分Resize模式、某些Activation函数的特殊参数都可能引起问题。另外提一个必踩的坑输入节点的名称。YOLOv8导出的ONNX输入名通常是images但YOLOv5可能是images也可能是input必须先确认。用Netron打开ONNX模型看一眼或者用代码打印输入输出节点的名称import onnx model onnx.load(yolov8s.onnx) for inp in model.graph.input: print(input:, inp.name) for out in model.graph.output: print(output:, out.name)ATC转换的时候如果输入输出名称对不上后续推理脚本里绑定输入输出节点就会报错而且这种错误提示往往不直观容易让人怀疑是硬件问题。转换完成后会得到yolov8s_bs1.om文件。注意这个文件是包含模型权重和算子调度信息的一般用ACL推理时不能再反解析回原始权重所以原始ONNX务必自己留好。3.4 AscendCL推理代码从加载模型到输出检测框模型转换好之后编写推理程序。Atlas上的官方推理接口是AscendCL简称ACL它提供了C和Python两套API。Python接口适合快速验证C接口适合进一步做性能优化和工业化部署。我这里分享的是Python实现。先贴一个完整骨架import numpy as np import cv2 from PIL import Image import acl # 初始化 ret acl.init() ret acl.rt.set_device(0) context, ret acl.rt.create_context(0)这里涉及ACL的核心概念容易绕晕我尽量说清楚。整个ACL编程模型大概是这样的初始化ACL环境。acl.init()对应整个库的初始化acl.rt.set_device(0)表示使用第0张卡。创建Context。Context可以类比成进程里的一个运行时上下文负责管理内存、stream、事件等资源。显式的create_context是推荐的规范做法不创建环境后续调用各种API会报ACL_ERROR_RT_CONTEXT_INVALID。加载OM模型。acl.mdl.load_from_file返回model_id之后所有推理都靠这个model_id操作。准备输入输出。需要从模型描述信息中拿到输入输出的维度、数据类型然后申请Device侧内存把数据拷贝过去。执行推理。acl.mdl.execute同步执行结果写入输出内存。资源释放。推理完成后释放内存、卸载模型、销毁Context、deinit。展开来说加载模型并获取输入输出信息这一段的代码可以这样写model_path byolov8s_bs1.om model_id, ret acl.mdl.load_from_file(model_path) # 获取模型描述 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) # 获取第一个输入/输出的数据尺寸和数据类型 in_size acl.mdl.get_input_size_by_index(model_desc, 0) out_size acl.mdl.get_output_size_by_index(model_desc, 0) in_dtype acl.mdl.get_input_data_type(model_desc, 0) out_dtype acl.mdl.get_output_data_type(model_desc, 0)一个关键点ACL要求输入数据是np.float32或np.uint8并且显式以字节形式传给Device。常见做法是先申请Device内存device_input_ptr, ret acl.rt.malloc(in_size, acl.const.MEM_MALLOC_NORMAL_ONLY)然后把处理好的图片数据用acl.rt.memcpy拷贝到Device内存ret acl.rt.memcpy(device_input_ptr, in_size, image_bytes, in_size, acl.const.MEMCPY_HOST_TO_DEVICE)执行推理ret acl.mdl.execute(model_id, [device_input_ptr], [device_output_ptr])从输出指针取回数据output_bytes acl.util.ptr_to_bytes(device_output_ptr, out_size) output_data np.frombuffer(output_bytes, dtypenp.float32)到这里推理结果是拿到了但YOLO的输出是原始的预测张量还需要后处理解析。这部分和GPU部署YOLO的逻辑是一样的对每个尺度的输出做解码得到cx, cy, w, h然后转成x1, y1, x2, y2做置信度过滤最后跑NMS。唯一要注意的是输出张量的数据排布和每个尺度的STRIDE需要根据你导出的模型结构来确定。因为我在导出YOLOv8时把后处理剥离了所以输出的是一个形状为[1, 84, 8400]或[1, 480, 8400]的预测矩阵其中4是边框信息80是类别数8400是三个尺度特征图上的候选框总数。解析时把它reshape成[84, 8400]再按列处理即可。3.5 使用DVPP做预处理让全流程跑得快起来前面提到Atlas卡上的DVPP硬件模块它在视觉推理pipeline里的作用比我一开始预期的还要大。标准的预处理流程包括图像解码、缩放、色域转换、Padding这些如果在CPU上做每张图可能需要十几到几十毫秒而DVPP做同样的事情通常可以做到几毫秒级别而且不占用NPU计算资源。我对比过一次YOLOv5推理时间同样的200张测试图CPU做resize和归一化时整条流程耗时约90ms/张把resize和色彩转换交给DVPP后单张耗时降到约55ms/张。这个差距在视频流场景会被放大到非常明显。DVPP的用法不复杂但要分四步创建通道、创建图片描述、调用缩放接口、销毁通道。代码骨架如下dvpp_channel_id acl.media.dvpp_channel_create(...) # 配置输入的图片信息比如宽、高、格式 # 配置输出的宽、高、格式 ret acl.media.dvpp_vpc_resize_async(...) # 获取缩放后的内存需要注意DVPP对图片宽高有对齐要求通常要求偶数对齐甚至16对齐。如果原图尺寸不满足需要先做一次分辨率对齐。另外DVPP的输出格式通常是YUV或RGB的planar格式不一定直接匹配模型的输入要求很多时候还需要在Host侧再做一次归一化和通道置换成NCHW。我实际操作时是用PIL/cv2读原图把它编码成JPG字节流然后交给DVPP解码并缩放最终得到的RGB输出再归一化并转成NCHW格式填进输入内存。AIPPAI Preprocessing是另一个选择它在ATC转换时就固化预处理参数比如crop、padding、色域转换、归一化系数等模型执行时自动完成预处理Host侧代码会简化很多。但AIPP的配置需要反复试参数写错了排查很痛苦而且不同版本ATC的AIPP配置语法略有差异。我的建议是先不用AIPP用Host侧预处理把流程跑通之后再考虑用AIPP替换性能瓶颈。4. 部署过程中那些让人上火的坑4.1 输入输出的Shape和名字对不上这是所有第一次用ATC的人都会碰到的问题。ASTC转换时--input_shape与ONNX图中的输入名不一致或者名字大小写不对都会直接导致转换错误或推理时的内存访问错误。注意点有两个一是ONNX的输入名要在Netron里确认不要想当然二是ONNX版本和ATC支持的算子集合有差异建议先用onnxsim消除多余的Reshape和Transpose。还有一种情况更难查明明模型转换成功了推理时acl.mdl.execute也返回成功但画出来的检测框全跑偏了。这种时候大概率是输入数据的内存排布问题。ONNX模型的输入默认是NCHW而前面DVPP或OpenCV读出来的数据是HWC需要显式做一次转置和归一化。我习惯写一个固定函数def preprocess(image_np, input_h640, input_w640): img cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB) img cv2.resize(img, (input_w, input_h)) img img.astype(np.float32) / 255.0 img np.transpose(img, (2, 0, 1)) # HWC - CHW img np.expand_dims(img, axis0) return np.ascontiguousarray(img, dtypenp.float32)ascontiguousarray这一步不能省ACL在做memcpy时对内存连续性要求很严格非连续数组会导致数据错乱。4.2 算子不支持或转换报Unsupported OpYOLO系列模型结构相对成熟但引入新版本YOLO时还是可能碰到算子兼容问题。我的排查流程是这样的先用onnxsim化简模型再搜日志里Unsupported关键字定位到具体算子名然后在昇腾社区算子清单里查它是否被支持。如果某个算子实在不支持常见绕法有几个如果是SiLU/LeakyReLU等激活函数通常已经支持换个ONNX opset版本往往就好了。如果是自定义的NMS或特殊上采样方式把检测头拆掉后处理放到Python侧。如果是Resize的模式问题把coordinate_transformation_mode改成align_corners或half_pixel不同模型不一样逐个试。如果是某个新增算子尝试拆解成多个基础算子组合比如把LayerNorm拆成Mean、Sub、Mul等基础op。原则上模型结构越原生、越接近标准结构ATC转换越顺利。想上最新发布的大型模型结构最好先在CPU/GPU侧用ONNX Runtime验证一遍可导出再上ATC。4.3 npu-smi显示正常但Init失败这个问题的症状是npu-smi info能看到卡但一运行ACL初始化就报ACL_ERROR_RT_DRIVER_INTERNAL_ERROR或device not ready。我遇到过一次比较典型的原因是固件版本和驱动版本不匹配驱动能枚举出设备但真正下发任务时底层链路异常。处理思路是先卸载再重装一套完全匹配的驱动和固件组合。昇腾社区提供了配套表按表里的版本组合来不要混搭。装完驱动后建议跑一次Ascend自带的check工具检查环境健康状态再跑sample工程验证。另外注意如果机器上有其他进程占用了NPU设备比如之前残留的推理进程没有正常退出也可能导致新进程初始化失败用npu-smi info查看任务列表必要时杀掉残留进程。4.4 推理速度远低于预期很多人第一次跑predict发现单帧推理要一两百毫秒第一反应是卡不行。其实大多数时候是流程优化不到位。我实测中影响推理速度的常见因素排序如下shape是否固定。动态shape会让编译和调度开销变大推理耗时可能是固定shape的好几倍。所以导出ONNX时务必固定输入尺寸。预处理是否占用了CPU。CPU端解码缩放归一化会显著拉长端到端延迟尽量交给DVPP。是否做batch推理。单张处理每张图都要独立执行一次模型开batch后显存利用率大幅提升。Atlas 300V 24G上跑YOLOv8sbatch 1单张耗时可到30ms左右batch 8时每张平均可能降到15ms以内。线程和进程绑定。ACL的Context和Stream是有线程亲和关系的多线程推理时设置不好可能导致锁竞争最简单的做法是每线程独立Context各自加载模型避免共享状态。复用内存。不要反复malloc和freeDevice内存尽量推理前申请好推理中重复使用。4.5 输出结果和GPU不一样同一个YOLO权重在GPU上跑效果正常到Atlas上检测框少了一半或者置信度普遍偏低。这个问题的本质原因是推理数值精度的差异ATC转换时默认可能使用了混合精度部分算子被替换成低精度实现。排查方法很简单把模型转换时的算子精度策略改成FP16或FP32观察结果变化。我之前遇到过YOLOv5s在Atlas上的mAP比GPU低的情况查下来是转换时--precision_mode的参数没配对。CANN里这个参数可以设为allow_mixed_precision、force_fp16、force_fp32等。我最后用了allow_mixed_precision并配合少量算子的黑名单保住了精度又维持了性能。如果发现某个算子在低精度下误差很大可以用--precision_mode配合--op_select_implmode或自定义算子黑名单强制特定算子走FP32。5. 实测性能数据与调优笔记部署跑通只是第一步真正要紧的是把吞吐和延迟调到能上线用的水平。我在Atlas 300V 24G上做了一轮基础压测测试模型是YOLOv8s输入640×640场景是图片目标检测。数据如下配置单张平均延迟说明batch1CPU预处理约95ms大量时间花在缩放和归一化上batch1DVPP预处理约55ms预处理不再成为瓶颈batch8DVPP预处理每张约18ms显存充足时batch提升明显batch16DVPP预处理每张约16ms继续增大batch收益变小这个数据可以作为参考但不同机器、不同驱动版本会有一定浮动。有一个经验值得强调batch增大到一定程度后总延迟反而上升原因在于单次推理耗时变长而单张平均耗时的下降幅度趋于平缓。最佳batch需要实际画一条曲线不要想当然选最大值。预处理这块我推荐把图片统一resize到长边640并保持比例然后做letterbox填充到640×640能有效减少小物体失真但会让DVPP配置多一个padding步骤。如果追求极致的吞吐直接用拉伸resize到640×640mAP会掉零点几个点大部分场景可接受。顺便说一句24GB显存对视觉模型确实很充裕除了batch加大的收益我还在同一张卡上同时加载了两个不同模型一个用于检测一个用于分类前后串联跑一个pipeline这样比单模型串行少一次数据搬运利用率也更高。6. 多少预算和性能下应该选Atlas而不是GPU这个问题我经常被问到尤其是在服务器选型阶段。我的判断标准很简单先分清楚你的任务性质。如果任务以推理为主模型结构相对稳定比如固定的人脸识别、OCR、目标检测输入尺寸基本固定那Atlas的低功耗、大显存、硬件解码优势非常明显。特别是同时需要处理多路视频流的时候一张卡能扛住的通道数很关键Atlas 300V在不少项目里就是专门为视频分析场景设计的。如果任务是训练、调参、跑各种最新模型或者需要快速跟CUDA生态里的某些闭源库对接那还是用GPU更顺。Atlas生态虽然在快速补齐但某些第三方组件对昇腾的适配滞后临时从GPU切到Atlas会折腾很久。还有一类场景是混合部署比如训练用GPU集群推理用Atlas集群。我参与过的一个项目就是这样做的模型在GPU上训练导出ONNX后在Atlas上做本地部署和边缘节点的下沉推理效果很理想。这种组合既利用了CUDA生态做训练研究又拿到了Atlas在推理环节的成本优势。判断时可以算一笔账单路视频检测业务一张Atlas 300V 24G如果按batch 8来跑YOLOv8s实测每张约18ms理论单卡每秒能处理40张以上图片换算成25FPS的视频流基本能覆盖多路并发。结合它的功耗和采购成本做规模化部署时性价比确实比同档次GPU要突出。7. 一些日常使用中的细节建议7.1 工具链的小习惯CANN版本升级后很多API行为会变我建议把CANN版本写死在项目文档里。之前有同事升级CANN后旧版本ATC转出来的OM模型还能跑但新版本ATC转出来的模型在新环境加载时报了一个诡异的错误排查了半天发现两边CANN的算子库版本不一样。模型文件本身不保证跨版本兼容这个特性尤其要注意。7.2 日志与调试的姿势ACL报错信息写得很抽象直接看常看不懂。我的习惯是统一在代码里封装一个错误处理函数所有ACL调用都检查返回码不等于0时打印错误码和错误描述并把当行代码位置打出来。这样排错时能快速锁定是初始化、内存分配、模型加载还是推理执行环节出错。def check_ret(ret, func_name): if ret ! 0: err acl.rt.get_error_str() print(fERROR: {func_name} failed, ret{ret}, err{err}) exit(1)另外CANN的日志默认比较全但级别调太高会明显影响性能我把日志级别调整为--logerror做生产排查问题时再临时开--loginfo。7.3 模型转换过程中的温故知新ONNX模型最好保留一份原始版本转换OM时留好ATC日志。每次换模型或改输入尺寸对照ATC日志里的网络结构摘要能发现一些隐藏问题。比如YOLOv5和YOLOv8的输出节点数量不一样不注意的话转换后推理代码里的输出形状解析会错直接导致检测框全乱。这类问题最好的防线不是看报错而是打印模型描述里的输入输出信息自己核对一遍。7.4 关于卡是否适合你的建议最后再说回Atlas 300V 24G是运算加速卡吗这个问题。如果用到一句话回答它就是一张AI推理运算加速卡。它做的是特定域里的运算加速通过NPU芯片和硬件编解码单元让视觉模型推理这件事跑得更快、更省电、更便宜。它不是通用计算的替代品也不是训练卡的平替把它放到AI推理这个赛道上它的价值是实打实的。我在实际操作中最大的体会是上手Atlas需要多一点的耐心官方文档虽然多但零散适合已经把流程跑通的人按需检索。而刚开始部署的人最缺的是一个端到端的参考路线这也是我写这篇文章的原因。希望你在部署YOLO遇到问题时能顺着这条路快速定位到问题所在而不是像我第一次那样对着抽象报错反复猜。如果你也在做类似的事欢迎拿这套流程先跑通一个demo再根据自己的业务模型做调整踩过坑之后你会对Atlas这个平台有自己的判断。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Handsontable 数据与索引体系详解:source data、visual dataset 与 physical/visual 索引映射 2026/9/21 2:19:04

Handsontable 数据与索引体系详解:source data、visual dataset 与 physical/visual 索引映射

Handsontable 数据与索引体系详解:source data、visual dataset 与 physical/visual 索引映射 【免费下载链接】handsontable JavaScript Data Grid / Data Table with a Spreadsheet Look & Feel. Works with React, Angular, and Vue. Supported by the Hands…

阅读更多 →
aiohttp 文件响应基准测试升级:按 small/large 文件大小参数化 `web.FileResponse` 性能评估 2026/9/21 2:19:04

aiohttp 文件响应基准测试升级:按 small/large 文件大小参数化 `web.FileResponse` 性能评估

后端Web框架WebSocket 【免费下载链接】aiohttp Asynchronous HTTP client/server framework for asyncio and Python 项目地址: https://gitcode.com/gh_mirrors/ai/aiohttp 点击查看 免费下载 本篇技术指南围绕 aiohttp 仓库变更记录 CHANGES/12913.misc.rst 展开…

阅读更多 →
Teleport Terraform Provider 资源开发指南:从新增资源到 legacy 迁移的完整实践 2026/9/21 2:19:04

Teleport Terraform Provider 资源开发指南:从新增资源到 legacy 迁移的完整实践

网络安全认证鉴权运维后端 【免费下载链接】teleport The easiest, and most secure way to access and protect all of your infrastructure. 项目地址: https://gitcode.com/gh_mirrors/tel/teleport 点击查看 免费下载 本指南以 integrations/terraform/CONTRIB…

阅读更多 →
Nix 源码调试指南:从带调试符号的构建到 gdb/lldb 断点实战 2026/9/21 2:19:04

Nix 源码调试指南:从带调试符号的构建到 gdb/lldb 断点实战

开发工具CLI 【免费下载链接】nix Nix, the purely functional package manager 项目地址: https://gitcode.com/gh_mirrors/ni/nix 点击查看 免费下载 本篇指南面向需要深入 Nix(purely functional package manager)源码内部进行排障、内存…

阅读更多 →
士兰微SC7A20H三轴加速度计在智能穿戴运动检测中的选型与实战 2026/9/21 2:19:04

士兰微SC7A20H三轴加速度计在智能穿戴运动检测中的选型与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
VitePress 命令行接口(CLI)完整参考:dev / build / preview / init 命令实战指南 2026/9/21 2:16:04

VitePress 命令行接口(CLI)完整参考:dev / build / preview / init 命令实战指南

前端文档 【免费下载链接】vitepress Vite & Vue powered static site generator. 项目地址: https://gitcode.com/gh_mirrors/vi/vitepress 点击查看 免费下载 本篇指南基于 VitePress 官方文档 命令行接口参考 展开,系统讲解 vitepress dev、vite…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞