[英]pytorch recover from RuntimeError: CUDA error: device-side assert triggered without restarting script
我想每個用過 Pytorch 的人都知道這個錯誤RuntimeError: CUDA error: device-side assert triggered
在某種程度上。
我在腳本中使用 GPU 代碼生成了大量數據(200k+ 長向量),所以需要一段時間。 我正在通過生成器批量執行此操作,因為我沒有內存可以一次將所有向量存儲在我的 GPU 中。 生成器具有以下結構:
for i in range(0, len(inputs), batch_size):
try:
<generate the vectors>
yield 1, <the vectors> # Here it was successful
except RuntimeError:
print(f'could not generate vectors {index} to {index + batch_size}')
yield 0, (i, i+ batch_size) # Here the input was malformed
我知道一些輸入的格式錯誤,以至於從它生成向量會因運行時錯誤而失敗,這很好,它甚至不是我數據集的 1%。 我想獲取索引並稍后處理。
這是我的問題
一旦矢量創建失敗,GPU 基本上會變磚,並將響應上述錯誤的所有請求。 事先驗證所有輸入既麻煩又緩慢。 我不想這樣做。 我想翻轉所有格式錯誤的輸入並稍后處理。
我的問題是
如何盡可能輕松快速地從這種磚砌狀態中恢復 GPU? 到目前為止,我發現的所有問題都是關於修復潛在錯誤的,我不需要這樣做。 我只想繼續從我的數據集生成向量。
一種方法可能是通過生成的輸入向量記錄您的進度,並在 GPU 變磚時重新啟動進程/機器。 如果畸形輸入的百分比足夠小,重置 GPU/機器的成本可能可以忽略不計。 你可以有一個周期性的工作,它檢查你是否完成了工作,如果沒有完成,則重新啟動它。 這是解決這個問題的粗略方法,但它應該有效。
例如:
for i in range(0, len(inputs), batch_size):
try:
exist = check_if_current_index_has_succeded_or_failed()
if exist:
continue
else:
log_current_index()
<generate the vectors>
log_success()
yield 1, <the vectors> # Here it was successful
except RuntimeError:
log_failure()
print(f'could not generate vectors {index} to {index + batch_size}')
yield 0, (i, i+ batch_size) # Here the input was malformed
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.