問題タブ [pytorch-lightning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PyTorch Lightning で複数のモデルを実行する際の問題
私は、それぞれ独自の TensorBoard プロットとログを使用して、Lightning を使用して数十の個別のモデル (>50) をトレーニングする必要があるシステムを開発しています。私の現在の実装には、モデルごとに 1 つの Trainer オブジェクトがあり、~90 の Trainer オブジェクトを超えると、このエラーが発生するようです。興味深いことに、エラーは、.fit() ではなく、.test() メソッドを実行したときにのみ表示されます。
私はライトニングを始めたばかりなので、トレーナー/モデルを 1 つ持つことが最善のアプローチかどうかはわかりません。ただし、各モデルから個別のプロットが必要であり、複数のモデルに対して単一のトレーナーを使用すると、結果が上書きされるようです。
参考までに、トレーナーのさまざまなリストを次のように定義しています。
トレーニングに関しては:
そしてテスト:
ありがとう!
pytorch - What is the correct way to implement gradient accumulation in pytorch?
Broadly there are two ways:
Call
loss.backward()
on every batch, but only calloptimizer.step()
andoptimizer.zero_grad()
every N batches. Is it the case that the gradients of the N batches are summed up? Hence to maintain the same learning rate per effective batch, we have to divide the learning rate by N?Accumulate loss instead of gradient, and call
(loss / N).backward()
every N batches. This is easy to understand, but does it defeat the purpose of saving memory (because the gradients of the N batches are computed at once)? The learning rate doesn't need adjusting to maintain the same learning rate per effective batch, but should be multiplied by N if you want to maintain the same learning rate per example.
Which one is better, or more commonly used in packages such as pytorch-lightning? It seems that optimizer.zero_grad()
is a prefect fit for gradient accumulation, therefore (1) should be recommended.