华为计算微信公众号
昇腾AI开发者公众号
华为计算微博
华为计算今日头条
1.模型加载也没有报错2.调用了acl.rt.set_device
def __init__(self, model_file=None, device_id=0, providers=None): self.model_file = model_file self.taskname = 'detection' self.device_id = device_id # 初始化ACL ret = acl.init() ret = acl.rt.set_device(device_id) # self.context, ret = acl.rt.create_context(device_id) # 加载模型 assert osp.exists(self.model_file), f"Model file {self.model_file} not found" self.model_id, ret = acl.mdl.load_from_file(self.model_file) self.model_desc = acl.mdl.create_desc() ret = acl.mdl.get_desc(self.model_desc, self.model_id) if ret != 0: raise RuntimeError(f"get desc,错误码:{ret}") logger.error(f"get desc<UNK>{ret}") logger.info(f"get desc {self.model_desc}") 初始化调用,没有错误提示 推理的时候,
def forward(self, img, threshold): """前向传播""" scores_list = [] bboxes_list = [] kpss_list = [] input_size = tuple(img.shape[0:2][::-1]) logger.info('input_size={}'.format(input_size)) # 图像预处理 blob = cv2.dnn.blobFromImage( img, 1.0 / self.input_std, input_size, (self.input_mean, self.input_mean, self.input_mean), swapRB=True ) # 确保blob数据是连续的 if not blob.flags['C_CONTIGUOUS']: blob = np.ascontiguousarray(blob) logger.info(f"Input shape: {blob.shape}, dtype: {blob.dtype}") logger.info(f"First 10 values: {blob.ravel()[:10]}") expected_size = blob.size * blob.itemsize actual_buffer_size = self.input_data[0]["size"] logger.info(f"Blob size: {expected_size}, Buffer size: {actual_buffer_size}") if expected_size > actual_buffer_size: raise ValueError(f"Input data too large: {expected_size} > {actual_buffer_size}") # 拷贝数据到设备 blob_bytes = blob.astype(np.float32).tobytes() if len(blob_bytes) > self.input_data[0]["size"]: raise ValueError(f"Input data size {len(blob_bytes)} exceeds buffer size {self.input_data[0]['size']}") bytes_ptr = acl.util.bytes_to_ptr(blob_bytes) try: ret = acl.rt.memcpy(self.input_data[0]["buffer"], # 目标地址 device self.input_data[0]["size"], # 目标地址大小 bytes_ptr, # 源地址 host len(blob_bytes), # 源地址大小 ACL_MEMCPY_HOST_TO_DEVICE) # 模式:从host到device if ret != 0: logger.error(f"memcpy execution failed with error code: {ret}") raise RuntimeError(f"memcpy execution failed with error code: {ret}") 最后的ret总是107002,请帮忙看看为啥会这样,我哪里还需要注意?
我要发帖子
1.模型加载也没有报错2.调用了acl.rt.set_device
def __init__(self, model_file=None, device_id=0, providers=None): self.model_file = model_file self.taskname = 'detection' self.device_id = device_id # 初始化ACL ret = acl.init() ret = acl.rt.set_device(device_id) # self.context, ret = acl.rt.create_context(device_id) # 加载模型 assert osp.exists(self.model_file), f"Model file {self.model_file} not found" self.model_id, ret = acl.mdl.load_from_file(self.model_file) self.model_desc = acl.mdl.create_desc() ret = acl.mdl.get_desc(self.model_desc, self.model_id) if ret != 0: raise RuntimeError(f"get desc,错误码:{ret}") logger.error(f"get desc<UNK>{ret}") logger.info(f"get desc {self.model_desc}") 初始化调用,没有错误提示 推理的时候,def forward(self, img, threshold): """前向传播""" scores_list = [] bboxes_list = [] kpss_list = [] input_size = tuple(img.shape[0:2][::-1]) logger.info('input_size={}'.format(input_size)) # 图像预处理 blob = cv2.dnn.blobFromImage( img, 1.0 / self.input_std, input_size, (self.input_mean, self.input_mean, self.input_mean), swapRB=True ) # 确保blob数据是连续的 if not blob.flags['C_CONTIGUOUS']: blob = np.ascontiguousarray(blob) logger.info(f"Input shape: {blob.shape}, dtype: {blob.dtype}") logger.info(f"First 10 values: {blob.ravel()[:10]}") expected_size = blob.size * blob.itemsize actual_buffer_size = self.input_data[0]["size"] logger.info(f"Blob size: {expected_size}, Buffer size: {actual_buffer_size}") if expected_size > actual_buffer_size: raise ValueError(f"Input data too large: {expected_size} > {actual_buffer_size}") # 拷贝数据到设备 blob_bytes = blob.astype(np.float32).tobytes() if len(blob_bytes) > self.input_data[0]["size"]: raise ValueError(f"Input data size {len(blob_bytes)} exceeds buffer size {self.input_data[0]['size']}") bytes_ptr = acl.util.bytes_to_ptr(blob_bytes) try: ret = acl.rt.memcpy(self.input_data[0]["buffer"], # 目标地址 device self.input_data[0]["size"], # 目标地址大小 bytes_ptr, # 源地址 host len(blob_bytes), # 源地址大小 ACL_MEMCPY_HOST_TO_DEVICE) # 模式:从host到device if ret != 0: logger.error(f"memcpy execution failed with error code: {ret}") raise RuntimeError(f"memcpy execution failed with error code: {ret}") 最后的ret总是107002,请帮忙看看为啥会这样,我哪里还需要注意?