까먹으면 적어두자
Keras에서 GPU 제대로 쓰기 본문
문제
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