web-dev-qa-db-ja.com

この奇妙なエラーを修正する方法:「RuntimeError:CUDA error:out of memory」

ディープラーニングネットワークに関するコードを実行しました。最初にネットワークをトレーニングしましたが、うまく機能しましたが、検証ネットワークで実行するとこのエラーが発生しました。

私には5つのエポックがありますが、すべてのエポックにはトレーニングと検証のプロセスがあります。最初のエポックで検証すると、エラーが発生しました。そのため、検証コードを実行しません。コードは2番目のエポックまで実行でき、エラーは発生しません。

私のコード:

for Epoch in range(10,15): # Epoch: 10~15
    if(options["training"]["train"]):
        trainer.Epoch(model, Epoch)

    if(options["validation"]["validate"]):
    #if(Epoch == 14):
        validator.Epoch(model)

enter image description hereenter image description here

検証コードにバグがあるのではないかと思います。しかし、私はそれを見つけることができません。

5
xiaoding chen

以下のリストで報告しようとする理由はいくつかあります。

  1. モジュールパラメータ:モジュールの次元数を確認します。大きな入力テンソル(たとえば、サイズ1000)を別の大きな出力テンソル(たとえば、サイズ1000)に変換する線形レイヤーには、サイズが(1000、1000)の行列が必要です。
  2. RNNデコーダーの最大ステップ数:アーキテクチャーでRNNデコーダーを使用している場合は、多数のステップのループを回避します。通常、データセットに適したデコードステップの数を修正します。
  3. Tensors usage:作成するテンソルの数を最小限に抑えます。ガベージコレクターは、スコープ外になるまで解放しません。
  4. バッチサイズ:メモリがなくなるまで、バッチサイズを徐々に増やします。これは、有名なライブラリでさえ実装されている一般的なトリックです(biggest_batch_first AllenNLPの BucketIterator の説明。

さらに、PyTorchの公式ドキュメントをご覧になることをお勧めします。 https://pytorch.org/docs/stable/notes/faq.html

1