簡體   English   中英

Pytorch:RuntimeError:減少同步失敗:cudaErrorAssert:設備端斷言已觸發

[英]Pytorch: RuntimeError: reduce failed to synchronize: cudaErrorAssert: device-side assert triggered

嘗試在此數據集對此進行訓練時遇到以下錯誤。

由於這是論文中發布的配置,我假設我做錯了一些令人難以置信的事情。

每次我嘗試運行訓練時,此錯誤都會出現在不同的圖像上。

C:/w/1/s/windows/pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: block: [0,0,0], thread: [6,0,0] Assertion `t >= 0 && t < n_classes` failed.
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1741, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1735, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1135, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Noam/Code/vision_course/hopenet/deep-head-pose/code/original_code_augmented/train_hopenet_with_validation_holdout.py", line 187, in <module>
    loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw_cont)
  File "C:\Noam\Code\vision_course\hopenet\venv\lib\site-packages\torch\nn\modules\module.py", line 541, in __call__
    result = self.forward(*input, **kwargs)
  File "C:\Noam\Code\vision_course\hopenet\venv\lib\site-packages\torch\nn\modules\loss.py", line 431, in forward
    return F.mse_loss(input, target, reduction=self.reduction)
  File "C:\Noam\Code\vision_course\hopenet\venv\lib\site-packages\torch\nn\functional.py", line 2204, in mse_loss
    ret = torch._C._nn.mse_loss(expanded_input, expanded_target, _Reduction.get_enum(reduction))
RuntimeError: reduce failed to synchronize: cudaErrorAssert: device-side assert triggered

有任何想法嗎?

這種錯誤通常發生在使用NLLLossCrossEntropyLoss時,以及當您的數據集具有負標簽(或標簽大於類數)時。 這也是您得到 Assertion t >= 0 && t < n_classes failed 的確切錯誤。

MSELoss不會發生這種情況,但 OP 提到某處存在CrossEntropyLoss ,因此會發生錯誤(程序在其他線路上異步崩潰)。 解決方案是清理數據集並確保滿足t >= 0 && t < n_classes (其中t代表標簽)。

此外,如果您使用NLLLossBCELoss ,請確保您的網絡輸出在 0 到 1 的范圍內(然后您分別需要softmaxsigmoid激活)。 請注意, CrossEntropyLossBCEWithLogitsLoss ,因為它們在損失函數內實現了激活函數。 (感謝@PouyaB 指出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM