新闻详情

新闻详情

首页 / 资讯中心 / 详情

Atlas 300V 24G部署YOLOv5推理实战:从环境配置到性能调优

发布时间:2026/9/26 7:10:33来源:尧图网络
Atlas 300V 24G部署YOLOv5推理实战:从环境配置到性能调优
上周有个搞智慧安防的朋友突然问我Atlas 300V 24G 到底算不算运算加速卡能不能拿来跑 YOLO他说网上搜了一圈看到不少人把这张卡和训练卡、显卡混在一起讨论越看越糊涂。这个问题其实很有代表性——很多刚开始接触昇腾生态的人第一次看到 Atlas 300V 24G 都会有同样的困惑它和 NVIDIA 的 T4、A100 是一类东西吗我能不能用以前写 CUDA 的思路直接调用它我当时给他的回答是这张卡不是用来跑通用计算的但你要是把 YOLO 这类推理任务部署上去它完全称得上一块推理加速卡而且在多路视频场景下性价比很高。后来我把自己在 Atlas 300V 24G 上完整部署 YOLOv5 的过程梳理了一遍从硬件定位、软件栈安装、模型转换到 AscendCL 推理工程、性能调优踩过的坑也一并记录下来。这篇内容适合三类人看准备在昇腾推理卡上落地检测模型的算法工程师、第一次接触 CANN 工具链的嵌入式/运维同学以及正在选型做边缘端视频分析方案的技术负责人。1. 先回答热搜那个问题Atlas 300V 24G到底加速在哪儿1.1 为什么大家会有它是不是运算加速卡的疑问这个疑问的根源在于Atlas 系列覆盖了太多形态有插在服务器里的加速卡有板载的 AI 加速模块还有整机服务器。而命名上300E、300I、300V、300T、300U 这些后缀本身就容易劝退新人。NVIDIA 思维在这里其实会形成误导。在 CUDA 体系里一张计算卡拿回来就能做通用并行计算写个核函数就能跑。昇腾不是这个玩法Atlas 300V 24G 必须通过 CANNAscend Computing Language Toolkit这套专用软件栈或者 torch_npu 这类适配插件才能调用芯片能力。它不像 GPU 那样是一个通用并行计算单元而更接近一个专用 AI 推理引擎。所以严格说起来它不适合回答是不是运算加速卡这种非黑即白的问题——在 AI 推理加速这个具体赛道上它是合格的加速卡在通用并行计算赛道上它完全不是。你没法在这张卡上跑一个随意的 C 并行程序只能跑它能识别的、经过转换的深度神经网络模型。1.2 这张卡的硬件规格和真实定位Atlas 300V Pro 24GB 用的是昇腾 310P 系列芯片双槽位全高全长 PCIe 卡板载 24GB 显存。310P 这颗芯片在昇腾产品线里的定位就是边缘推理强调的是功耗比和多人路视频处理能力不是像昇腾 910B 那样面向大规模训练的芯片。我整理了一张 Atlas 常见卡型的对照表方便你快速定位卡型芯片显存定位典型场景Atlas 300I Pro昇腾310P16GB推理卡单人路/少路检测通用推理Atlas 300V Pro昇腾310P24GB视频分析推理卡多路视频流解码检测Atlas 300T昇腾91032GB 起训练卡模型训练Atlas 300U昇腾310P8GB低功耗加速卡边缘盒子场景Atlas 300V 和 300I 的区别主要体现在视频接入能力上。300V 系列对视频流的解码、缩放、颜色转换做了硬件级支持适合直接对接摄像头 RTSP 流做检测300I 更偏通用推理。如果你只是做图片检测两者都能胜任但要做视频结构化分析300V 的 DVPP数字视觉预处理能力优势就会非常明显。1.3 它到底适不适合跑 YOLO我的结论是适合而且是目前昇腾推理卡里很适合用来部署 YOLO 的一张卡。原因有三个。第一24GB 显存足够大可以在同一张卡上加载多个 YOLO 模型实例或者把输入 batch 调大第二300V 系列内置的 DVPP 模块能直接把视频流解码、缩放、格式转换这些耗时操作卸载到硬件上CPU 几乎不参与第三昇腾社区对 YOLO 系列的适配做得比较完善YOLOv5、YOLOv8 导出 ONNX 后基本都能在 ATC 转换阶段顺利通过。如果你原本是想找一张卡来训练YOLO那 300V 24G 不合适老老实实选训练卡或者 NVIDIA GPU。如果是把训练好的权重放到边缘端、机房或者一体机上跑推理那这张卡完全值得纳入考虑。下面进入实操环节。2. 环境准备驱动、CANN、固件一次装清楚的实操清单2.1 宿主机选型与硬件安装先说硬件层面的限制。Atlas 300V Pro 是标准 PCIe 卡需要一个 x16 物理插槽x8 速率也能点亮但带宽会打折视频多路场景建议 x16建议必须插在物理机上。我在虚拟机里试过一次NPU 直通没配好结果跑推理时驱动直接报错后来换了物理机才顺利出结果。所以如果你是在 VMware/KVM 环境里做测试先确认是否支持 PCIe passthrough。操作系统建议用 Ubuntu 20.04 x86_64 或 CentOS 7.6 以上内核版本不能太新也不能太老官方对内核版本有明确的支持范围。我自己用的 Ubuntu 20.04.6内核 5.4整体非常稳。国产化场景会用麒麟 V10也可以用步骤一样只是安装包选 arm 版本时要对应好。2.2 软件栈的版本匹配一个容易忽略的重点昇腾的软件栈分为两层Ascend HDK包含驱动Driver和固件Firmware负责操作系统和 NPU 芯片之间的通信。CANN Toolkit上层的开发运行环境包含 ATC 模型转换工具、AscendCL 运行时、推理引擎等。很多新人第一次装的时候驱动装一个版本CANN 又装一个版本结果 npu-smi 能看见卡但 ATC 一跑就报版本不匹配。装机时务必保持 HDK 和 CANN 的主版本一致。例如 CANN 是 7.0那么驱动固件也要选自带的配套版本不要混搭 6.x 的驱动。我用过的一组稳定组合是组件版本操作系统Ubuntu 20.04.6 LTSAscend HDK24.1.RC2驱动固件CANN Toolkit7.0.RC1Python3.8芯片型号昇腾310P32.3 安装命令与环境变量驱动和固件的安装包是一个.run文件下载后执行chmod x Ascend-hdk-*.run ./Ascend-hdk-*.run --installCANN Toolkit 同样是.runchmod x Ascend-cann-toolkit_7.0.RC1_linux-x86_64.run ./Ascend-cann-toolkit_7.0.RC1_linux-x86_64.run --install装完之后配置环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh建议把这行写进~/.bashrc因为每次新开终端都要重新 source。确认环境变量env | grep ASCEND看到ASCEND_TOOLKIT_HOME之类的输出就说明环境变量生效了。2.4 用 npu-smi 确认卡已经被正确识别装好驱动后用昇腾生态里最常用的状态查看命令npu-smi info正常情况下能看到卡的温度、显存使用率、算力利用率、芯片型号等。我见过不少人到这里就卡住了——npu-smi提示No npu device found。这种问题 80% 是驱动和固件版本不匹配或者 PCIe 插槽识别异常。可以用lspci | grep -i process看看系统是否已经识别到昇腾芯片能识别再到驱动层面排查。到这一步你的 Atlas 300V 24G 的地基就算打好了。3. 把YOLOv5转成OMATC转换链路上的关键节点3.1 为什么非要把 PyTorch 模型转成 OM刚开始接触昇腾的人会问我能不能直接在 NPU 上跑 PyTorch 的.pt文件技术上可以装一个 torch_npu 插件就能在 NPU 上执行 PyTorch 算子。但实际生产部署时我强烈建议走PyTorch → ONNX → OM这条路。原因有两个。第一.pt文件在 torch_npu 上跑每个算子都要走 PyTorch 的解释执行层调度开销大难以接近芯片的峰值性能而 OM 是离线编译好的静态图推理流程被固化省掉了逐算子解析的过程延迟和吞吐都有明显优势。第二生产环境不可能每台机器都装完整的 PyTorch 环境通过 ATC 转换成 OM 后运行时只需要 CANN 的推理运行时依赖面小得多。记住这个原则训练用 PyTorch部署用 OM。3.2 导出 ONNX 时的几个坑导出 ONNX 这一步看似简单其实后面很多转换报错都是在这里埋下的。以 YOLOv5 为例导出命令一般是python export.py --weights yolov5s.pt --include onnx --opset 11我实际踩过的坑有三个第一opset 版本。昇腾 ATC 对 ONNX opset 的支持不是越新越好。opset 11 是最稳的选择opset 13 或更高时如果模型里有某些新算子比如Resize的coordinate_transformation_mode特定配置转换阶段可能直接报不支持。我后来统一固定在 opset 11再也没有因为算子版本出过问题。第二要不要带 NMS。官方 YOLOv5 导出 ONNX 时默认会把 NMS 一起导进来为的是部署时省事。但昇腾这边NMS 在 310P 上效率并不高而且一旦带着 NMS 导出输入输出的 tensor 结构会变复杂后面用 AscendCL 写后处理反而不方便。我的建议是导出时去掉 NMS让模型只输出三个尺度的原始预测张量NMS 放到 CPU 后处理部分做。第三动态尺寸。如果你打算固定输入尺寸比如 640×640导出时不要加--dynamic这样 ATC 转换后模型更精简如果要做多尺寸推理那就必须保证 ONNX 的 dynamic axes 设置正确然后 ATC 转换时用动态 shape 参数。绝大多数场景下固定尺寸已经够用我更推荐固定尺寸。3.3 ATC 转换命令与 --soc_version 选择拿到 ONNX 之后用 ATC 工具做离线转换。核心命令行如下atc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_bs1 \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --logerror几个参数逐一说明--framework5表示输入是 ONNX。架构造型时这里的含义是1是 Caffe2是 MindSpore3是 TensorFlow5是 ONNX别搞混。--input_shapeimages:1,3,640,640需要和 ONNX 输入名一致。YOLOv5 的输入名通常是images但如果你是自己写的导出脚本名字可能叫input或data不一致时转换会报错。--soc_versionAscend310P3是最关键也最容易填错的一项。它告诉你手里的芯片具体型号。Atlas 300V Pro 24G 对应的昇腾 310P3 芯片所以在 300 系列推理卡上基本都填Ascend310P3。如果你不确定用npu-smi info查看卡型号后在 CANN 的配套文档里查到对应关系再填。转换成功的标志是目录下多出一个yolov5s_bs1.om文件。失败的话--logerror只会输出错误摘要我建议排查时直接改成--loginfo但信息量会很大记得把输出重定向到文件里看atc --modelyolov5s.onnx --framework5 --outputyolov5s_bs1 --soc_versionAscend310P3 --loginfo atc_log.txt 213.4 转换过程中的常见报错我把实际遇到的转换报错整理成一张表供排查参考报错信息根因解决办法EI0001: Input node not found输入张量名和--input_shape里写的不一致用 Netron 打开 ONNX 查看实际输入名E40006: Unsupported op模型中包含 310P 不支持的算子修改导出方式或换 opset 版本A20001: soc_version is invalid--soc_version填错明确芯片型号后重填Resize op ... coordinate_transformation_mode报错上采样算子配置不兼容检查导出时的 opset固定为 11转换成功但推理结果全 0动态尺寸和静态输出尺寸不匹配导出时统一用固定 shape转换通过只是第一步接下来还要写推理代码这才是真正上手 NPU 编程的开始。4. AscendCL推理代码怎么写从初始化到出框的最小可跑工程4.1 AscendCL 的核心编程模型AscendCLAscend Computing Language是 CANN 的编程接口。第一次接触的人会觉得自己在写 CUDA但又有点不一样。它有几个核心概念必须理解Device设备对应一张物理卡。Context上下文类比 CUDA 的 context一个进程默认一个保存设备上执行环境的状态。Stream流任务队列。同一个 stream 里的任务是按序执行的不同 stream 可以并行。Dataset 和 DataBuffer模型输入输出的数据容器。一个 Dataset 里面可以有多个 DataBuffer。代码调用的整体链路是aclInit - aclrtSetDevice - aclrtCreateContext - aclrtCreateStream - aclmdlLoadFromFile - aclmdlExecute - aclmdlUnload - aclrtResetDevice - aclFinalize这段调用顺序我建议直接背下来因为所有基于 AscendCL 的推理程序都是这个骨架。4.2 最小可运行的推理代码框架下面我给出一段核心的 C 代码骨架省略了错误检查和后处理细节重点是展示 API 调用流程#include acl/acl.h #include cstdio int main() { // 1. 初始化 aclInit(nullptr); // 2. 设置设备设备编号从0开始 int32_t deviceId 0; aclrtSetDevice(deviceId); // 3. 创建上下文和流 aclrtContext context; aclrtCreateContext(context, deviceId); aclrtStream stream; aclrtCreateStream(stream); // 4. 加载OM模型 uint32_t modelId; aclmdlLoadFromFile(yolov5s_bs1.om, modelId); // 5. 获取模型描述输入输出维度等信息 aclmdlDesc *modelDesc aclmdlCreateDesc(); aclmdlGetDesc(modelDesc, modelId); // 6. 准备输入输出Dataset aclmdlDataset *inputDataset aclmdlCreateDataset(); aclmdlDataset *outputDataset aclmdlCreateDataset(); // 假设输入是 1*3*640*640 的 float 数据需要先将其拷贝到Device侧 // inputHostPtr 是你在Host侧准备好的输入数据 size_t inputSize 1 * 3 * 640 * 640 * sizeof(float); void *inputDevicePtr nullptr; aclrtMalloc(inputDevicePtr, inputSize, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMemcpy(inputDevicePtr, inputSize, inputHostPtr, inputSize, ACL_MEMCPY_HOST_TO_DEVICE); aclDataBuffer *inputBuffer aclCreateDataBuffer(inputDevicePtr, inputSize); aclmdlAddDatasetBuffer(inputDataset, inputBuffer); // 获取模型输出维度分配输出空间并加入Dataset for (size_t i 0; i aclmdlGetNumOutputs(modelDesc); i) { size_t outputSize aclmdlGetOutputSizeByIndex(modelDesc, i); void *outputDevicePtr nullptr; aclrtMalloc(outputDevicePtr, outputSize, ACL_MEM_MALLOC_HUGE_FIRST); aclDataBuffer *outputBuffer aclCreateDataBuffer(outputDevicePtr, outputSize); aclmdlAddDatasetBuffer(outputDataset, outputBuffer); } // 7. 同步执行推理 aclmdlExecute(modelId, inputDataset, outputDataset); // 8. 从输出Dataset中取出Device侧数据并拷贝回Host aclrtMemcpy(outputHostPtr, outputSize, outputDevicePtr, outputSize, ACL_MEMCPY_DEVICE_TO_HOST); // 9. 释放资源 aclmdlUnload(modelId); aclmdlDestroyDesc(modelDesc); aclDestroyDataBuffer(inputBuffer); aclrtFree(inputDevicePtr); aclrtDestroyStream(stream); aclrtDestroyContext(context); aclrtResetDevice(deviceId); aclFinalize(); return 0; }代码里我刻意省略了错误判断实际工程中每一步返回值是ACL_SUCCESS0时才算成功建议封装一个CHECK_ACL宏来统一断言。4.3 输入数据准备BGR、Normalize、HWC 转 CHWYOLOv5 的输入要求是 RGB 顺序、归一化到 0~1、NCHW 布局。而 OpenCV 读进来的是 BGR、0~255、HWC 布局。所以推理前必须做三步转换// 以OpenCV读图为例 cv::Mat img cv::imread(test.jpg); // HWC, BGR, 0-255 cv::Mat rgb_img; cv::cvtColor(img, rgb_img, cv::COLOR_BGR2RGB); // HWC, RGB cv::Mat resized; cv::resize(rgb_img, resized, cv::Size(640, 640)); // 转换到CHW并归一化 std::vectorfloat chw_data(3 * 640 * 640); for (int c 0; c 3; c) { for (int h 0; h 640; h) { for (int w 0; w 640; w) { chw_data[c * 640 * 640 h * 640 w] resized.atcv::Vec3b(h, w)[c] / 255.0f; } } } // 把chw_data拷贝到Device侧即可如果直接把这个循环写进生产代码CPU 一定会被拖累。后面第五章我会讲怎么用 DVPP 和 AIPP 把这部分搬到硬件上。4.4 后处理YOLOv5 的三个头输出解码YOLOv5 的输出是三组张量shape 分别是[1, 255, 80, 80]、[1, 255, 40, 40]、[1, 255, 20, 20]。255 的来源是3 * (5 80)其中 3 是 anchor 数量5 是x, y, w, h, confidence80 是 COCO 类别数。解码逻辑大致是把输出从 CHW 转为 HWC方便按每个网格位置处理。计算 anchor 对应的中心坐标和宽高。用 sigmoid 激活处理 center_x、center_y、confidence 和 class_probs。把 xywh 坐标从网格尺度映射回原图尺度乘上 stridestride 分别是 8、16、32。拼接三个尺度的检测结果做 NMS 过滤重叠框。后处理在 CPU 上做对 640 输入来说单帧耗时几毫秒到十几毫秒取决于目标数量和 NMS 实现质量。如果你要追求极致性能可以把 NMS 用多线程优化或者直接用昇腾社区提供的后处理算子但工程复杂度会上升一般场景不必要。4.5 不想写 C 的话还有三条捷径如果你只是想验证 OM 模型能不能跑通或者不想一上来就写这么底层的东西有替代路径Python AscendCL 接口CANN 提供 Python 版的aclruntime接口调用方式和 C 几乎一一对应调试效率高很多。MindX SDK昇腾的推理服务化中间件把图片解码、推理、后处理这些常用流程封装成了插件。通过配置 pipeline 文件就能搭一个检测服务但不适合做太个性化的后处理。官方 samples 样例昇腾社区带 YOLOv5 的推理样例克隆下来改一改模型路径和输入图片路径就能跑通适合作为第一个上手的工程。我的建议是先跑通官方样例再用 Python 接口做单张图验证最后才用 C 接口做性能优化。一步到位往往会被底层细节淹死。5. 部署到真机后的性能实测与调优方向5.1 基线性能数据怎么看跑通推理后第一件事就是看性能。拿 YOLOv5s 640×640 FP16 模型在 Atlas 300V Pro 24G 上做单路 batch1 推理我先做了一组基线测试不做任何优化纯 AscendCL 同步推理再加上 CPU 端的图像预处理整体端到端延迟大约在 8~12ms折合每秒 80~120 帧。如果只看 NPU 上的纯推理时间会更快一些但端到端的瓶颈往往在预处理。这里有个容易被忽视的事实很多人测出来性能很差问题不在 NPU而在 CPU 预处理。OpenCV 的resize和cvtColor在大分辨率输入下非常耗时尤其 1080P 以上的输入图片CPU 预处理单帧可能就要 5ms 以上。所以优化第一刀就应该砍向预处理。5.2 用 DVPP 把图像处理搬到硬件上Atlas 300V 最大的特点就是 DVPP 硬件加速模块。它包含 VPC视觉预处理可以缩放、抠图、颜色转换和 JPEGD/VDECJPEG 解码和视频流解码等单元。把图像缩放和格式转换交给 DVPP 之后CPU 几乎被释放出来端到端延迟能显著下降。DVPP 的调用逻辑和 AscendCL 类似需要注意两点输入输出的内存对齐要求DVPP 对内存有自己的对齐约束通常宽度需要对齐到 16 或 32高对齐到 2。直接传一个任意 size 的 buffer 会报错。实际开发中建议先用acldvppMalloc分配 DVPP 专用的内存再走acldvppVpcResize等接口。图片格式DVPP 原生支持 YUV420SPNV12格式效率最高。JPEG 解码出来直接就是 YUV因此从 JPEG 解码到缩放、再到推理全程可以在硬件上完成中间不需要回到 RGB。但如果你的模型要求 RGB 输入还是要把 NV12 转换回 RGB这一步也可以由 VPC 的格式转换能力完成。我第一次把 DVPP 接入后预处理从原来 OpenCV 的 5~6ms 降到了 1ms 以内整个端到端延迟直接砍掉一半。这一项优化是 Atlas 300V 部署 YOLO 性价比最高的调优点。5.3 AOE 自动调优CANN 自带一个叫 AOEAscend Optimized Engine的调优工具可以针对目标模型和芯片做算子的自动调优。在我的工程里跑完 AOE 之后模型推理延迟又下降了大约 10%~15%。使用方式简单粗暴aoe --framework5 --modelyolov5s.onnx --outputyolov5s_aoe --soc_versionAscend310P3AOE 调优的过程会跑大量的算子选择实验耗时从几分钟到半小时不等。跑完之后输出的 OM 模型就是调优后的版本。我建议在项目进入性能压测阶段前跑一次 AOE基本是零成本的提升。5.4 多路并发的工程化思路Atlas 300V 24G 大显存的优势在多路场景下才真正体现出来。做多路视频流检测时有两种并发设计思路第一种是多 stream 并行。创建多个 stream每个 stream 负责一路视频流的推理stream 之间天然并行。实际测试中我一个进程挂了 4 个 stream 跑 4 路 1080P 视频整体吞吐几乎线性增长而 24G 显存使用率才六成左右。这里是显存大带来的直接好处——不需要担心多路并发把显存撑爆。第二种是 batch 合并。把多帧图片拼成一个 batch 喂给模型一个 batch4 的推理耗时往往比 4 次 batch1 快不少。但 YOLOv5 导出 ONNX 时如果是固定 batch就需要导出时设置正确的 batch 大小。如果导出时用了动态 batchATC 转换时也可以配置成动态但调用复杂度会上升。我的实际经验是如果是实时性要求高的场景用多 stream 并发如果是吞吐优先、实时性要求不高的批量检测场景用 batch 合并。多数视频结构化项目多 stream 并发更合适。5.5 用 msprof 定位性能瓶颈如果调优完还是达不到目标帧率别瞎猜用 msprof 工具做性能分析msprof --application./yolov5_demo --outputprofiling_dir它会生成设备侧和主机侧的时间线数据能看到每个算子的耗时、NPU 利用率、内存拷贝时间。很多卡顿问题一查才发现瓶颈根本不在 NPU而在 Host 和 Device 之间的aclrtMemcpy碰上了超大张量或者 CPU 后处理线程锁竞争。拿到数据再动手优化会更精准。6. 我在部署路上踩过的坑和对应解法6.1 卡能被系统识别但 npu-smi 看不到有一次装完驱动lspci能看到昇腾设备但npu-smi info就是报 No device 或者只显示半张卡。排查了半小时最后发现是固件没刷。注意驱动driver和固件firmware是分开的两个组件只装驱动不刷固件NPU 芯片基本是个半醒状态。用 HDK 安装包安装时确保驱动和固件都走到install success之后重启一次机器再运行npu-smi info。6.2 ATC 转换成功但推理结果全是 0这种问题通常出现在你用了动态输入或者误开了 AIPP。我自己曾经在 ATC 命令里加了 AIPP 配置把归一化写进了模型但代码里又做了一次归一化结果数值全乱套。后来干脆把 AIPP 去掉归一化全部放在 Host 端代码里做模型行为就可预测了。如果你不是特别清楚 AIPP 的配置机制建议第一版不要开 AIPP。6.3 torch_npu 跑 PyTorch 时 OOM但显存明明够用如果你用 torch_npu 直接在 NPU 上跑.pt模型有时会看到out of memory你会觉得奇怪24G 显存怎么可能不够一个 YOLOv5s 用。原因往往是 PyTorch 的动态图模式下显存碎片化严重并且每个算子都可能申请额外的 workspace 显存。解决办法很直接换 OM 推理或者减小 batch再不然用torch_npu.npu.set_allocator_settings里的环境变量微调缓存策略。这也是我坚持推荐 OM 路线的原因之一显存占用更可控。6.4 服务器断电重启后设备节点丢失有一次机房断电重启后/dev/davinci0设备节点找不到了npu-smi直接报错。这个问题的本质是设备节点由驱动在启动时创建异常断电可能导致服务状态异常。解决办法是重新加载驱动服务npu-smi stop npu-smi start如果还不行就重启机器。建议所有部署了 Atlas 卡的生产服务器都做一次开机自启动和异常断电后的验证脚本检查不然现场出问题你不在机器旁边只能干着急。6.5 多进程同时访问一张卡导致互相干扰当我把两个推理进程同时指向 device 0 时发现第二个进程推理延迟明显不稳定。原因是一个进程占用的显存没有被释放干净或者两个进程在抢占同一个算力资源。方案有两个第一改成单进程多 stream这是最优解第二如果业务上必须多进程用aclrtSetDevice分配到不同的设备号或者用显存隔离机制限制每个进程的显存上限。我的经验是能单进程多 stream 就不要多进程省心得多。6.6 关于能不能把它当运算加速卡用的最终建议回到文章开头那个问题。如果你需要一张卡来跑 YOLO 推理、做视频结构化的规模化落地Atlas 300V 24G 是完全值得投入的选项24GB 显存和 DVPP 硬件加速是它的核心优势。但如果你期待它像 NVIDIA 计算卡那样跑任意并行计算即便装好了 CANN你也会撞上生态边界。选卡之前先想清楚你的需求是训练、通用计算还是 AI 推理落地。只有推理落地至少对我来说Atlas 300V Pro 24G 的表现是超出预期的。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

VSCode 查看 Git 提交历史与逐行记录:TaoToken 统一 Key 配置与验证 2026/9/26 9:24:46

VSCode 查看 Git 提交历史与逐行记录:TaoToken 统一 Key 配置与验证

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

阅读更多 →
华为USG防火墙双向NAT配置:地址重叠与NAT回流实战 2026/9/26 9:24:45

华为USG防火墙双向NAT配置:地址重叠与NAT回流实战

前阵子有个朋友在群里发来一张截图,说他们分公司和总部的网段都是192.168.1.0/24,两边用加密隧道把内网连起来之后,两边的主机互相ping不通,总部访问分公司的一台服务器始终没反应。我一看配置就明白了——这是个非常典型的“地址…

阅读更多 →
TG个人发卡机器人实战:二开自动发货与双语言支持 2026/9/26 9:24:45

TG个人发卡机器人实战:二开自动发货与双语言支持

简介:一套基于某发卡系统二次开发的Telegram个人发卡机器人源码,支持中英双语,面向需对接Telegram机器人自动发卡的个人开发者或中小团队,适用于电商、游戏等虚拟卡管理与交易处理场景。运行要求Linux或Windows服务器,…

阅读更多 →
AI Agent指令分层工程:System Prompt、总地图与条件加载 2026/9/26 9:24:38

AI Agent指令分层工程:System Prompt、总地图与条件加载

AI Agent 指令分层工程:System Prompt、总地图与条件加载做AI Agent开发的人,十有八九都经历过这个阶段:System Prompt越写越长,功能越加越多,最后Agent的表现反而越来越差。指令多了互相打架,上下文被无关…

阅读更多 →
勒索病毒应急处置全流程:从断网隔离到数据恢复的标准化操作指南 2026/9/26 9:24:37

勒索病毒应急处置全流程:从断网隔离到数据恢复的标准化操作指南

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

阅读更多 →
DBeaver实战指南:后端开发者高效连接与管理MySQL 2026/9/26 9:24:37

DBeaver实战指南:后端开发者高效连接与管理MySQL

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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