분산 학습 성능 디버깅 - GPU·네트워크·스토리지 병목 찾기
· 15 min read
해당 포스팅은 현재 재직중인 회사에 관련이 없고, 개인 역량 개발을 위한 스터디 자료로 활용할 예정입니다.
앞의 세 편에서 분산 학습의 두 인프라 병목을 다뤘다. 네트워크(EFA)로 노드 간 통신을 빠르게 하고 스토리지(FSx/EFS/S3)로 데이터 공급을 풀었다. 그런데 막상 학습을 돌리면 이런 상황을 마주한다.
"GPU를 여러 장 붙였는데 왜 기대만큼 안 빨라지지?"
분산 학습에서 성능이 안 나오는 이유는 대부분 한 곳의 병목이다. 문제는 그 한 곳이 컴퓨트(GPU)인지 통신(네트워크·NCCL)인지 데이터(스토리지·로더)인지 눈에 잘 안 보인다는 것. 이 글에서는 그 범인을 가려내는 관측·프로파일링 방법을 다룬다.