티스토리 뷰

딥러닝 모델을 만들고 훈련 epoch를 돌리는데 이상하게도 시스템 RAM을 계속해서 잡아먹더라

GPU 메모리도 아니고 시스템 메모리를 계속해서 잡아먹는게 이상했다.

처음 보는 문제이다보니 해결하기 위해서 한참을 헤메였는데 언제나 그렇지만 답은 간단했다.

 

보통 Loss의 history를 저장하기 위해 loss_history라는 리스트를 만들고 epoch를 돌며 나오는 훈련셋에서의 loss값을 저장하는 경우가 많은데 loss_history.append(loss.item())와 같은 형태로 많이 이용한다.

여기서 loss의 단순 value값만 저장하면 되는데 따라서 우리는 loss.item()이라는 기능을 이용해서 그냥 단순 loss의 숫자값만 따로 떼와서 history에 저장한다.

loss.item()을 사용하지 않은경우

근데 여기서 .item() 함수를 이용하지 않으면 loss에 연결된 grad_fn_까지 저장하게 되는것으로 추정되는데 이러면 value만 저장할때 보다 훨씬 데이터 크기가 커지나보다. 이것을 계속해서 history에 append하다보니 엄청나게 빠른 속도로 시스템 메모리가 소모되는 것으로 생각한다.

 

결론 : 혹시 본인이 loss를 축적하는 history에서 loss.item()함수를 적용하지 않고 loss 자체를 append하고 있는지 확인

또는 iterative하게 축적되는 코드들을 유심히 살펴보다보면 분명히 무언가 문제가 있을것이다.

댓글