1. 程式人生 > 其它 >pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument

pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument

技術標籤:各類報錯解決辦法tensorrt

問題描述

該報錯來自tensorrt官方給的例子:yolov3_onnx。
按照README.md指引,執行python2 yolov3_to_onnx.py成功,但執行python3 onnx_to_tensorrt.py時報如下錯誤:

[email protected]:/usr/src/tensorrt/samples/python/yolov3_onnx$ sudo python3 onnx_to_tensorrt.py
Reading engine from file yolov3.trt
Running inference on image dog.jpg..
. Traceback (most recent call last): File "onnx_to_tensorrt.py", line 179, in <module> main() File "onnx_to_tensorrt.py", line 156, in main trt_outputs = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream) File "/usr/src/tensorrt/samples/python/yolov3_onnx/../common.py"
, line 143, in do_inference [cuda.memcpy_htod_async(inp.device, inp.host, stream) for inp in inputs] File "/usr/src/tensorrt/samples/python/yolov3_onnx/../common.py", line 143, in <listcomp> [cuda.memcpy_htod_async(inp.device, inp.host, stream) for inp in inputs] pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument

解決過程

網上很多文章(比如這篇)給出的原因是:

tensorrt推理引擎輸入推理資料的維度不對,請仔細檢查輸入資料的型別和維度資訊是否正確!!!

但對新手如我並不太友好,怎麼檢查?型別和維度資訊具體指什麼?這些都沒清楚。一個月過去了,我三天打魚兩天晒網地去學了一些相關的內容,再次嘗試解決這個問題,算是成功了吧(至少不報這個錯了)。

解決方法

yolov3_to_onnx.py這份檔案裡會需要下載一份名為yolov3.cfg的檔案,估計連結被牆了我是自己找資源下載了放到資料夾下的。開啟這個.cfg檔案,看看輸入的長寬資料(大概在第8、9行的樣子),我的是320×320(不出意外大家的應該都一樣)。
在這裡插入圖片描述
再開啟onnx_to_tensorrt.py,找到input_resolution_yolov3_HW這個引數定義,原本是(608,608)(忘記是不是自己一個月前亂改的了,反正不是這個數也你不用慌hhhhh) ,我把它改成和我cfg檔案一致的(320,320).在這裡插入圖片描述
再次執行python3 onnx_to_tensorrt.py,這一行不報錯啦~ 雖然後面還有錯誤,一步步來吧害= =
在這裡插入圖片描述


更新於半小時後,小夥伴們我太激動了啊啊啊啊!上面那張圖片的錯誤也解決了,執行成功!原地起飛!!!需要出這個reshape錯誤的解決方法的可以私聊我或者評論~ (感覺我這麼一會兒就能解決的話大家也可以解決的亞子)
在這裡插入圖片描述