https://datamasters.co.kr/48
1부에서는, tensorflow를 통해 gpu와 그 메모리들을 관리하는 방법에 대해 다루었다.
이번 포스팅에서는 실제로 어떠한 방법들을 사용해야 gpu를 효율적으로 다룰 수 있을지에 대해 논해본다.
Out of Memory?
당장 해법이 급하다면 넘어가도 무방하다
Out of Memory를 자주보고 있다면, 본인이 아래의 케이스에 속하는지 확인해보자. StackOverflow에도 종종 올라오는 대표적인 사례들이다.
batch_size가 너무나 크다.- 한 프로세스에서 다른
Model을 두번compile했다. - gpu를 사용하는 (또는 했던) 다른 프로세스가 아직 작업 중이거나, 작업이 끝났음에도 불구하고
terminate되지 않았다.
물론 이 외에도 OOM을 일으키는 경우가 있겠지만, 십중팔구 위의 3가지 이유 때문에 발생한다고 생각하면 된다. 아니, 정말 이 외에 있던가...?
세 가지 경우 모두 keras에 별다른 옵션을 지정하지 않고 사용하면 더 자주 발생할 수 있는데, 이번 포스팅에서 어떠한 옵션들이 있는지도 가볍게 다루도록 한다.
batch_size
우선 batch_size란, keras.models.Model (이하 Model)에서 가장 많이, 그리고 때로는 가장 적게 사용되는 argument 중 하나이다.
가장 적게 사용되는 이유로는, 여타 argument들과 같이 default값이 존재하기 때문으로, 본인이 학습 또는 예측의 속도에 대해 크게 신경쓰지 않으면 딱히 건들 이유가 없기 때문이기도 하다.
다음은 Model의 method 중 batch_size를 argument로 가지고 있는 method들 이다:
Model.fitModel.evaluateModel.predict
generator를 사용하지 않는다면 학습, 검증 그리고 예측에 당연히 들어가는 method 들이므로 한번쯤 사용해 봤을 것이다. 해당 argument들은 모두 기본값을 32로 가지고 있다.
batch_size: Integer or
None. Number of samples per step. If unspecified,batch_sizewill default to 32.