尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

昇腾Atlas 300V 24G加速卡部署YOLO全流程实战

发布时间:2026/9/25 7:53:28

资讯中心
01
ARTICLE

昇腾Atlas 300V 24G加速卡部署YOLO全流程实战

昇腾Atlas 300V 24G加速卡部署YOLO全流程实战
1. 先搞清楚Atlas 300V 24G的定位是加速卡但不是你以为的那种加速卡1.1 一张卡解决什么问题看到热搜里连续出现“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”这两条我就知道又有一批做边缘AI或服务器推理的同学被这张卡吸引过来了。先说结论Atlas 300V 24G是一张标准的AI推理加速卡定位非常明确专门用来跑神经网络前向推理。它属于昇腾系列推理卡核心是昇腾310P系列NPU和常见的GPU推理卡不是一个物种。我去年第一次拿到这张卡时也有同样的疑问直到把它装进服务器、跑通YOLOv8之后才算真正理解这张卡该放在什么位置。它最常见的落地场景是智慧园区、安防监控、工业质检、交通抓拍这类需要7乘24小时跑检测模型的地方。一张卡同时驻留多个模型或者跑一路高分辨率视频流做实时检测主板供电就够用不用外接辅助电源整卡满载功耗在几十瓦这个量级。相比之下同样能跑YOLO的GPU一般功耗要高出好几倍。24GB板载内存对这个使用场景来说非常宽裕一个YOLOv8s模型转成OM格式后通常只占几百MB剩下的内存可以再塞下其他小模型或者跑多batch完全不需要考虑内存不够的问题。1.2 与GPU加速卡的本质区别要理解这张卡的工作方式得先区分三个层面。GPU加速卡面对的是通用并行计算理论上你可以写任意算子CUDA编程模型把线程组、共享内存这些底层能力全部开放给你。Atlas 300V 24G则完全不是这个逻辑昇腾NPU的加速核心是已经固化好的矩阵乘加阵列它对卷积、全连接、归一化这类神经网络算子做了深度优化但普通开发者没法像写CUDA一样去写一个完全自定义的算子在NPU上运行。这意味着它只适合“已经训练好、结构相对固定的模型推理”而不是“什么计算都往上扔”。所以当有人问“它是不是运算加速卡”时我的回答是它是AI推理加速卡是专为神经网络前向计算设计的运算卡不是通用GPGPU。你要拿它去跑分子动力学模拟、跑通用科学计算那基本不可能。但你如果在做YOLO系列模型的线上部署这张卡反而是同价位段里功耗和吞吐量平衡得相当好的选择。另一个关键点是它不依赖x86 CPU里的CUDA驱动走的是昇腾自己的CANN工具链整个部署路线和GPU体系完全不同接下来这部分的坑才是真正值得细说的。2. 部署YOLO前先对齐环境和版本这步能省掉后面一半的坑2.1 驱动、固件与CANN工具链的版本匹配我在昇腾卡上踩过的第一个坑也是最多人问我“为什么跑不起来”的坑就是版本匹配问题。Atlas 300V 24G的软件栈最少包含三层NPU固件与驱动Firmware和Driver、CANN工具包Ascend Toolkit或NNRT、以及你实际使用的推理接口层pyACL或者MindIE。这三者之间是有严格的版本配套关系的不是一个一个单独升级都升到最新就完事。驱动版本太新、固件太旧设备节点能起来但加载模型时直接报错驱动和CANN工具包版本差太多最典型的症状是调用acl.init时返回错误码或者加载OM模型时提示版本不兼容。官方给出的标准做法是在安装文档里查一个叫“版本配套表”的矩阵。我个人的建议是不要追求所有组件都最新选一个已经稳定发布半年以上的组合比如CANN 7.0或8.0系列的某个小版本配套相同的固件驱动版本一口气装完。安装顺序是先装固件和驱动重启机器确认npu-smi info能看到0号设备再装CANN Toolkit最后装Python侧的ACL库。顺序反了虽然不一定出问题但一旦出问题排查起来非常痛苦因为报错信息可能出现在完全无关的位置比如算子编译失败或者内存申请失败。表格里是我整理的一个最小可用版本组合参考具体以你拿到的实际软件包为准组件建议版本系列说明固件与驱动与CANN配套的合入版本查看npu-smi info固件版本号CANN Toolkit7.0.x或8.0.x稳定版包含ATC模型转换工具pyACL随CANN附带的Python库安装路径通常在/usr/local/Ascend/ascend-toolkit/latestPython3.7到3.11之间过高或过低都可能缺预编译包2.2 确认算力版本与推理形态装好之后第一件事不是急着转模型而是确认你的卡具体是哪个算力形态。Atlas 300V 24G和Atlas 300V其他型号之间处理器都是昇腾310P系列但实际在ATC转换时填写的soc_version可能不一样常见的可能是Ascend310P3或者其他子版本号。这个参数填错模型转换可能成功但在设备上加载时会报“模型与设备不匹配”。查看方法很简单跑一下npu-smi info看芯片型号字段然后在ATC命令里对应填上。还有一点是关于推理形态的选择。当前昇腾推理侧已经推出了新版推理引擎MindIE可以直接加载ONNX模型省掉传统ATC转OM的环节。但我个人在YOLO这类模型上仍然更推荐传统路线先转OM再用pyACL写推理。原因有两个一是OM模型的部署资料成熟网上能查到的避坑经验最多二是通过ATC转换后的模型能看到每个算子的落盘信息和输入输出shape对排查预处理、后处理的维度问题帮助非常直接。MindIE适合生产环境已经完全稳定、需要长期维护的场景而如果你想搞懂这张卡在做什么老老实实走一遍OM链路收获更大。2.3 Python侧pyACL环境检查所有底层环境都装好后我们用一段最简单的代码验证pyACL能否正常初始化。这一步很多人会跳过直接去转模型跑推理结果出问题时不知道是环境问题还是代码问题。先花两分钟把地基打牢后面排错会轻松很多。import acl # 初始化ACL运行环境第一个参数是配置文件路径传空表示使用默认配置 ret acl.init() print(acl.init ret:, ret) # 选择0号设备这里设备编号需要与npu-smi info里看到的编号一致 ret acl.rt.set_device(0) print(acl.rt.set_device ret:, ret) # 查询当前设备信息确认驱动层已经正常响应 device_info acl.rt.get_device_info(0) print(device info:, device_info)如果你看到两个ret都是0并能在设备信息里读到内存信息说明驱动、固件和pyACL这一整条链路已经打通。如果初始化失败优先检查环境变量有没有导入CANN的库路径。通常在运行前需要先执行source /usr/local/Ascend/ascend-toolkit/set_env.sh或者把该文件里的路径手动加到LD_LIBRARY_PATH和PYTHONPATH中。这一步虽然基础但在SSH会话、systemd服务或者Docker容器里很容易被漏掉我会在后面的踩坑章节专门讲容器场景。3. YOLO部署主链路PyTorch权重到OM模型3.1 导出ONNX时的几个关键设置从PyTorch权重到OM模型中间必须经过ONNX。这个导出步骤看起来简单实际却决定了整个部署链路能否走通。YOLOv5、YOLOv8以及YOLOv11这几种常见版本在导出ONNX时有一些共性设置输入尺寸固定为640x640batch维度先用动态或固定都可以但强烈建议导出时把batch固定为1先在单batch下调通再去优化多batch性能。YOLOv8系列的导出通常这样做import torch from ultralytics import YOLO model YOLO(yolov8s.pt) model.model.eval() dummy_input torch.randn(1, 3, 640, 640) torch.onnx.export( model.model, dummy_input, yolov8s.onnx, opset_version11, input_names[images], output_names[output0], dynamic_axesNone, )注意这里把opset_version设置成11而不是默认更高的值是为了减少导出到昇腾侧后转OM时可能遇到的算子兼容性问题。当然新版CANN对高版本ONNX支持已经好了很多如果你手里的CANN版本足够新opset 17也没问题。我的习惯是先用低版本opset试一遍如果ATC转模型时报不支持的算子再考虑升opset版本或者改导出方式而不是一开始就用高版本给自己增加排查难度。还有一个经常被忽略的点导出ONNX后先用onnxruntime在CPU上跑一遍同一张图确认输出数值正常。这会花你五分钟但能帮你把“模型导出问题”和“昇腾部署问题”彻底隔离。很多人在NPU上报出乱七八糟的错误最后排查半天发现原始ONNX的输出根本就不对。3.2 ATC模型转换参数逐项说明拿到干净的ONNX文件后进入核心环节用ATC工具把它转换成OM模型。ATC是CANN自带的离线模型转换工具它的作用是把ONNX这样的开放模型格式转换成昇腾NPU能直接加载执行的OM格式过程中还会做算子调度、内存规划和融合优化。这一步是做昇腾部署最核心的步骤参数没写对后面推理代码写再好都没用。一个最常用的转换命令如下atc --modelyolov8s.onnx \ --framework5 \ --outputyolov8s_bs1 \ --input_shapeimages:1,3,640,640 \ --input_formatNCHW \ --soc_versionAscend310P3 \ --loginfo每个参数都值得说清楚。--framework5表示输入是ONNX格式这是ATC里约定好的固定编号必须写5。--output是输出OM文件的前缀转换完成后会生成yolov8s_bs1.om。--input_shape必须和导出ONNX时的输入名、维度完全一致名字是images就填images不能乱改。--soc_version就是前面强调的算力版本务必通过npu-smi info确认为你当前卡对应的版本。有些教程会让你加--insert_op_confaipp.cfg也就是把预处理图像缩放、减均值、通道变换全部嵌到模型里。这个后面我会讲它和推理代码的配合方式初学时先不要加让预处理留在代码里可控可调。先用最原始的模型转一遍推理逻辑跑通了再考虑用AIPP做硬件预处理优化。3.3 验证OM文件与设备识别转换完成后不要急着写推理代码先用CANN自带的工具验证一下OM文件。最简单的方式是使用omg附带的相关检测工具但在多数CANN版本里可以直接通过后续的推理代码加载来判断。如果转换成功但OM文件损坏加载时会提示文件格式错误如果转换时填了错误的--soc_version加载时则会报模型与设备不匹配。更稳妥的做法是在推理代码里打印模型的输入输出维度。OM模型里保存着每个输入、输出的张量信息我们可以在加载后用ACL接口查询出来和原始模型的预期输出做对比。以YOLOv8s在640x640输入为例通常输出维度是(1, 84, 8400)含义是batch为1每个目标框有84个属性4个坐标加上COCO 80类别的置信度总共8400个候选位置。如果查到的输出维度和这个对不上首先要怀疑的是导出ONNX时的dynamic_axes设置而不是ATC参数这两个环节非常容易混淆。4. 推理代码怎么写pyACL调用om模型的完整套路4.1 初始化与模型加载当OM模型已经准备好剩下的就是用pyACL接口去加载和执行推理。整个流程和CUDA推理很像但接口名字完全不同初始化ACL、设置设备、加载模型、创建输入输出数据集、执行推理、拿到输出、释放资源。如果你之前写过CUDA或者TensorRT的代码适应这套接口非常快。模型加载和执行的骨架如下import acl import numpy as np # 前面已验证过环境这里直接从加载模型开始 model_id 0 acl.mdl.load_from_file(model_id, yolov8s_bs1.om) # 获取模型描述信息 model_desc acl.mdl.create_model_desc() acl.mdl.get_model_desc(model_desc, model_id) input_size acl.mdl.get_num_inputs(model_desc) output_size acl.mdl.get_num_outputs(model_desc) print(input count:, input_size, output count:, output_size) # 为输入输出分配内存 input_data np.zeros((1, 3, 640, 640), dtypenp.float32) input_ptr, input_acl acl.util.np_to_ptr(input_data) output_ptr, output_acl acl.util.np_to_ptr(np.zeros((1, 84, 8400), dtypenp.float32)) # 创建数据集并绑定数据指针 dataset_input acl.mdl.create_dataset() dataset_output acl.mdl.create_dataset() acl.mdl.add_dataset_buffer(dataset_input, input_acl) acl.mdl.add_dataset_buffer(dataset_output, output_acl)这里有个很多人第一次写时会忽略的问题np_to_ptr拿到的指针底层内存其实是Python对象引用的确保在执行推理之前这个numpy数组不能被垃圾回收。有些人的代码里数组定义在一个函数内部推理逻辑写在另一个函数里结果数组被回收了ACL去读内存时直接报错segment fault。解决办法很简单把数组和指针绑定在同一个类或闭包里保证生命周期延续到推理完成。4.2 预处理与AIPP插桩预处理是目标检测部署中最容易出错的地方。在GPU上跑ONNX或TensorRT模型时大多数情况下托管推理框架已经把resize和归一化处理好了但在昇腾这条链路上预处理完全由你自己控制。YOLO系列对输入有一个约定图像先做letterbox保持宽高比缩放到640x640多余部分用灰色填充。这个流程如果直接写在Python里占用的CPU时间可能比NPU推理还要高多路视频流下会成为瓶颈。letterbox的关键代码如下这部分建议单独封装成函数方便后续优化def letterbox(img, new_shape(640, 640), color(114, 114, 114)): shape img.shape[:2] ratio min(new_shape[0] / shape[0], new_shape[1] / shape[1]) new_unpad (int(round(shape[1] * ratio)), int(round(shape[0] * ratio))) img_resized cv2.resize(img, new_unpad, interpolationcv2.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_padded cv2.copyMakeBorder(img_resized, top, bottom, left, right, cv2.BORDER_CONSTANT, valuecolor) return img_padded, ratio, (left, top)在notebook或离线脚本里这段代码跑起来一点问题都没有。但线上环境追求低延迟时建议使用ATC的--insert_op_conf参数把缩放和归一化全部下沉到NPU硬件上也就是AIPPAI Preprocessing功能。AIPP配置的意思是在模型转换时额外添加一个预处理算子的描述文件aipp.cfg包含输入图像尺寸、缩放方式、减均值、归一化因子等参数。推理时host侧只做图片加载、格式转换和内存拷贝NPU直接拿到经过letterbox处理的图像数据能省下不少CPU开销。4.3 输出解析与NMS后处理执行完推理OM模型输出的是一个原始预测张量YOLOv8s在640x640输入下输出维度是(1, 84, 8400)。你需要把这个张量重新整理成人们理解的检测框列表这个过程包括转置维度、做sigmoid或值域修正、按置信度阈值过滤、执行非极大值抑制。NMS这一步在NPU上跑不了只能在CPU上计算所以它的写法直接决定了你的实时帧率。先说输出解析。原始输出形状是(84, 8400)其中84是4个坐标加上80个类别分数8400是三个尺度特征图所有候选框的拼接结果。思路是把坐标部分和目标类别分数分开对每个候选框取类别分数的最大值作为它的置信度再结合坐标信息按置信度从高到低排序最后执行NMS。def postprocess(pred, conf_thres0.25, iou_thres0.45): # pred shape: (8400, 84) xc pred[:, 4:].max(axis1) mask xc conf_thres pred pred[mask] if len(pred) 0: return [] boxes xywh2xyxy(pred[:, :4]) cls_conf pred[:, 4:] * xc[mask][:, None] cls_id cls_conf.argmax(axis1) conf cls_conf.max(axis1) keep nms(boxes, conf, iou_thres) return boxes[keep], cls_id[keep], conf[keep]这里的xywh2xyxy和nms可以借助OpenCV或者一些轻量工具库实现。注意NMS实现有几个层级纯Python写好懂但慢NumPy向量化更快C扩展最快。当整个推理链路跑通以后这一步往往是第一个值得优化的点。4.4 完整推理流程骨架把前面的模块串起来一个完整推理循环大概是这样的读图、BGR转RGB、letterbox、把HWC格式转成NCHW、数组转成float32、赋值给输入内存、调用acl.mdl.execute、等待执行完成、取输出、后处理。以下是核心执行部分的示例def infer_one_image(model_id, dataset_input, dataset_output, image_bytes, acl_context): # 1. 解码得到BGR图像 img cv2.imdecode(np.frombuffer(image_bytes, dtypenp.uint8), cv2.IMREAD_COLOR) # 2. 预处理 img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_padded, ratio, (left, top) letterbox(img_rgb) blob img_padded.transpose(2, 0, 1)[None, ...].astype(np.float32) / 255.0 # 3. 拷贝数据到输入内存 np.copyto(input_np, blob.reshape(1, 3, 640, 640)) acl.util.np_to_ptr(input_np) # 确保内存指针有效 # 4. 执行推理 ret acl.mdl.execute(model_id, dataset_input, dataset_output) if ret ! 0: return [] # 5. 取输出并后处理 output_np np.reshape(acl.util.ptr_to_np(output_ptr, (1, 84, 8400), np.float32), (8400, 84)) return postprocess(output_np)当你能稳定跑通这一段说明整张卡的部署已经过了最重要的一关。之后要做的不是继续加功能而是观察耗时、提升吞吐、丰富错误处理。5. 实测下来的几个关键参数与调优方向5.1 batch设置与真实吞吐量第一版跑通时我们通常是一次推理处理一张图。这种方式简单但对Atlas 300V 24G来说并没有吃满算力。NPU的特性和GPU相似单张图的小batch推理存在显著的启动和调度开销。把4张或8张图拼成一个batch推理时间往往不是线性增长的比如单张图耗时5毫秒4张图一批可能只要9毫秒摊到每张图反而更便宜。优化时建议分三步走。第一步在ATC转换时就把input_shape中的batch固定成目标值比如images:4,3,640,640转换出专门的bs4模型。第二步在Python侧维护一个固定长度为4的输入队列把实时到达的图片帧先攒成4张再一起送进模型。第三步用acl.mdl.execute_async做异步执行让CPU在NPU计算的同时继续做图像预处理和后处理。这三步做完同样的卡把吞吐量往上翻几倍是很常见的事。这里有个容易踩的细节按照batch补零padding时一定要在代码里记录每一批次实际的有效图片数后处理时只取前K张的结果。如果你直接把空帧也送去参与NMS可能会得到一批完全没有意义的检测框浪费算力不说还可能污染数据统计。5.2 把预处理交给DVPP的收益CPU上的letterbox和resize在1080P视频流场景下会吃满一两个核心一旦同时跑8路视频CPU就成了瓶颈NPU反而在空转。昇腾的工具链里提供了DVPPDigital Vision Pre-Processing这套硬件加速模块专门负责图像解码、缩放、格式转换这些预处理任务而且不消耗NPU的核心算力。使用DVPP的正确姿势是先调用ACL里的VPC接口创建图像处理通道传入输入图像的内存地址、宽高、格式链路上把它缩放成640x640的输出图像再把输出内存直接作为模型输入。整个过程在硬件里完成CPU只负责拷贝内存和调度。很多测试数据里同样是跑YOLOv8sDVPP接管预处理后整条链路的端到端延迟能减少30%到50%这个优化几乎是最划算的。当然用DVPP也有成本接口比纯Python的OpenCV写法复杂涉及到内存申请、通道创建、同步等待错误处理也要多写好几层。我的建议是先把Python版本调通确保功能正确再隔离出来做DVPP改造。不要在第一步就把两件事混在一起否则排查问题时“到底哪部分出了错”会非常头痛。5.3 用profiler定位真正的瓶颈昇腾CANN自带一个叫msprof的性能采集工具类似GPU侧的Nsight Systems可以采集端到端每个环节的耗时分布。我第一次用的时候只关注了NPU推理时间发现单帧不到3毫秒心想这卡性能真强。结果把整个链路的时间加起来一看从图像读入到拿到检测框平均要25毫秒。多出来的20毫秒全在CPU预处理和后处理上。msprof会生成一份JSON或CSV格式的耗时明细你可以看到NPU侧每个算子的执行时间、NPU利用率、内存拷贝时长。如果发现NPU利用率长期偏低说明瓶颈在host侧的预处理或数据加载如果NPU利用率已经跑到90%以上再优化Python端的意义就不大了。这个工具建议在调优阶段尽早用起来比凭感觉改代码高效得多。需要说明的是数据集较小、测试不充分时profiler数据可能受CPU频率波动影响最好多跑几步取平均不要拿单帧数据下结论。6. 踩坑记录这些问题我花了最多时间6.1 设备节点与Docker映射大多数线上部署都会把推理服务容器化Docker跑起来以后第一件容易出错的事就是设备节点没有映射进容器。在宿主机上跑npu-smi info一切正常但容器里执行同样的命令却看不到任何NPU。这通常是因为设备节点需要额外挂载光用--device /dev/davinci0还不够。完整的做法是把整个/dev/davinci0、/dev/davinci_manager、/dev/hisi_hdc以及/usr/local/Ascend驱动库目录都挂载进容器容器内还要把系统环境变量LD_LIBRARY_PATH指到正确的位置。如果用的是Docker Compose我会把所有相关设备的devices配置和volumes配置在一开始就写好避免后面反复改。还有如果容器是以非root用户启动的可能会遇到设备节点权限不足表现为acl.rt.set_device时报权限错误这时需要把用户加入HwHiAiUser用户组而不是简单粗暴地chmod 777。另一个常见的误操作是同时使用多个CANN版本。某些同学的服务器上装了Anaconda里面又有一个Python版本的pyACL系统路径里还有一个CANN安装版本结果程序加载的libascendcl.so和工具链版本对不上报错信息却指向算子编译失败绕了一大圈才查到是库冲突。建议用conda create -n ascend python3.8建一个独立环境只在这个环境里安装和导入pyACL。6.2 输入输出维度判断错误模型转换成功、代码能跑通但后处理结果完全不对——这我至少遇到过三次。印象最深的是一次YOLOv8s的输出维度问题我原本预期输出是(1, 84, 8400)但在onnx里实际导出为(1, 84, 8400)代码把输出reshape成(1, 8400, 84)后去做NMS所有检测框位置错乱。排查半天才发现问题出在导出ONNX时把dynamic_axes设置成了batch维度动态ATC转换时又固定了batch1结果输出第一维变成动态的None需要重新从模型里查询实际shape。解决这类问题有个标准动作加载OM模型后用ACL接口打印每个输入输出的dtype和shape不要凭记忆写死。确认输出的实际shape后再写后处理逻辑。例如用acl.mdl.get_output_desc_by_index查询输出描述再把输出指针按照这个shape去解析数据。这能避免90%的维度错误。6.3 后处理耗时反超模型推理这个坑特别典型尤其当你用YOLOv8s这类anchor-free模型时。模型在NPU上可能只花3毫秒但后面用纯Python写的NMS却要跑20毫秒整体性能反而被拖垮。主要原因有两个一是候选框数量太多8400个框逐个做类别得分比较本身就不便宜二是NMS实现用了List加循环没有向量化。我的优化顺序是先用NumPy重写NMS把坐标、置信度、类别编号做成矩阵运算这通常能压到几毫秒还不够的话把NMS下沉到Cython或C扩展再不行就引入一个小型且成熟的c编译库在host侧以二进制扩展方式调用。另外一个很实用的技巧是降低候选数量在模型输出的8400个框中先用conf 0.1做一个粗筛大部分框会被直接干掉再对剩余框执行完整NMS。这个阈值可以比最终显示阈值低一些既保证了召回又大幅减少了后处理量。除了后处理预处理阶段的letterbox也是容易被忽略的耗时点。如果用Python的copyMakeBorder去补边每一帧都要做一次内存分配和填充开销不小。可以先一次性预分配好640x640的内存每次只把缩放后的图像复制进去把不变的缓冲区复用起来CPU耗时会明显下降。6.4 显式释放资源的必要性最后提一个涉及稳定性的细节适合在多路视频长时间运行的场景里注意。pyACL在每一次创建输入输出数据集、申请临时内存时都会消耗资源如果不显式释放运行几天后就会出现内存慢慢涨、最终模型加载失败的情况。很多开发者在脚本里跑几十帧没问题一上生产就每两三天崩一次大概率就是资源泄漏。建议在整个推理循环外面只创建一次数据集循环内只做数据拷贝和execute循环结束或退出时统一用acl.mdl.unload和acl.finalize释放。这一点和Python的GC机制不太一样ACL里的资源管理器不会自动回收代码里务必养成成对申请、成对释放的习惯。我自己在实际使用的体会是昇腾这条链路的难点并不在某个单点技术它没有GPU生态里那么多现成的第三方工具很多细节必须先理解硬件的工作原理才能下手。但正因为这样一旦你完整跑通了一版后续换模型、加卡位、支持更多路数都有非常清晰的路径。最后再分享一个小技巧拿到一张新的昇腾推理卡不要一上来就追求跑满性能先按文中这套流程单卡单模型跑通端到端把环境、转换、推理、后处理每一步的日志和耗时都记录下来这就是后面排查所有问题最可靠的底账。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。