Cuda Out Of Memory

xdfc1745·2021년 11월 29일
0
RuntimeError:CUDA out of Memory. Tried to allocate 2.00MiB (GPU 0; 
\22.17 GiB already allocated; 2.50 MiB free; 21.30 GiB reserved in total by PyTorch)

다음과 같은 에러가 pytorch로 모델 학습 중, 테스트 중 종종 발생한다. 이는 gpu의 메모리 부족현상이다,.

여러가지 방법이 존재한다.

나는 총 2가지 방법을 사용해봤고, 내 생각에는 이 모든 방법이 복합적으로 작동하여 해결된것 같다.

  1. 메모리 캐쉬 삭제

    cuda로 할당한 변수들이 메모리에 할당되게 되는데, 대부분 자동으로 삭제가 되나, 이 변수를 다른 곳에서 사용할 경우 이 변수는 삭제가 안되고 메모리에 남아 있게 된다.

    tensor변수의 경우 꽤 큰 메모리를 사용하므로 이를 다시 사용하는 경우를 확실히 확인하여 이 변수부터 삭제 해주는게 필요하다.

    inputs = {a.cuda(), b.cuda(), c.cuda()}
    outputs = model(**inputs)
    del inputs
    torch.cuda.empty_cache()
    
    ## 뭔가 작동하는 코드으으으으으으으 ##
    
    cls, prob = model(text)
    #prob = tensor(1, device=cuda:0, grad_fn=<MaxBackWard1>)
    percent.append(prob.item())
    del prob
    torch.cuda.empty_cache()

    이처럼 cuda로 할당 된 변수를 삭제하고 메모리의 캐쉬를 삭제해주면 된다.

    나는 이 방법으로는 해결이 안되 다른 방법을 시도해봤다.

    또한 tensor변수의 값을 저장하는 곳에서 많은 메모리가 사용된다는 것을 알았다. 이를 줄여주기 위해 tensor변수의 값만 사용하고 사용한 후, 삭제 및 캐쉬삭제를 해주었다.

  2. batch-size 줄이기

    테스트의 배치 사이즈가 너무 클 경우 한번에 사용하는 변수가 많아지면서 메모리 부족현상이 일어날 수 있다. 이를 해결하기 위해서 16→4로 배치 사이즈를 줄여주었다.

이 모든 방법들이 복합적으로 작용하여 문제를 해결할 수 있었던것같다.

다른 사람들은 자신의 문제점을 파악하고 이러한 방법들을 적절하게 사용하면 해결할 수 있을 것으로 보인다.

profile
안녕하세요 ㅎㅎ

0개의 댓글