def _output_dataset_to_numpy(self): dataset = [] plicy = None if self._run_mode == ACL_HOST: policy = ACL_MEMCPY_DEVICE_TO_HOST else: policy = ACL_MEMCPY_DEVICE_TO_DEVICE num = acl.mdl.get_dataset_num_buffers(self.output_dataset) for i in range(num): buffer = acl.mdl.get_dataset_buffer(self.output_dataset, i) data = acl.get_data_buffer_addr(buffer) size = int(acl.get_data_buffer_size(buffer)) output_ptr = self._output_info[i]["ptr"] output_tensor = self._output_info[i]["tensor"] ret = acl.rt.memcpy(output_ptr, output_tensor.size * output_tensor.itemsize, data, size, policy) if ret != ACL_ERROR_NONE: print("Memcpy inference output to local failed") return None dataset.append(output_tensor) return dataset
def _output_dataset_to_numpy(self): dataset = [] output_tensor_list = self._gen_output_tensor() num = acl.mdl.get_dataset_num_buffers(self._output_dataset) for i in range(num): buf = acl.mdl.get_dataset_buffer(self._output_dataset, i) data = acl.get_data_buffer_addr(buf) size = int(acl.get_data_buffer_size(buf)) output_ptr = output_tensor_list[i]["ptr"] output_data = output_tensor_list[i]["tensor"] if isinstance(output_data, bytes): data_size = len(output_data) else: data_size = output_data.size * output_data.itemsize ret = acl.rt.memcpy(output_ptr, data_size, data, size, self._copy_policy) if ret != const.ACL_SUCCESS: log_error("Memcpy inference output to local failed") return None if isinstance(output_data, bytes): output_data = np.frombuffer( output_data, dtype=output_tensor_list[i]["dtype"]).reshape( output_tensor_list[i]["shape"]) output_tensor = output_data.copy() else: output_tensor = output_data dataset.append(output_tensor) return dataset
def _output_dataset_to_numpy(self): dataset = [] num = acl.mdl.get_dataset_num_buffers(self.output_dataset) for i in range(num): buffer = acl.mdl.get_dataset_buffer(self.output_dataset, i) data = acl.get_data_buffer_addr(buffer) size = acl.get_data_buffer_size(buffer) if self._run_mode == ACL_HOST: data = copy_data_device_to_host(data, size) data_array = acl.util.ptr_to_numpy(data, (size, ), NPY_BYTE) data_array = self._unpack_output_item(data_array, self._output_info[i]["shape"], self._output_info[i]["type"]) dataset.append(data_array) return dataset
def _output_dataset_to_numpy(self): dataset = [] num = acl.mdl.get_dataset_num_buffers(self.output_dataset) for i in range(num): outbuffer = acl.mdl.get_dataset_buffer(self.output_dataset, i) data = acl.get_data_buffer_addr(outbuffer) size = acl.get_data_buffer_size(outbuffer) narray = np.zeros(size, dtype=np.byte) narray_ptr = acl.util.numpy_to_ptr(narray) ret = acl.rt.memcpy(narray_ptr, narray.size * narray.itemsize, data, size, ACL_MEMCPY_DEVICE_TO_DEVICE) if ret != ACL_ERROR_NONE: print("Memcpy inference output to local failed") return None output_nparray = self._unpack_bytes_array( narray, self._output_info[i]["shape"], self._output_info[i]["type"]) dataset.append(output_nparray) return dataset
def _output_dataset_to_numpy(self): dataset = [] num = acl.mdl.get_dataset_num_buffers(self.output_dataset) # iterative each output for i in range(num): # obtain memory address from output buffer buffer = acl.mdl.get_dataset_buffer(self.output_dataset, i) data = acl.get_data_buffer_addr(buffer) size = int(acl.get_data_buffer_size(buffer)) output_ptr = self._output_info[i]["ptr"] output_tensor = self._output_info[i]["tensor"] ret = acl.rt.memcpy(output_ptr, output_tensor.size*output_tensor.itemsize, data, size, ACL_MEMCPY_DEVICE_TO_DEVICE) if ret != ACL_ERROR_NONE: print("Memcpy inference output to local failed") return None dataset.append(output_tensor) return dataset
def _output_dataset_to_numpy(self): dataset = [] output_tensor_list = self._gen_output_tensor() num = acl.mdl.get_dataset_num_buffers(self._output_dataset) for i in range(num): buf = acl.mdl.get_dataset_buffer(self._output_dataset, i) data = acl.get_data_buffer_addr(buf) size = int(acl.get_data_buffer_size(buf)) output_ptr = output_tensor_list[i]["ptr"] output_tensor = output_tensor_list[i]["tensor"] ret = acl.rt.memcpy(output_ptr, output_tensor.size * output_tensor.itemsize, data, size, self._copy_policy) if ret != const.ACL_ERROR_NONE: log_error("Memcpy inference output to local failed") return None dataset.append(output_tensor) return dataset
def _output_dataset_to_numpy(self): dataset = [] num = acl.mdl.get_dataset_num_buffers(self.output_dataset) #遍历每个输出 for i in range(num): #从输出buffer中获取输出数据内存地址 buffer = acl.mdl.get_dataset_buffer(self.output_dataset, i) data = acl.get_data_buffer_addr(buffer) size = acl.get_data_buffer_size(buffer) #创建一个numpy数组用于拷贝输出内存数据 narray = np.zeros(size, dtype=np.byte) narray_ptr = acl.util.numpy_to_ptr(narray) ret = acl.rt.memcpy(narray_ptr, narray.size * narray.itemsize, data, size, ACL_MEMCPY_DEVICE_TO_DEVICE) if ret != ACL_ERROR_NONE: print("Memcpy inference output to local failed") return None #根据模型输出的shape和数据类型,将内存数据解码为numpy数组 output_nparray = self._unpack_bytes_array( narray, self._output_info[i]["shape"], self._output_info[i]["type"]) dataset.append(output_nparray) return dataset