旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【PyTorch】安物GPUだけどバッチサイズ大きくしたい

諸事情によりバッチサイズを大きく取らないといけなくなったのですが、そんな時はoptimizerのstep等のタイミングを変更することで同等のことができそうです。 例えば下記の疑似コードでバッチサイズ16, accumulation=2であればバッチサイズ32で実行しているかのようになります。

optimizer.zero_grad()
for i, (data, target) in enumerate(data_loader):
    output = model(data)
    loss = criterion(output, target)
    loss.backward()
    # accumulation分蓄積するまでstepしない
    if (i+1)%accumulation == 0:
        optimizer.step()
        optimizer.zero_grad()