b__ono__ng

[AWS] EC2와 Studio의 학습 속도 차이 프로파일링 본문

IT/Experience

[AWS] EC2와 Studio의 학습 속도 차이 프로파일링

b__ono__ng 2023. 11. 22. 22:40

EC2 깡 인스턴스상에서 bash로 파이썬을 구동해 학습할 때

Studio(Jupyter Notebook) 상에서 학습할 때,

4배 이상의 학습 속도 차이를 보였다. Studio 환경이 EC2 환경보다 빨랐다.

같은 인스턴스(g4dn.12xlarge) 상에서 동일한 구성, 동일한 데이터셋으로 학습시켰는데 차이가 났다.

 

먼저 torch 연산 속도에 차이가 있나 해서 테스트해봤다. 랜덤 텐서를 할당해 연산하도록 구성했는데, 이 속도는 똑같이 나왔다.

 

그럼 데이터 I/O에서 병목이 있다는 건데, 이걸 확인하고자 yolo 컨트리뷰터인 동료분의 조언을 받아 아래 내용을 테스트해봤다.

인퍼런스에서 forward/backward/warmup/optimizing 등을 빼고 data loader 부분만을 테스트했을 때 4-GPU와 1-GPU 환경에서 학습 속도가 같은가?

테스트 결과, EC2 bash 환경에서는 속도가 올라갔지만 Studio 환경에서 동일한 속도를 보였다. 4-GPU를 쓰면 그만큼 학습 속도가 (비례하진 않더라도) 빨라져야 정상인데, CPU2GPU 과정에서 병목이 발생해서 올라가지 않는 것으로 보인다.

 

그럼 대체 왜? Studio 환경에서만 병목이 걸리는 것인가 궁금했다.

Jupyter Notebook의 문제인가 싶었는데, 두 환경 모두 데이터셋도 로컬에 있는 상황이라 그렇게 차이가 날 것 같진 않았다. 자세한 Jupyter Notebook의 동작 방식은 모르겠지만, 로컬에서 Jupyter 서버를 올리면 굳이 로컬의 데이터를 마운트 폴더에 복사하거나 하는 과정이 있을 것 같진 않으니까,,

 

확실한건 아니지만 추측하기로 EC2와 Studio의 머신 구성이 다른 것 같다. (뇌피셜이다.)

근거는, EC2에서는 YOLOv8 구동 시 1-GPU 인스턴스던 4-GPU 인스턴스던 네트워크 로그(NCCL)가 출력되지 않는데 Studio에서는 YOLOv8 구동 시 4-GPU 인스턴스에서만 네트워크 로그가 출력된다.

예상할 수 있는 바는, EC2는 정말 머신 하나에 GPU가 4장 들어있는 머신을 할당해주는 방식이고 Studio머신 하나에 GPU가 4장 미만으로 들어있는 머신을 엮어서 할당해주는 방식이 아닐까 싶다.

게이트웨이까지 데이터를 쏴주고 다시 localhost로 돌아와 뿌려주는 방식이다 보니, 이 과정에서 병목이 발생하는게 아닐까 하는 추측이다.

 

우리의 영원한 친구 chatGPT는 그런거 아니라고 하는데,,, 너가 뭘알아!