탄력적 분산 훈련(Elastic Distributed Training)은 AI 모델 훈련에서 효율성과 유연성을 높이기 위해 사용되는 기술입니다. 간단히 말해, 모델 훈련이 단일 머신이나 고정된 수의 컨테이너에 국한되지 않고 수요에 따라 가용한 컴퓨팅 자원을 동적으로 조정하고 활용할 수 있게 합니다.

인피니틱스는 탄력적 분산 훈련을 AI-Stack에 원활하게 통합하여 Horovod, DeepSpeed, Megatron-LM, Slurm 등 주요 프레임워크를 지원함으로써 기업의 자원 스케줄링 병목 현상을 효과적으로 해소하고 대규모 AI 모델 훈련을 가속합니다.

본 글에서는 AI-Stack에서 Horovod를 활용해 탄력적 분산 훈련을 수행하는 방법을 단계별로 시연해 드리겠습니다!

Horovod와 DeepSpeed의 운영 단계가 유사하므로, 본 글에서는 Horovod를 예시로 사용합니다. 주의할 점은 사용 전 【공용 이미지 목록】에 DeepSpeed 및 Horovod 프레임워크 실행에 적합한 이미지가 준비되어 있는지 확인해야 한다는 것입니다.

Horovod 분산 훈련

먼저, AI-Stack 사용자 인터페이스에 로그인한 후 ‘컨테이너 관리’로 이동하여 ‘분산 훈련 클러스터’를 선택합니다. 그런 다음 ‘클러스터 생성’ 버튼을 클릭합니다.

생성 페이지에서 Horovod를 선택하고 클러스터 이름을 입력합니다. 여기서는 데모를 위해 tthvd를 입력합니다.

다음으로 원하는 컨테이너 수를 설정합니다. 여기서는 먼저 2개를 입력하고 필요한 이미지를 선택할 것입니다. 여기서 두 가지 사항에 유의해야 합니다:

  • 컨테이너 수는 2개 이상이어야 하며, 여기에는 런처 컨테이너 1개와 나머지 워커 컨테이너가 포함됩니다.
  • 클러스터 유형에 따라 훈련 프레임워크가 포함된 이미지를 선택해야 합니다.

다음으로 「GPU 활성화」를 선택하면 각 컨테이너에 지정된 GPU 사양을 선택할 수 있습니다. 여기서는 각 컨테이너에 NVIDIA-P4 GPU 1개를 할당하는 리소스를 선택합니다. 또한 공유 메모리 활성화 여부를 선택하고 필요한 용량을 입력할 수도 있습니다.

다음으로 마운트할 저장 장치를 선택합니다.

1~2분 정도 기다리면 두 개의 컨테이너가 생성되어 “Running” 상태로 표시되며, 각각 NVIDIA-P4 GPU 리소스를 하나씩 할당받게 됩니다.

클러스터 준비가 완료되면 서비스에서 SSH 또는 더 편리한 JupyterLab 방식으로 연결할 수 있습니다. 여기서는 더 간단한 JupyterLab을 선택합니다.

JupyterLab에서 터미널을 선택합니다(SSH 연결과 동일한 의미).

홈으로 돌아가면 외부 스토리지 클러스터에서 마운트한 디스크 영역을 확인할 수 있습니다. 우리는 미리 horovod 테스트 프로그램을 설치해 두었으므로, 이를 직접 실행하여 사용하는 방법을 시연할 수 있습니다.

다음으로, 훈련 스크립트를 실행하기 위한 명령어를 입력합니다.

horovodrun -np 2 –hostfile /etc/mpi/hostfile python tensorflow2_mist.py

  • -np 2: –num-processes의 약자로, 실행할 Python 프로세스 수를 지정합니다. 여기서 2를 입력하면 두 개의 컨테이너 리소스를 활용해 분산 컴퓨팅을 수행합니다.
  • –hostfile /etc/mpi/hostfile: hostfile은 이 분산 클러스터에서 사용 가능한 컨테이너와 각 컨테이너의 GPU 카드 수를 설명합니다. AI-Stack이 자동으로 생성 및 유지 관리하는 파일입니다. –hostfile 매개변수는 horovod가 hostfile 파일을 읽을 위치를 알려주어, horovod가 파일 내 설명에 따라 GPU 리소스를 호출할 수 있게 합니다.
  • python tensorflow2_mnist.py는 실행할 스크립트입니다.

우리의 훈련 스크립트에는 총 만 개의 데이터가 있으며, 이 데이터는 2개의 컨테이너에 분배되었습니다. 한 컨테이너에는 5천 개의 데이터가 할당되어 훈련을 수행하고 있음을 확인할 수 있습니다.