pytorchスタンドアローンのマルチGPUのトレーニングの問題が発生したRNN

使用DataParallelトレーニングで遭遇する問題のいくつか。

1.モデルは、カスタムモジュールを認識することはできません。

試写

図示のように、はAttributeErrorとして表示されます:「DataParallel」オブジェクトには、属性「XXX」のエラーを持っていません。

原因:ネット= torch.nn.DataParallel(ネット)を使用した後、ネットはもともとネットの新しいモジュールの属性としてパッケージされています。

解決策:すべてのネット= torch.nn.DataParallel(ネット)を呼び出した後、プロパティが初期化されず、前方、必要にnet.moduleとしてネットを交換します。

2.非表示の状態は、マルチGPUの内部に分割されていません。

このようなネットワークは、多くの場合、2つのnn.moduleのクラスを使用して定義されているので、このようなエラーは、多くの場合、訓練RNN及びデリバティブネットワークに表示されます。一つは1つがRNNcellで、RNNです。

フロントRNNにおけるエラー伝播テンソル寸法誤差の形態は、具体的には、入力データがタグなしBATCHSIZEのGPUの使用なし細胞と異なるGPUむしろ隠れ状態数に応じて分割されます。典型的には、各GPUは、データのバッチサイズ/ GPUの量を計算します。しかし、使用形態にRNNcellクラス定義はself.cell 状態とself.hiddenプロパティクラスような状態をRNN。

原因:DataParallelを使用する場合、pytorchクラスの形式が離脱self.xx属性分割することなく、GPU分割の異なるバッチに同じデータに関数パラメータを転送します。プロパティのチェックデバイスの量は、それらが初期化CUDAで見つけることができる場合は、次のデバイスの数が0変化しません。

解決策:すべての金額は、フォーム間の戻り値としてフォワード機能に分割する必要があります。RNNの問題点は、音符にいくつかあります。たとえば、この問題を解決するために、オプティマイザは、多くの場合、各RNN往路に隠されています。この時点で、隠された状態の初期化は、すべてのエポックで起動すると、オプティマイザは一緒にすることはできません。ネットワークの詳細に関する一部の情報が避けられません。

参考文献:

https://www.zhihu.com/question/67726969

https://link.zhihu.com/?target=https%3A//senyang-ml.github.io/2019/07/20/pytorch-multigpu/

https://link.zhihu.com/?target=https%3A//blog.csdn.net/yuuyuhaksho/article/details/87560640

 

 

リリース5元の記事 ウォンの賞賛0 ビュー6063

おすすめ

転載: blog.csdn.net/srplus/article/details/104382399