PyTorch出現:RuntimeError: An attempt has been made to start a new process...報錯 (已解決)

Phoenixtree_Zhao發表於2020-10-23

PyTorch出現:RuntimeError: An attempt has been made to start a new process...報錯 (已解決)

 

最近從新除錯一段pytorch 程式碼,以前的伺服器上完全沒問題,但換了一臺機器,重新安裝了新版本的 cuda,anaconda,pytorch 等,以前的程式碼出現各種版本不適合的問題。一天下來,解決了 n 個問題。

問題:

現在說說這個問題。執行 pytorch 時出現的情況如下:

RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

原因:

網上查詢結果,原因是多程式的原因。具體可參考博文:Python 中的 if __name__ == '__main__' 該如何理解

 

解決方法:

既然是多執行緒的原因,那麼可以從兩個角度解決問題:

1. 程式碼在執行 epoch 之前,加上    if __name__=='__main__'

試過,有效,一次通過。

2. 不使用多執行緒,即去掉 num_workers 引數,或設定 num_workers=0。

(目前還沒試過,因為我還是想用多執行緒。)

 

 

相關文章