关于 pycuda._driver.LogicError: cuMemcpyDtoH failed: invalid argument 的问题
Posted
技术标签:
【中文标题】关于 pycuda._driver.LogicError: cuMemcpyDtoH failed: invalid argument 的问题【英文标题】:Question about pycuda._driver.LogicError: cuMemcpyDtoH failed: invalid argument 【发布时间】:2019-08-08 04:29:56 【问题描述】:我试图运行基于以下链接的代码
https://documen.tician.de/pycuda/tutorial.html
在此链接中运行代码结果很好。
这是我的版本,定义相似。请注意,我是在引擎上下文中运行的,因为我想运行一个 engine.execute 函数。
import pycuda.driver as cuda
import pycuda.autoinit
import tensorrt as trt
import numpy as np
from keras.datasets import mnist
dims = (1, 28, 28)
dims2 = (1, 1, 10)
batch_size = 1000
nbytes = batch_size * trt.volume(dims) * np.dtype(np.float32).itemsize
nbytes2 = batch_size * trt.volume(dims2) * np.dtype(np.float32).itemsize
self.d_src = cuda.mem_alloc(nbytes)
self.d_dst = cuda.mem_alloc(nbytes2)
bindings = [int(self.d_src), int(self.d_dst)]
(x_train, y_train), (x_test, y_test) = mnist.load_data()
img_h = x_test.shape[1]
img_w = x_test.shape[2]
x_test = x_test.reshape(x_test.shape[0], 1, img_h, img_w)
x_test = x_test.astype('float32')
x_test /= 255
num_test = x_test.shape[0]
output_size = batch_size * trt.volume(dims2)
y = np.empty((num_test,output_size), np.float32)
for i in range(0, num_test, batch_size):
x_part = x_test[i : i + batch_size]
y_part = y[i : i + batch_size]
cuda.memcpy_htod(self.d_src, x_part)
cuda.memcpy_dtoh(y_part, self.d_dst)
但是,它在 memcpydtoh 上失败了,但 memcpyhtod 工作。
File "a.py", line 164, in infer
cuda.memcpy_dtoh(y_part, self.d_dst)
pycuda._driver.LogicError: cuMemcpyDtoH failed: invalid argument
为什么会这样?定义与链接中的代码类似。
【问题讨论】:
该代码有何帮助?我不能为自己运行它。 x_part 和 y_part 是什么? 已编辑以包含 x 和 y 定义,尽管我最初认为您可以使用前面链接中定义的 x 和 y。 【参考方案1】:反正我已经解决了。
x_part
和y_part
的设备分配需要不同,因为它们的大小不同。
如果我定义output_size = trt.volume(dims2)
,它就可以工作。
错误消息一开始并没有太大帮助,让我认为我输入了错误的参数。
【讨论】:
嗨,我最近才开始在 tensorrt 中工作,只是遇到了同样的错误。如果您更详细地解释您的答案,例如如何将output_size = batch_size * trt.volume(dims2)
更改为 output_size = trt.volume(dims2)
,那真的会对我有所帮助。我可能只是在问幼稚的问题,而且我也在尝试从文档中了解更多信息。以上是关于关于 pycuda._driver.LogicError: cuMemcpyDtoH failed: invalid argument 的问题的主要内容,如果未能解决你的问题,请参考以下文章
pycuda._driver.LogicError: explicit_context_dependent failed: invalid device context - no currently
pycuda._driver.LogicError: explicit_context_dependent failed: invalid device context - no currently