KalelPark's LAB

[CODE] Gradient Accumulate이란? 본문

Data Science/CODE

[CODE] Gradient Accumulate이란?

kalelpark 2023. 3. 20. 18:34

딥러닝을 돌리다보면, Memory가 부족하면, CUDA Out Of Memory를 자주 만나게 됩니다.

GPU 메모리가 부족이 많이 발생하였을 때, 메모리 부족이 일어나는 이유이기도 때문입니다.

 

batch size가 학습에 큰 영향을 미치지 않는다면 상관이 없지만, batch size는 학습에 큰 영향을 줍니다. batch size가 큰 배치사이즈를 사용하는 이유는 학습시에 정보의 노이즈를 제거하고 더 나은 gradient decsent를 수행할수 있습니다. 

 

Explained of Gradient Accumulate

[CODE]

model.zero_grad()                                   # Reset gradients tensors
for i, (inputs, labels) in enumerate(training_set):
    predictions = model(inputs)                     # Forward pass
    loss = loss_function(predictions, labels)       # Compute loss function
    loss = loss / accumulation_steps                # Normalize our loss (if averaged)
    loss.backward()                                 # Backward pass
    if (i+1) % accumulation_steps == 0:             # Wait for several backward steps
        optimizer.step()                            # Now we can do an optimizer step
        model.zero_grad()                           # Reset gradients tensors
        if (i+1) % evaluation_steps == 0:           # Evaluate the model when we...
            evaluate_model()

Reference

https://velog.io/@twinjuy/OOM%EB%A5%BC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Batch-Accumulation

 

OOM를 해결하기 위한 Gradient Accumulation

딥러닝 모델을 돌리다보면, 상당히 많이 볼 수 있는 에러중 하나인 CUDA Out Of Memeory가 있습니다. 이 에러는 모델 실행중 GPU 메모리 부족이 발생하였을 때 볼 수 있습니다. 메모리 부족이 일어나는

velog.io

 

Comments