본문 바로가기

카테고리 없음

(자연어처리/ word RNN) CPU 점유율 높여 훈련 속도 올리기

<밑바닥부터 시작하는 딥러닝 2>의 6장의 훈련 코드가 무척이나 느리더라.

그 주범은 batch_size 가 달랑 20 정도로 할당되어 있더라.

 

리눅스에서는 top 명령으로, 윈도우10에서는 리소스 모니터로 CPU 점유율과 메모리 사용량을 확인할 수 있다.

필자가 주로 사용하는 인텔 10700k의 경우 8코어 16스레드라고 알고 있는데, top 명령으로 확인해보면 최고 CPU 점유율은 1600%더라. 8스레드 인텔 CPU의 경우는 800%였던 걸로 기억하고 있다.

 

 

batch_size 는 2의 배수로 할당하는 것이 좋다.

현재 6장의 train_better_rnnlm.py 를 실행시키고 있는데, batch_size 를 128로 하고 있다.

이때 CPU 점유율은 1200% 미만, 메모리 사용량은 23% 미만을 나타내고 있다.

 

batch_size를 20으로 하면, CPU 사용량이 너무 적어서 훈련 속도가 무척 느릴 것이다.

현재 1 에폭 훈련에 6분이 채 걸리지 않는데, 40 에폭 훈련하자면 6 * 40 = 240분 = 4시간이 걸린다. 물론 CPU만으로.

 

어떤 NLP 관련 훈련 코드를 돌릴 때였는데 데이터 사이즈는 크지 않은데 원핫 인코딩을 해서 엄청난 메모리를 소비하는 코드가 있었다. 메모리 점유율 66%를 넘더니 곧이어 프로그램이 죽어버렸다. 메모리 사용율은 가급적 40% 이내에서 관리하는 게 좋을  것 같다.(시스템에서 캐시, 스왑, 대기 메모리 등 여분 메모리를 사용하므로 여유가 있어야 한다.) 

 

아무튼 batch_size를 올려서 CPU를 혹사시켜 훈련 진행 속도를 빠르게 하는 게 한국인 기호에 맞을 것 같다. 빨리빨리~~!