[英]Unexpected CUDA_ERROR_INVALID_VALUE from cuLaunchKernel()
[英]What makes cuLaunchKernel fail with CUDA_ERROR_INVALID_HANDLE?
我正在啟動一個 CUDA kernel 我已經編譯,使用cudLaunchKernel()
驅動程序 API ZC1C4252748EC178 我在kernelParams
數組中傳遞我的參數,並為extra
參數傳遞nullptr
。
不幸的是,這失敗了,錯誤: CUDA_ERROR_INVALID_HANDLE
。 為什么? 我檢查了驅動程序 API 文檔,了解 function 在什么情況下可能會失敗,並編輯它討論了CUDA_ERROR_INVALID_VALUE
的失敗(不是同一件事)。 它沒有討論我得到的錯誤。
由於cuLaunchKernel()
有多個參數,這是某種句柄 - 這個失敗意味着什么? (如果有多種選擇——它們是什么?)
一種可能性是由於 CUDA 驅動程序上下文切換導致的故障。 您可能無意中執行了一些操作來推送或替換 CUDA 設備的當前上下文; 並且加載的模塊是上下文的一部分 - 因此您編譯和加載的 kernel 不能再在當前上下文中加載。 這會觸發CUDA_ERROR_INVALID_HANDLE
失敗。
假設是這種情況,請在啟動前切換上下文,例如:
cuCtxPushCurrent(my_driver_context);
cuLaunchKernel(/*etc. etc. */);
/* possibly */ cuCtxPopCurrent(NULL);
或者像這樣:
cuCtxSetCurrent(my_driver_context);
cuLaunchKernel(/*etc. etc. */);
請注意,如果您彈出並忽略對有效上下文的唯一引用,您可能會面臨 memory 泄漏的風險; 並且您還可能會冒一些其他代碼的風險,假設它已經放置的上下文仍然是活動的。
好吧,就我而言,這是一個 OOM 錯誤(內存不足)錯誤,由於某種原因沒有這樣報告。 當我減小 model 的批量大小時,它起作用了。 也許你應該檢查是否也是這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.