☰
Atlas 300V Pro 24G实战:从驱动安装到YOLO模型转换与推理部署
2026/9/25 6:03:16 网站建设 项目流程

最近后台好几个朋友都在问同一个问题:Atlas 300V 24G到底是不是运算加速卡?能跑YOLO吗?正好我手头这张Atlas 300V Pro 24G已经用了一段时间,从装驱动、转模型到跑通YOLOv5/YOLOv8,能踩的坑基本都踩了一遍。这篇就把完整过程、底层逻辑和排查经验一次性说清楚,给准备入手或者正在折腾这张卡的朋友一个直接能用的参考。

先说结论:Atlas 300V Pro 24G是AI推理加速卡,不是通用计算卡。它确实能“加速运算”,但加速的是神经网络推理,不是所有人都理解的那种GPU通用并行计算。你要拿它跑CUDA程序,跑不了;想用它直接训练大模型,不合适;但你要把它用于YOLO这类目标检测模型的落地部署,它绝对是一张性价比很能打的卡。

1. 先把卡认清楚:Atlas 300V Pro 24G到底是什么

1.1 它确实是“运算加速卡”,但和你理解的GPU不是一回事

“运算加速卡”这个词太宽泛了。有人听到“加速卡”第一反应是显卡,第二反应是CUDA,然后上手就准备装PyTorch的GPU版,结果发现装完根本识别不到设备,于是卡在这一步。

Atlas 300V Pro 24G首先不叫显卡,它叫“AI推理加速卡”,核心芯片用的是昇腾310P系列。硬件上它确实插在PCIe插槽里,确实有自己的显存,也确实能跑神经网络计算,但它的软件生态是独立的:华为昇腾这边叫CANN(Compute Architecture for Neural Networks)。PyTorch、TensorFlow不能直接调用它,中间必须经过模型转换,把模型转成昇腾专用的OM格式才能推理。

所以“是运算加速卡吗”这个问题,准确答案是:它是AI推理加速卡,负责把训练好的模型高效跑起来。你可以把它理解成一条专门加工特定零件的流水线,而不是一台什么都能干的通用机床。GPU是通用并行计算,什么活都能接,但要处理神经网络推理时往往“杀鸡用牛刀”;Atlas 300V Pro只干推理这一件事,效率能拉得很高,功耗也低一些。

1.2 24G显存适合怎样的YOLO部署场景

这张卡最显眼的配置就是24GB显存。很多人一看24G,第一反应是“能不能训大模型”,第二反应是“能不能跑更大的batch”。大batch推理是可以的,但它的核心优势不是训练。

24G显存放到推理场景里非常充裕。拿YOLOv5s来说,640x640输入,单张图模型本身占用并不高,FP16推理时显存占用通常只有几百MB。这意味着剩下的显存可以拿来装多路视频流、放大batch、或者跑多个模型实例。

如果你做的是多路摄像头实时检测,比如城市交通、园区安防、工厂质检,一张Atlas 300V Pro 24G可以同时处理好几路1080p视频流,显存不会成为瓶颈。我实际跑下来,单卡跑4到8路YOLOv5s视频分析,显存还有很多余量。更大的显存还意味着你可以跑YOLOv5m、YOLOv8m这类更大的模型,而不用频繁担心OOM。

1.3 官方“视频解析卡”定位对YOLO有什么影响

Atlas 300V Pro的官方定位更偏向视频解析,板载了硬件视频解码单元,支持H.264/H.265硬解码。这套解码能力对YOLO部署其实非常关键。

很多人在做视频检测时忽略解码环节,以为NPU负责检测就够了。但我实际测下来,如果走CPU软解,几路1080p视频就能把CPU吃满,NPU反而闲着。Atlas 300V Pro的硬解码能直接接管视频流解析,把解码后的原始帧喂给NPU推理,CPU只负责调度和简单前后处理。这种“解码+推理”一体化的设计,做视频类YOLO项目时确实省心。

如果你只是做单张图片推理或者离线批量检测,解码能力用处不大,但做实时视频流检测,这张卡的价值就非常明显了。所以它的24G显存加上硬解码,本质上就是冲着“长时间、高吞吐的视频结构化分析”去的。

2. 部署前的准备:驱动、固件、CANN缺一不可

2.1 服务器硬件和系统环境怎么搭

不少人拿到卡后第一件事就是插上开机,然后装驱动,结果发现各种报错。Atlas 300V Pro对服务器环境是有要求的,提前搞清楚能少走很多弯路。

服务器主板需要有标准PCIe x16插槽,供电要跟得上。300V Pro是单槽被动散热,风道必须做好,不然跑高负载时温度能飙到让人心里发慌。系统层面,建议使用Ubuntu 20.04或22.04 LTS这类主流发行版,内核版本不要太新也不要太旧,太新的内核可能导致驱动编译失败。

安装驱动前有几个基础依赖必须装好。以Ubuntu为例,执行:

sudo apt update sudo apt install -y gcc g++ make linux-headers-$(uname -r) dkms

linux-headers是重点,驱动安装时需要在当前内核上编译内核模块,头文件缺失会直接报错。国内很多服务器是离线环境,建议提前把所有依赖包下载好,不然现场会非常狼狈。

2.2 驱动与固件安装的关键步骤

昇腾的软件栈里有三个东西:驱动、固件、CANN。驱动负责让操作系统识别硬件,固件负责底层芯片逻辑,CANN是上层开发套件。三个版本必须配套,否则后患无穷。

下载安装包时,到昇腾社区找到对应Atlas 300V Pro驱动和固件包,注意区分操作系统架构,x86服务器选x86_64包,ARM服务器选aarch64包。驱动和固件通常是两个独立的.run文件,安装顺序是驱动优先,然后装固件。

安装驱动:

sudo ./Ascend-hdk-300vpro-npu-driver_*.run --full --install

安装固件:

sudo ./Ascend-hdk-300vpro-npu-firmware_*.run --full --install

装完驱动后先不要急着装CANN,用npu-smi info命令验证一下卡有没有被正确识别。如果能看到卡型号、芯片信息、显存容量,说明驱动和固件已经工作正常。如果看不到卡,先查lspci | grep -i ascend确认PCIe总线是否识别到设备,再检查驱动安装日志。

一个很常见的坑:之前装过其他版本的驱动,没卸载干净,新驱动装不上或者装完卡反而消失了。遇到这种问题,先卸载旧版本再重装:

sudo /usr/local/Ascend/driver/tools/upgrade-tool --uninstall

这个命令细节各版本略有不同,但思路是一样的,先清干净,再装新的。

2.3 安装CANN Toolkit并配好环境变量

驱动和固件就绪后,接下来装CANN Toolkit。CANN是昇腾的计算框架,ATC模型转换工具和AscendCL推理接口都包含在CANN里。

还是到昇腾社区下载对应版本的CANN Toolkit包,同样是.run文件,安装:

sudo ./Ascend-cann-toolkit_*.run --install

默认安装路径是/usr/local/Ascend/ascend-toolkit。安装完成后,环境变量必须手动加载。虽然安装包会在/usr/local/Ascend/ascend-toolkit下生成环境变量脚本,但不代表你当前终端会自动生效。

我建议在~/.bashrc里加上这一行,省得每次开终端都要手动source:

source /usr/local/Ascend/ascend-toolkit/set_env.sh

然后执行source ~/.bashrc。验证方法很直接,执行:

atc --help

如果能正常输出ATC工具的帮助信息,说明CANN已经进入PATH,环境变量没问题。

这里有个很多新手容易忽略的坑:如果机器上装过多个CANN版本,环境变量脚本里的路径一定要指向你实际要用的那个版本。我曾经因为PATH里旧版本CANN排在前面,整整排查了一晚上,才意识到atc调到的根本不是新版的工具。用which atc看一眼绝对路径,能排查掉一半这种诡异问题。

2.4 npu-smi验证卡是否就绪

环境装好后,日常工具就是npu-smi,类似NVIDIA的nvidia-smi。运行:

npu-smi info

可以查看所有NPU卡的状态,包括芯片温度、芯片型号、显存使用率、PCIe带宽、算力利用率。部署YOLO之前,至少先确认一下显存是正常的24G,芯片型号是什么。这个芯片型号在后续ATC转换时要用到,非常重要。

我这张卡识别出来的芯片型号是Ascend310P3,不同批次可能略有差异。你用npu-smi info看到的型号是什么,ATC里--soc_version就填什么,这个不能想当然乱填。填错了,转换工具会直接报“soc version not supported”。

3. 重头戏:把YOLO模型转成昇腾OM格式

3.1 为什么不能直接拿PyTorch模型上NPU

很多人第一次接触昇腾时会问:为什么PyTorch模型不能直接跑?答案在硬件架构。昇腾NPU的执行逻辑和GPU不一样,它只认经过自己编译器优化过的计算图。

这个机制很多人觉得麻烦,但其实可以类比TensorRT。PyTorch模型先导出成ONNX,再用ATC工具把ONNX转成OM,这个过程本质上就是“针对特定芯片的编译优化”。ATC会把算子在NPU上的执行路径重新排布,能做算子融合的融合,能优化的内存布局优化掉。转出来的OM文件才是真正在NPU上跑的模型。

我对这个机制的看法是:麻烦是麻烦了点,但好处也明显。OM模型一旦生成,推理时少了很多运行时解析和优化的开销,性能更稳定。你不需要在每次推理时都做一遍模型解析,所以实际跑起来反而更利索。

3.2 PyTorch导出ONNX时容易踩的细节

我以YOLOv5为例,因为YOLOv5的导出流程最成熟,踩坑的人最多。YOLOv8思路基本一致,就是输出结构略有差异。

先准备好YOLOv5的权重文件,比如yolov5s.pt。官方仓库提供的export.py可以直接导出ONNX:

python export.py --weights yolov5s.pt --include onnx --opset 11 --batch-size 1

有几个参数值得展开说:

--opset 11是兼容性比较好的算子集版本,太高的opset对ATC支持不算友好,太低又会缺少一些算子,11是实测下来最稳的。--batch-size 1是固定batch导出,推理场景下这最可控,ATC转换时输入尺寸也最好写死。如果以后要改batch,重新转一遍模型就行,不麻烦。

导出后建议用Netron打开ONNX文件看一眼输入输出结构。YOLOv5导出后输入节点的名称通常是images,输出可能是三段特征图,也可能是一个合并的大输出,具体看你用的YOLOv5版本和导出参数。知道输入输出节点名,后续ATC转换才能准确指定参数。

还有一个细节:导出ONNX后,先用onnxruntime在CPU上做一次推理,确认模型本身没问题,再往ATC走。否则等转到一半发现是原始模型有问题,排查起来就绕远了。

3.3 AIPP配置实战:归一化交给NPU

ATC转换时有一个非常实用的配置叫AIPP,全称是Artificial Intelligence Pre-Processing,人工智能预处理。它的作用是把图像预处理操作下沉到NPU上完成。

YOLO推理前通常要做的预处理有两件事:把像素值从0到255归一化到0到1,以及调整图像通道顺序。如果这些在Host侧CPU上做,对于视频流这种高吞吐场景,会把CPU和内存带宽吃得很厉害。AIPP能把归一化这种固定操作放进固定硬件单元里执行,CPU就轻松了。

AIPP配置是一个文本文件,内容大致是这样:

aipp_op { aipp_mode: static input_format: RGB888_U8 src_image_size_h: 640 src_image_size_w: 640 csc_switch: false rbuv_swap_switch: false crop: false min_chn_0: 0 min_chn_1: 0 min_chn_2: 0 var_reci_chn_0: 0.003921569 var_reci_chn_1: 0.003921569 var_reci_chn_2: 0.003921569 }

逐个解释一下关键字段:

aipp_mode: static表示静态AIPP,输入图像尺寸固定为640x640。input_format: RGB888_U8表示喂给模型的原始数据是RGB顺序的uint8三通道数据。var_reci_chn_0到var_reci_chn_2是归一化系数的倒数,0.003921569就是1除以255,AIPP底层是做乘法的,所以配置的是倒数。

这里最容易犯的错是:AIPP配置启用了,代码里又做了一遍归一化,导致数值被缩放了两次,模型输出全部乱掉。规则很简单,AIPP启用后,Host侧只负责把图像处理成uint8的CHW排列数据,归一化的事完全交给AIPP,代码里绝不能再除以255。

3.4 ATC转换命令与常见参数解析

环境变量加载好后,执行ATC转换:

source /usr/local/Ascend/ascend-toolkit/set_env.sh atc --model=yolov5s.onnx \ --framework=5 \ --output=yolov5s_bs1 \ --soc_version=Ascend310P3 \ --input_shape="images:1,3,640,640" \ --insert_op_conf=aipp.cfg \ --output_type=FP32 \ --log=info

参数含义总结如下:

参数含义说明
--model输入模型文件这里是ONNX模型路径
--framework模型框架类型5代表ONNX
--output输出OM文件前缀生成yolov5s_bs1.om
--soc_version芯片型号用npu-smi查到的实际型号
--input_shape输入节点名和尺寸必须和ONNX输入一致
--insert_op_confAIPP配置文件用于预处理下沉
--output_type输出层数据类型FP32有利于后处理精度
--log日志级别调试时用info,稳定后改error

--soc_version的值一定要和npu-smi info查到的芯片型号一致,这是最容易被忽略的。YOLOv5导出ONNX时输入尺寸虽然可以在模型里动态,但ATC为了做编译优化,最好把input_shape写死。如果你以后要跑不同分辨率的输入,要么重新转,要么用动态AIPP,后者的配置复杂度会高不少,新手阶段建议先用固定尺寸。

转换成功后,你会发现生成的.om文件比ONNX文件小不少,这正常,因为ATC在编译过程中把很多常量折叠掉了,顺便做了图优化。

4. 在Atlas 300V上跑通YOLO推理

4.1 一个最简的AscendCL Python推理框架

OM模型有了,接下来是用AscendCL加载模型并推理。AscendCL是昇腾的底层统一编程接口,Python版调用起来也不算复杂。

写一个最小的Python推理流程:

import acl import numpy as np # 初始化 acl.init() ret = acl.rt.set_device(0) context, ret = acl.rt.create_context(0) stream, ret = acl.rt.create_stream() # 加载模型 model_id, ret = acl.mdl.load_from_file(b"yolov5s_bs1.om") model_desc = acl.mdl.create_desc() ret = acl.mdl.get_desc(model_desc, model_id) # 获取输入输出大小 input_size = acl.mdl.get_input_size_by_index(model_desc, 0) output_num = acl.mdl.get_num_outputs(model_desc) output_sizes = [ acl.mdl.get_output_size_by_index(model_desc, i) for i in range(output_num) ] # 分配device内存 input_ptr, _ = acl.rt.malloc(input_size, 2048) output_ptrs = [ acl.rt.malloc(size, 2048)[0] for size in output_sizes ]

这里有几个点要注意。acl.rt.malloc第二个参数是内存对齐值,一般传2048或按官方要求来。output_num是模型输出节点数量,可能不止一个,所以是一个列表。分配好内存后,把图像数据拷贝到device侧:

# 假设img已经预处理成uint8 CHW数据 input_data = img.astype(np.uint8).tobytes() ret = acl.rt.memcpy(input_ptr, input_size, input_data, input_size, 2) # 2表示H2D # 执行推理 ret = acl.mdl.execute_async(model_id, [input_ptr], output_ptrs, stream) ret = acl.rt.synchronize_stream(stream) # 把输出拷回host侧 outputs = [] for i in range(output_num): out_size = output_sizes[i] buf = np.zeros(out_size // 4, dtype=np.float32) ret = acl.rt.memcpy(buf, out_size, output_ptrs[i], out_size, 1) # 1表示D2H outputs.append(buf)

执行推理时建议用execute_async加stream的方式,不要图省事用同步execute。execute_async可以和图像预处理、后处理重叠,对整体吞吐影响非常明显。用完模型后记得acl.mdl.unload(model_id),device内存也要acl.rt.free,不然长时间跑服务内存会持续上涨。

4.2 图像预处理:letterbox、通道顺序、归一化别搞混

YOLO家族的推理预处理和大部分分类模型不太一样。分类模型通常直接resize到固定尺寸,但YOLO为了保证目标不变形,用的是letterbox,也就是按比例缩放后,在边缘补灰边,把图像凑成640x640。

letterbox的核心逻辑是:

import cv2 import numpy as np def letterbox(img, new_shape=(640, 640), color=(114, 114, 114)): shape = img.shape[:2] r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) new_unpad = (int(round(shape[1] * r)), int(round(shape[0] * r))) img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR) dw = (new_shape[1] - new_unpad[0]) / 2 dh = (new_shape[0] - new_unpad[1]) / 2 top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) return img

先resize,然后计算需要填充的边框,最后用copyMakeBorder填灰边。灰边默认是114,这和YOLOv5训练时的数据增强保持一致,如果你在微调时改过填充色,推理时也要跟着改。

很多人在这一步翻车。OpenCV读入的图像默认是BGR顺序,而YOLOv5模型训练时用的是RGB顺序,所以推理代码里处理完letterbox后必须转通道顺序:

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = img.transpose(2, 0, 1) # HWC转CHW

如果启用了AIPP且配置的是RGB888_U8,这一步做完就可以直接把uint8数据传给设备内存。如果没有启用AIPP,还需要继续做归一化并转成float32:

img = img.astype(np.float32) / 255.0

这里再次强调,AIPP和代码归一化只能二选一,两者同时启用等于做了两遍归一化,模型输出肯定不对。

4.3 后处理NMS与多输出节点处理

模型推理拿到的是原始输出,需要解码成目标框。YOLOv5的输出通常是以下两种形式之一:

第一种,输出三个不同尺度的特征图,每个特征图包含预测的边界框参数、物体置信度和类别分数。这种需要做anchor解码,把网格坐标还原成图像坐标。第二种,导出时已经把解码逻辑固化到模型里,输出直接就是一组框,比如形状是1x25200x85,其中25200是三个尺度下的anchor总数,85代表4个坐标加1个物体置信度加80个类别分数。

无论哪种形式,最后一步都是非极大值抑制NMS。最简单的方式是直接用OpenCV的cv2.dnn.NMSBoxes:

from cv2.dnn import NMSBoxes boxes = [] scores = [] class_ids = [] for pred in detection_result: cx, cy, w, h, conf, *cls_probs = pred if conf < 0.25: continue class_id = int(np.argmax(cls_probs)) score = conf * cls_probs[class_id] if score < 0.25: continue x1 = int((cx - w / 2) * ratio_x) y1 = int((cy - h / 2) * ratio_y) x2 = int((cx + w / 2) * ratio_x) y2 = int((cy + h / 2) * ratio_y) boxes.append([x1, y1, x2 - x1, y2 - y1]) scores.append(float(score)) class_ids.append(class_id) indices = NMSBoxes(boxes, scores, score_threshold=0.25, nms_threshold=0.45)

注意,如果用了letterbox预处理,坐标还原时要考虑缩放比例和padding偏移,否则框会偏。比例ratio_x和ratio_y不要直接拿原图宽度除以640,而是要按letterbox里实际使用的缩放比例来算。这是YOLO推理最常见的后处理偏差来源。

如果用的是自己的数据集,类别数不是COCO的80,模型输出最后一维会变,解析代码里class_probs的长度和后处理逻辑都要跟着改。

4.4 性能优化方向:并发、流与AIPP

模型能跑通之后,大家最关心的就是性能。我实际体验下来,Atlas 300V Pro跑YOLOv5s,单路推理延迟很理想,但如果只是单线程单模型循环推理,NPU利用率其实不高,性能远没有发挥出来。

优化方向主要有四个。

第一,把AIPP用起来。预处理下沉到NPU后,CPU压力明显下降,总吞吐能提升不少。第二,多stream并发。AscendCL支持创建多个stream,每个stream里可以挂不同的推理任务,多个stream同时跑可以让NPU更饱满。第三,多线程生产者消费者模型。一个线程负责解码和预处理,一个线程负责执行推理,一个线程负责后处理,中间用队列解耦。这样可以避免解码阻塞推理。第四,如果模型有batch维度,尽量在模型转换时就把batch设大一点,比如batch=4或batch=8,把多路视频帧拼成batch一起推理,比单张循环推理快很多。

用npu-smi info看算力利用率,如果一直很低,说明任务量不够或者预处理成了瓶颈。调整并发后,看到利用率抬上去了,基本就说明NPU在干正事了。

5. 实战中的常见问题与排查技巧

5.1 版本不匹配:驱动、固件、CANN的三角关系

昇腾软件栈最烦的问题就是版本配套。驱动版本太旧,新版本CANN某些接口不可用;固件版本不匹配,npu-smi info可能直接报错;CANN版本太高,老模型转换可能不兼容。

我遇到最典型的一次是:驱动和固件装好后,npu-smi info完全正常,但跑推理时acl.mdl.load_from_file一直报错,日志里提示runtime版本和driver版本不匹配。后来才发现,CANN装的是最新版,驱动却停留在半年前的版本,两个版本之间的通信协议对不上。

解决办法很简单:到昇腾社区查清楚当前驱动、固件、CANN的配套版本关系,然后严格按那个组合安装。不要盲目追求某一边的最新版。昇腾社区每个版本页面都会给出配套关系表,安装前先花五分钟确认,比装完再折腾省时间。

5.2 ATC转换报错:算子不支持、输入节点找不到怎么办

ATC转换时报错的概率非常高,常见报错有几类。

一类是“Unsupported Op”或者“Op not supported”,意思是ONNX模型里的某个算子在当前CANN版本中不受支持。这种情况通常出现在模型版本比较新、用了比较新的算子的场景。解决办法是换一个更稳定的模型版本,或者升级CANN到更高版本。YOLOv5一般没有这个问题,YOLOv8有些版本需要CANN版本稍微新一些才好使。

另一类是“Input node not found”或者“input shape mismatch”。原因是--input_shape里的输入节点名和ONNX模型里的实际输入名对不上。解决办法是用Netron打开ONNX,确认输入节点的准确名称,再把--input_shape里的名字改成一致。

还有一类是--soc_version填错。有人从网上复制命令时填了Ascend310P1、Ascend310P2之类的值,但自己的卡实际是Ascend310P3,ATC就会报soc version不支持。这个必须用npu-smi info查到的型号为准。

5.3 推理结果不对:为什么框全错、全零、崩溃

模型转好了、代码跑通了,但输出的框全是乱的,这个问题排查起来最头疼。根据我的经验,按顺序检查这几个地方,基本能定位。

第一,检查是否重复归一化。前面强调过,AIPP启用了,代码里就不能再除以255。你可以在预处理代码里打印输入数据的数值范围,如果uint8输入应该在0到255之间,如果float输入应该在0到1之间。数值范围不对,说明预处理逻辑和AIPP配置冲突了。

第二,检查通道顺序。OpenCV读入的BGR图如果没转RGB,而模型训练时是RGB,颜色通道全乱了,检测结果自然不对。AIPP配置里的rbuv_swap_switch也可以做通道转换,但如果你在代码里转了一次,AIPP又转一次,结果也会错。

第三,检查letterbox参数。训练时的letterbox和推理时的letterbox如果填充色、缩放策略不一致,模型看到的数据分布和训练时不一样,精度会下降。尤其是灰边值,默认114,别随意改。

第四,检查坐标还原。后处理解码时如果把归一化坐标直接还原到原图尺寸,而没有考虑letterbox的padding和缩放,框的位置会整体偏移,看起来每个框都在目标左上方。

5.4 性能不达预期:先看数据是不是真的走了NPU

有时候模型跑起来了,但速度比预期慢得多。这时候第一个要确认的是:推理到底是在NPU上完成的,还是CPU上完成的。

很多人做完ATC转换后,在代码里却调用了onnxruntime或者自己写的CPU推理逻辑,当然慢。检查方法很简单,跑推理的同时开另一个终端执行npu-smi info,观察算力利用率。如果模型在NPU上跑,利用率会有明显波动;如果利用率一直是0,恭喜你,模型压根没走NPU。

第二个常见瓶颈是预处理和后处理都卡在CPU主线程,导致NPU在等待数据。解决思路就是多线程加队列,让预处理、推理、后处理三个环节流水线化。

第三个瓶颈是单stream串行执行。昇腾NPU本身支持多stream并行,建议用多个stream并发推理。如果模型是batch=1,可以拆成多路视频流、每路一个stream,或者多线程发送推理任务。实际效果比单stream串行高很多。

最后想说,Atlas 300V Pro 24G这张卡不是“买了插上就能用”的即插即用设备,前期环境准备和模型转换确实要花不少功夫。但一旦OM模型调通,后面跑多路视频推理会非常稳定省心。如果你正打算拿它部署YOLO,建议先把驱动、固件、CANN的版本配套关系理清楚,再动手转模型。希望这篇总结能帮你少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询