Example #1
0
    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
Example #2
0
    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
Example #3
0
 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  
Example #4
0
    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
Example #5
0
    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  
Example #6
0
    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