까먹으면 적어두자

Keras에서 GPU 제대로 쓰기 본문

인공지능

Keras에서 GPU 제대로 쓰기

whiteglass 2021. 4. 6. 15:39

문제

GPU를 사용하는 학습에서 GPU usage가 70%를 찍었다가 다시 낮아지는 과정을 반복함.

= GPU를 제대로 활용하지 않고 사이에 간격이 있다.

= GPU가 노는 시간이 있다.

원인

flow_from_directory 등을 통해 데이터를 불러오는 경우 불러와서 메모리에 저장하는 속도보다 gpu가 처리하는 속도가 빠름. 그 사이에 기다리는 시간이 발생

 

해결방법

fit_genfit_generator 에서 workers 와 use_multiprocessing를 변경

예시)

model.fit_generator(training_set,
                         epochs = nepoch,
                         steps_per_epoch=len(training_set),
                         validation_data = test_set,
                         validation_steps = 10,
                         callbacks=[model_checkpoint,tb,change_lr],
                         use_multiprocessing=True,
                         workers=6
                         )

이러면 멀티 프로세싱으로 메모리에 계속 batch를 올려서 gpu가 놀지 않고 계속 80% 이상을 유지함.

 

주의할점

generator를 사용하는 학습에서는 작동하지만 thread safe하게 만드는 처리가 필요하다.

keras.utils.Sequence를 상속받아서 처리해야 안전한다.

 

keras 내장 generator는 안전한가

keras의 ImageDataGenerator 를 generator로 쓸 때, 다른 처리없이 그냥 써도 되는가?

keras 내부코드에서 Sequence를 할당받는 것을 확인했다.

거기에 실제로 불러온 파일 목록을 봤을 때, 프로세스간에 겹치거나 하는 일 없이 잘 불러오는 것을 확인했다.

 

윈도우즈에서는 불가능

윈도우즈에서는 멀티스레드가 애러가 발생하여 리눅스에서만 사용가능.

반응형

'인공지능' 카테고리의 다른 글

nan 혹은 말도 안되는 loss  (0) 2021.04.06
PyTorch 모델과 state_dict - 1  (0) 2021.04.06
우분투에서 Cuda 버전 다운그레이드  (1) 2021.03.26
Comments