linux 5.2中如何将修改PAGE_SIZE大小

在Linux系统中,默认PAGE_SIZE大小为4K,而Redhat或CentOS中为64K。开发驱动时需测试不同页大小的工作情况。本文介绍了修改PAGE_SIZE页大小的方法,在make menuconfig时搜索ARM64_64K_PAGES,进入page size选择项,可从4K/16K/64K页中选择对应页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux系统中默认PAGE_SIZE大小为4K,但在redhat或centOS中PAGE_SIZE为64K,因此开发驱动时除了在默认4K PAGE_SIZE时工作正常外,一般也需要测试64K页时工作情况。下面介绍如何修改PAGE_SIZE页。

方法:在make menuconfig时搜索ARM64_64K_PAGES,出现如下图所示:

选择1,进入page size选择项:

ENTER进入:

系统中有4K/16K/64K页,选择对应的页即可;

 

 

+--------------------------------------------------------------------------------------------------------+ | npu-smi 25.0.rc1.1 Version: 25.0.rc1.1 | +-------------------------------+-----------------+------------------------------------------------------+ | NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) | | Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) | +===============================+=================+======================================================+ | 2 310P3 | OK | NA 49 24 / 24 | | 0 0 | 0000:01:00.0 | 0 1706 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 2 310P3 | OK | NA 47 0 / 0 | | 1 1 | 0000:01:00.0 | 0 1367 / 43757 | +===============================+=================+======================================================+ | 3 310P3 | OK | NA 52 0 / 0 | | 0 2 | 0000:03:00.0 | 0 1484 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 3 310P3 | OK | NA 49 0 / 0 | | 1 3 | 0000:03:00.0 | 0 1456 / 43757 | +===============================+=================+======================================================+ | 5 310P3 | OK | NA 49 0 / 0 | | 0 4 | 0000:81:00.0 | 0 1599 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 5 310P3 | OK | NA 47 0 / 0 | | 1 5 | 0000:81:00.0 | 0 1341 / 43757 | +===============================+=================+======================================================+ | 6 310P3 | OK | NA 51 0 / 0 | | 0 6 | 0000:83:00.0 | 0 1505 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 6 310P3 | OK | NA 50 0 / 0 | | 1 7 | 0000:83:00.0 | 0 1433 / 43757 | +===============================+=================+======================================================+ +-------------------------------+-----------------+------------------------------------------------------+ | NPU Chip | Process id | Process name | Process memory(MB) | +===============================+=================+======================================================+ | 2 0 | 2450404 | python | 98 | | 2 0 | 2526327 | python | 99 | | 2 0 | 2522713 | python | 98 | +===============================+=================+======================================================+ | No running processes found in NPU 3 | +===============================+=================+======================================================+ | No running processes found in NPU 5 | +===============================+=================+======================================================+ | No running processes found in NPU 6 | +===============================+=================+======================================================+ 这是当前npu的使用状态,现在需要怎么办,代码中有错误吗,还是代码衔接问题 import os import io import cv2 import time import logging import numpy as np from PIL import Image from fastapi import FastAPI, File, UploadFile, Request from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles from pydantic import BaseModel from typing import Optional, List, Dict, Any from datetime import datetime # 华为昇腾推理API import acl # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) app = FastAPI(title="Ascend-OM Object Detection API") RESULT_DIR = 'results' os.makedirs(RESULT_DIR, exist_ok=True) app.mount("/gqj_check/img", StaticFiles(directory=RESULT_DIR), name="results") CUSTOM_NAMES = { "A_安全帽": "安全帽", "B_安全带": "安全带", "C_绝缘靴": "绝缘靴", "D_绝缘手套": "绝缘手套", "E_验电器": "验电器", "F_工具包": "工具包", "G_钳子": "钳子", "H_力矩扳手": "力矩扳手", "I_钢丝刷": "钢丝刷", "J_头灯": "头灯", "K_力矩头": "力矩头", "L_防护旗": "防护旗", "M_扳手": "扳手", "N_螺丝刀": "螺丝刀", "O_脚扣": "脚扣", "P_水平尺": "水平尺", "Q_手锤子": "手锤子" } class ImageUrl(BaseModel): image_url: str class DetectionItem(BaseModel): class_name: str count: int confidence: float class ApiResponse(BaseModel): code: int msg: str request_time: str end_time: str total_time: str status: Optional[str] data: List[DetectionItem] inference_time: Optional[str] image_url: Optional[str] source_url: Optional[str] # --------- 昇腾 NPU 推理相关 --------- class AscendModel: def __init__(self, om_path): logger.info("初始化ACL环境...") self.acl_init() self.context, self.stream = None, None self.model_id, self.model_desc = None, None self.input_size = (960, 960) # 需与模型输入一致 self.input_data = None self.output_data = None logger.info("加载模型...") self.load_model(om_path) logger.info("模型加载完成") def acl_init(self): """初始化ACL环境""" ret = acl.init() if ret != 0: raise Exception(f"ACL初始化失败,错误码: {ret}") def load_model(self, om_path): """加载OM模型并准备输入输出缓冲区""" if not os.path.exists(om_path): raise FileNotFoundError(f"模型文件不存在: {om_path}") # 创建上下文和流 self.context = acl.rt.create_context(0) self.stream = acl.rt.create_stream() # 加载模型 self.model_id = acl.mdl.load_from_file(om_path) self.model_desc = acl.mdl.create_desc(self.model_id) # 准备输入输出缓冲区 self._prepare_buffers() def _prepare_buffers(self): """准备模型输入输出缓冲区""" # 获取输入描述 input_num = acl.mdl.get_num_inputs(self.model_desc) input_desc = acl.mdl.get_input_desc(self.model_desc, 0) input_size = acl.mdl.get_desc_size(input_desc) self.input_data = acl.rt.malloc(input_size, acl.rt.mem_type_device) # 获取输出描述 output_num = acl.mdl.get_num_outputs(self.model_desc) self.output_data = [] for i in range(output_num): output_desc = acl.mdl.get_output_desc(self.model_desc, i) output_size = acl.mdl.get_desc_size(output_desc) output_buf = acl.rt.malloc(output_size, acl.rt.mem_type_device) self.output_data.append(output_buf) def preprocess(self, image: Image.Image): """图像预处理""" img = image.resize(self.input_size) img = np.array(img) if img.shape[2] == 4: img = img[:, :, :3] # 去除alpha通道 img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) img = img.astype(np.float32) / 255.0 img = np.transpose(img, (2, 0, 1)) img = np.expand_dims(img, 0) return img def infer(self, img_np: np.ndarray): """执行模型推理""" logger.info("开始推理...") start_time = time.time() # 将数据拷贝到设备 img_flat = img_np.flatten() acl.rt.memcpy(self.input_data, img_flat.nbytes, acl.util.numpy_to_ptr(img_flat), img_flat.nbytes, acl.rt.memcpy_host_to_device) # 执行推理 inputs = [self.input_data] outputs = self.output_data ret = acl.mdl.execute(self.model_id, inputs, outputs) if ret != 0: raise Exception(f"推理执行失败,错误码: {ret}") # 处理输出(根据实际模型输出格式调整) # 这里假设输出是检测框数组 [class_id, conf, x1, y1, x2, y2] output_buffer = outputs[0] output_size = acl.mdl.get_desc_size(acl.mdl.get_output_desc(self.model_desc, 0)) host_output = np.zeros(output_size // 4, dtype=np.float32) # 假设是float32类型 acl.rt.memcpy(acl.util.numpy_to_ptr(host_output), output_size, output_buffer, output_size, acl.rt.memcpy_device_to_host) # 解析输出为检测框格式 dets = [] num_dets = int(host_output[0]) # 假设第一个元素是检测框数量 for i in range(num_dets): base_idx = 1 + i * 6 if base_idx + 5 >= len(host_output): break class_id = int(host_output[base_idx]) conf = host_output[base_idx + 1] x1, y1, x2, y2 = host_output[base_idx+2:base_idx+6] dets.append([class_id, conf, x1, y1, x2, y2]) inference_time = time.time() - start_time logger.info(f"推理完成,耗时: {inference_time:.3f}秒") return dets def __del__(self): """资源释放""" logger.info("释放资源...") if hasattr(self, 'model_id') and self.model_id: acl.mdl.unload(self.model_id) if hasattr(self, 'model_desc') and self.model_desc: acl.mdl.destroy_desc(self.model_desc) if hasattr(self, 'input_data') and self.input_data: acl.rt.free(self.input_data) if hasattr(self, 'output_data') and self.output_data: for buf in self.output_data: acl.rt.free(buf) if hasattr(self, 'stream') and self.stream: acl.rt.destroy_stream(self.stream) if hasattr(self, 'context') and self.context: acl.rt.destroy_context(self.context) acl.finalize() # --------- FastAPI 业务逻辑 --------- model = None # 延迟初始化,通过命令行参数加载 def process_image(image: Image.Image, request_time: datetime, original_filename: Optional[str] = None): """处理图像并返回检测结果""" timestamp = request_time.strftime("%Y%m%d_%H%M%S_%f") # 生成文件名 if original_filename: base_name = os.path.basename(original_filename) name, ext = os.path.splitext(base_name) original_filename = f"{name}_{timestamp}{ext}" else: original_filename = f"original_{timestamp}.jpg" original_path = os.path.join(RESULT_DIR, original_filename) result_filename = f"detection_{timestamp}.jpg" result_path = os.path.join(RESULT_DIR, result_filename) # 保存原图 image.save(original_path) logger.info(f"原图保存至: {original_path}") # 推理过程 logger.info("开始预处理和推理...") start_inference_time = time.time() img_np = model.preprocess(image) results = model.infer(img_np) end_inference_time = time.time() inference_time = end_inference_time - start_inference_time logger.info(f"推理耗时: {inference_time:.3f} 秒") # 解析推理结果 class_counts = {} detected_objects = [] opencv_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) height, width = opencv_image.shape[:2] for det in results: class_id, conf, x1, y1, x2, y2 = det # 过滤低置信度结果 if conf < 0.5: continue # 检查类别ID有效性 if 0 <= class_id < len(CUSTOM_NAMES): class_name = list(CUSTOM_NAMES.values())[int(class_id)] else: class_name = f"未知类别({class_id})" logger.warning(f"检测到未知类别ID: {class_id}") # 更新计数 class_counts[class_name] = class_counts.get(class_name, 0) + 1 detected_objects.append({"class_name": class_name, "confidence": conf}) # 绘制检测框(确保坐标在有效范围内) x1 = max(0, min(int(x1), width)) y1 = max(0, min(int(y1), height)) x2 = max(0, min(int(x2), width)) y2 = max(0, min(int(y2), height)) cv2.rectangle(opencv_image, (x1, y1), (x2, y2), (0,255,0), 2) cv2.putText(opencv_image, f"{class_name}:{conf:.2f}", (x1, max(10, y1-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2) # 保存结果图 cv2.imwrite(result_path, opencv_image) logger.info(f"结果图保存至: {result_path}") # 构建返回结果 detection_result = [] for class_name, count in class_counts.items(): class_detections = [d for d in detected_objects if d["class_name"] == class_name] max_confidence = max([d["confidence"] for d in class_detections]) if class_detections else 0 detection_result.append({ "class_name": class_name, # 与DetectionItem保持一致 "count": count, "confidence": round(max_confidence, 4) }) return { "detection_result": detection_result, "inference_time": inference_time, "original_path": original_path, "result_path": result_path } @app.post("/gqj_check/localfile") async def detect_objects(request: Request, file: UploadFile = File(...)): request_time = datetime.now() if model is None: end_time = datetime.now() return JSONResponse( content={"code": 500, "msg": "模型未加载", "request_time": str(request_time), "end_time": str(end_time), "total_time": "0", "data": []}, status_code=500 ) try: contents = await file.read() image = Image.open(io.BytesIO(contents)) result = process_image(image, request_time, file.filename) end_time = datetime.now() base_url = str(request.base_url) result_filename = os.path.basename(result["result_path"]) debug_image_url = f"{base_url}gqj_check/img/{result_filename}" response_data = { "code": 200, "msg": "成功", "request_time": str(request_time), "end_time": str(end_time), "total_time": f"{(end_time-request_time).total_seconds():.3f}秒", "status": "success", "data": result["detection_result"], "inference_time": f"{result['inference_time']:.3f}", # 与模型保持一致 "debug_image_url": debug_image_url } logger.info("检测完成,返回结果") return JSONResponse(content=response_data) except Exception as e: end_time = datetime.now() logger.error(f"检测异常: {str(e)}", exc_info=True) return JSONResponse( content={"code": 500, "msg": str(e), "request_time": str(request_time), "end_time": str(end_time), "total_time": "0", "data": []}, status_code=500 ) if __name__ == "__main__": import argparse import uvicorn parser = argparse.ArgumentParser() parser.add_argument('--model_path', type=str, required=True, help='OM模型路径') parser.add_argument('--port', type=int, default=8000) parser.add_argument('--input_size', type=int, nargs=2, default=(960, 960), help='模型输入尺寸') args = parser.parse_args() logger.info(f"正在加载模型: {args.model_path},服务端口: {args.port}") model = AscendModel(args.model_path) model.input_size = tuple(args.input_size) # 设置输入尺寸 logger.info(f"模型加载完成,输入尺寸: {model.input_size},服务启动中...") uvicorn.run(app, host="0.0.0.0", port=args.port)
最新发布
07-31
<think>我们正在解决在昇腾310P3芯片上运行YOLO模型推理时,程序卡在模型加载阶段的问题。根据之前的分析,可能的原因包括系统资源不足、驱动或工具链版本不匹配、设备权限问题、模型转换错误以及系统配置问题等。现在,我们将从代码和硬件配置两个方面进行排查。 ### 1. 检查硬件配置和系统环境 #### 1.1 确认昇腾310P3设备状态 首先,我们需要确认昇腾310P3设备是否正常识别并处于可用状态。执行以下命令: ```bash npu-smi info ``` 此命令会显示设备的基本信息,包括设备编号、芯片型号、固件版本、驱动版本等。如果设备状态显示为`OK`,则设备正常。如果未显示或状态异常,请检查驱动安装。 #### 1.2 检查驱动和CANN版本 确保安装的驱动和CANN(Compute Architecture for Neural Networks)版本与昇腾310P3芯片兼容。可以通过以下命令查看: ```bash cat /usr/local/Ascend/driver/version.info cat /usr/local/Ascend/ascend-toolkit/latest/acllib/version.info ``` 请参考华为官方文档,确认驱动和CANN版本是否支持昇腾310P3。如果版本不匹配,需要升级或降级到兼容版本。 #### 1.3 检查设备权限 确保运行程序的用户对昇腾设备有访问权限。检查设备节点`/dev/davinciX`(X为设备编号,通常为0)的权限: ```bash ls -l /dev/davinci0 ``` 输出应为: ```text crw-rw---- 1 root root 511, 0 Jul 30 16:50 /dev/davinci0 ``` 如果权限不对,使用以下命令修改: ```bash sudo chmod 660 /dev/davinci0 sudo chown root:<your_user_group> /dev/davinci0 ``` 将`<your_user_group>`替换为你的用户组(可以通过`groups`命令查看)。 ### 2. 检查模型转换 模型转换(ATC)是模型能在昇腾芯片上运行的关键步骤。确保转换过程正确无误。 #### 2.1 验证模型转换命令 参考引用[2]中的模型转换命令,确保你的转换命令正确。例如,对于YOLOv8模型: ```bash atc --model=yolov8n.onnx --framework=5 --output=yolov8n --input_shape="images:1,3,640,640" --soc_version=Ascend310P3 --insert_op_conf=aipp.cfg ``` 注意: - `--soc_version`参数必须指定为`Ascend310P3`(根据你的芯片型号)。 - 输入形状`input_shape`需要与模型实际输入一致。 - `aipp.cfg`文件用于配置图像预处理,确保其内容正确。 #### 2.2 检查转换日志 转换时使用`--log`参数生成详细日志: ```bash atc --log=debug ... # 其他参数 ``` 检查日志中是否有错误或警告,特别是算子不支持的情况。如果遇到不支持的算子,可能需要修改模型结构或使用自定义算子。 ### 3. 检查代码实现 在代码中,模型加载是通过ACL(Ascend Computing Language)接口完成的。以下是常见的加载步骤,请检查你的代码是否遵循: #### 3.1 初始化ACL环境 ```python ret = acl.init() assert ret == 0, f"ACL初始化失败,错误码: {ret}" ``` #### 3.2 加载模型 ```python model_path = "/home/gtproject/best_bs1.om" model_id, ret = acl.mdl.load_from_file(model_path) assert ret == 0, f"模型加载失败,错误码: {ret}" ``` #### 3.3 创建模型描述 ```python model_desc = acl.mdl.create_desc() ret = acl.mdl.get_desc(model_desc, model_id) assert ret == 0, f"获取模型描述失败,错误码: {ret}" ``` #### 3.4 创建输入输出数据结构 根据模型描述创建输入和输出数据结构。 #### 3.5 执行推理 创建输入输出内存,执行推理。 #### 3.6 错误处理 在每个ACL API调用后检查返回值,确保错误被及时发现。 ### 4. 资源监控 在模型加载过程中,使用系统命令监控资源使用情况: - 内存监控:使用`free -m`或`top`命令,观察内存是否充足。 - 设备监控:使用`npu-smi info watch -i 0 -c 1`(每1秒刷新一次设备0的状态),观察芯片的计算和内存使用情况。 ### 5. 常见问题及解决方案 #### 5.1 内存不足 模型加载需要较大的连续内存。如果系统内存不足,可以尝试: - 关闭不必要的进程。 - 增加系统交换空间(swap)。 - 在代码中增加重试机制,等待内存释放。 #### 5.2 模型转换错误 如果模型转换时使用了错误的参数(如输入形状、芯片型号等),会导致加载失败。请仔细检查转换命令,并参考[昇腾官方文档](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/70RC1alpha002/infacldevg/atctool/atlasatc_16_0001.html)。 #### 5.3 驱动或CANN版本不兼容 昇腾310P3需要特定版本的驱动和CANN。请确保安装的版本匹配。可以通过华为昇腾社区下载对应版本。 #### 5.4 系统内核问题 某些Linux内核版本可能与昇腾驱动存在兼容性问题。建议使用华为官方推荐的操作系统版本,如CentOS 7.6或Ubuntu 18.04。 ### 6. 调试建议 - **简化测试**:使用华为提供的样例程序(如ResNet50)进行测试,确认硬件环境正常。 - **日志分析**:在代码中增加详细日志,记录ACL每个步骤的返回值和错误信息。同时,查看系统日志`/var/log/messages`或`dmesg`中是否有昇腾相关的错误信息。 - **联系华为技术支持**:如果以上步骤无法解决问题,收集相关日志(驱动日志、ACL日志、模型转换日志)并联系华为技术支持。 ### 总结 在昇腾310P3上运行YOLO模型推理卡在模型加载阶段,需要从硬件配置、驱动版本、模型转换、代码实现和资源监控等多个方面进行排查。按照上述步骤逐一检查,通常可以定位问题原因。 ### 相关问题 1. 如何优化昇腾310P3上的YOLO模型推理性能? 2. 昇腾310P3支持哪些YOLO模型版本? 3. 如何监控昇腾310P3芯片的资源使用情况?</think>### 昇腾310P3运行YOLO模型推理卡在模型加载阶段的排查指南 针对昇腾310P3芯片运行YOLO模型推理卡在模型加载阶段的问题,以下是系统的排查流程,结合代码和硬件配置的检查要点: --- #### 一、硬件配置排查(优先级高) 1. **检查设备识别状态** ```bash npu-smi info ``` - 确认输出包含`Ascend 310P3`芯片型号 - 检查`Health`状态是否为`OK`[^1] - 若显示`OFFLINE`或`ERROR`,需重新安装驱动: ```bash sudo ./Ascend-hdk-310p-npu-driver_<version>_linux-aarch64.run --install-for-all ``` 2. **验证设备权限** ```bash ls -l /dev/davinci* # 昇腾310P3设备节点 ``` - 正常权限应为:`crw-rw---- 1 root root` - 修复权限命令: ```bash sudo chmod 660 /dev/davinci0 sudo chown root:<your_user_group> /dev/davinci0 ``` 3. **资源监控** ```bash npu-smi info watch -i 0 -c 1 # 实时监控设备0资源 ``` - 关注`HBM-Usage`是否接近100%(内存不足) - 检查`Task-Number`是否超限(默认上限256) --- #### 二、模型转换问题排查 1. **验证ATC转换参数** 参考引用[2],检查转换命令是否适配310P3: ```bash atc --model=yolov8n.onnx --framework=5 --output=yolov8n \ --input_shape="images:1,3,640,640" \ --soc_version=Ascend310P3 \ # 必须明确指定310P3 --insert_op_conf=aipp.cfg ``` - **关键参数**: - `soc_version=Ascend310P3`(非Ascend310) - 输入尺寸需与训练完全一致 - 使用`--log=debug`查看转换细节 2. **检查AI预处理配置** 在`aipp.cfg`中确认图像预处理参数匹配模型要求: ```ini aipp_op { input_format : RGB888_U8 # 与模型输入格式一致 src_image_size_w : 640 # 匹配--input_shape src_image_size_h : 640 } ``` --- #### 三、代码层排查 1. **ACL初始化检查** 在Python代码中添加详细错误处理: ```python ret = acl.init() if ret != 0: print(f"ACL初始化失败: {acl.util.acl_get_error_msg(ret)}") exit() ``` 2. **模型加载超时设置** 在`acl.mdl.load_from_file`前增加超时配置: ```python # 设置模型加载超时10秒 ret = acl.rt.set_device(0) ret = acl.rt.set_context_timeout(10000) # 单位ms ``` 3. **检查输入输出描述** 添加模型描述校验: ```python model_desc = acl.mdl.create_desc() ret = acl.mdl.get_desc(model_desc, model_id) if ret != 0: print(f"模型描述获取失败: {acl.util.acl_get_error_msg(ret)}") # 打印输入输出维度 input_size = acl.mdl.get_input_size_by_index(model_desc, 0) print(f"模型输入尺寸: {input_size} bytes") ``` --- #### 四、系统级检查 1. **内存泄漏检测** ```bash cat /proc/<pid>/status | grep VmHWM # 监控进程内存峰值 ``` - 若持续增长:检查是否未释放模型资源(需在代码中调用`acl.mdl.unload`) 2. **内核参数调整** 在`/etc/sysctl.conf`中添加: ```ini vm.min_free_kbytes = 102400 # 保留100MB应急内存 vm.overcommit_ratio = 90 # 减少过度分配 ``` 执行`sysctl -p`生效 3. **固件版本兼容性** ```bash cat /usr/local/Ascend/driver/version.info ``` - 确认驱动版本≥ 23.0.RC1(310P3专用) - 升级命令:`npu-smi -t upgrade -i 0 -d <固件路径>` --- #### 五、分步测试方案 | 步骤 | 测试内容 | 预期结果 | |------|----------|----------| | 1 | 运行`npu-smi`基础命令 | 显示310P3设备状态正常 | | 2 | 执行样例模型推理(如ResNet50) | 成功输出分类结果 | | 3 | 转换YOLO模型时添加`--log=debug` | 无"unsupported operator"警告 | | 4 | 简化YOLO模型(移除后处理层) | 可完成加载 | | 5 | 在代码中注释推理逻辑只保留加载 | 通过加载阶段 | > 若步骤2失败→硬件问题;步骤4失败→模型兼容问题;步骤5失败→资源或驱动问题 --- ### 常见问题解决方案 1. **后台持续输出`nanosleep`调用** → **硬件响应超时**,需检查: - `/var/log/ascend_seclog`中的设备异常日志 - 尝试`sudo systemctl restart ascend_device`重启服务 2. **模型转换成功但加载失败** → **输入输出不匹配**,使用工具检查OM模型: ```bash /usr/local/Ascend/ascend-toolkit/latest/bin/msame --model yolov8n.om --output ./output ``` 3. **报错`ACL_ERROR_GE_FAIL`** → **图引擎错误**,通常因模型转换时的算子融合导致,尝试: ```bash atc ... --fusion_switch_file=disable_fusion.cfg # 禁用算子融合 ``` ### 相关问题 1. 如何优化YOLOv8模型在昇腾310P3上的推理性能? 2. 昇腾310P3与昇腾310在模型部署上有哪些关键区别? 3. 模型转换时遇到不支持的算子应如何处理? 4. 如何监控昇腾芯片的实时资源利用率?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值