sooftware / kospeech

Open-Source Toolkit for End-to-End Korean Automatic Speech Recognition leveraging PyTorch and Hydra.
https://sooftware.github.io/kospeech/
Apache License 2.0
605 stars 192 forks source link

Fix cpu training for conformer #139

Closed hwiorn closed 3 years ago

hwiorn commented 3 years ago

137 을 테스트하기 위해 conformer 모델을 CPU로 학습시, 에러가 발생하는 부분을 수정하였습니다.

CPU제한을 위해 num_threads를 추가하였습니다.

sooftware commented 3 years ago

@hwiorn configuration 중 num_workers라는 변수가 이미 있습니다. 추가해주신 변수와 동일한 변수여서 사용하시는 분들이 헷갈릴 것 같습니다.

hwiorn commented 3 years ago

@hwiorn configuration 중 num_workers라는 변수가 이미 있습니다. 추가해주신 변수와 동일한 변수여서 사용하시는 분들이 헷갈릴 것 같습니다.

그렇군요. num_workers가 기본 4로 세팅되어 있음에도 CPU 사용량이 많아, 시스템이 멈추더군요.(24 CPU입니다) 그래서, torch의 thread제한을 추가했었습니다. 이 num_threads 코드만 삭제하면 될까요?

sooftware commented 3 years ago

CPU 사용량이 많아 시스템이 멈추는건 처음보는 경우라 신기하네요. 해당 코드가 GPU에서도 작동하나요?

hwiorn commented 3 years ago

CPU 사용량이 많아 시스템이 멈추는건 처음보는 경우라 신기하네요.

정확히는 시스템이 아니라 X가 멈춰서, 전체 시스템이 멈춘다라고 하기는 뭐합니다만, 현상을 보면 터미널에서 작업해도 마찬가지일 것 같네요. bin/main.py가 OOM kill로 종료되면서, hang이 해제됩니다.(32GB 메모리입니다)

num_workers가 제한이 걸릴 것이라고 생각해서 옵션을 활용해봤으나, 모든 CPU를 다 활용하는 문제로, torch.num_threads를 추가했었고요.

해당 코드가 GPU에서도 작동하나요?

commit 을 보시면 아시겠지만, 기존 conformer model의 block 구성에 device를 세팅하지 않으셨기 때문에, CPU로 동작하지 않았습니다. device 옵션이 생략되었기 때문에, 기본 옵션이 cuda로 세팅되는데, 이 때 device들이 서로 달라 에러가 발생합니다. 그래서, 이 부분을 추가해서 맞춰준 것이고요.

이 PR은 (당연히) CUDA로 정상 동작하지만, CPU 학습시에 device 세팅을 맞춰준 것과 num_threads로 CPU사용 제한을 건 것이기 때문에, #137 이슈는 별개로 계속 발생합니다.