본문으로 건너뛰기

EKS에서의 Slurm

경고

EKS에서 ML 모델을 배포하려면 GPU 또는 Neuron 인스턴스에 대한 접근 권한이 필요합니다. 배포가 작동하지 않는 경우 이러한 리소스에 대한 접근 권한이 없기 때문인 경우가 많습니다. 또한 일부 배포 패턴은 Karpenter 자동 스케일링과 정적 노드 그룹에 의존합니다. 노드가 초기화되지 않으면 Karpenter 또는 노드 그룹의 로그를 확인하여 문제를 해결하세요.

Slurm이란?

Slurm은 모든 규모의 컴퓨트 클러스터에서 컴퓨팅 리소스를 관리하기 위해 설계된 오픈소스의 고도로 확장 가능한 워크로드 관리자 및 작업 스케줄러입니다. 세 가지 핵심 기능을 제공합니다: 컴퓨팅 리소스에 대한 접근 할당, 병렬 컴퓨팅 작업을 시작하고 모니터링하기 위한 프레임워크 제공, 리소스 경합을 해결하기 위한 대기 중인 작업의 큐 관리.

Slurm은 AI 훈련에서 고성능 컴퓨팅 클러스터 전체에 걸쳐 대규모 GPU 가속 워크로드를 관리하고 스케줄링하는 데 널리 사용됩니다. 연구자와 엔지니어가 CPU, GPU, 메모리를 포함한 컴퓨팅 리소스를 효율적으로 할당할 수 있게 하며, 리소스 유형과 작업 우선순위에 대한 세밀한 제어로 여러 노드에 걸쳐 딥러닝 모델과 대규모 언어 모델의 분산 훈련을 가능하게 합니다. Slurm의 안정성, 고급 스케줄링 기능, 온프레미스 및 클라우드 환경과의 통합은 현대 AI 연구 및 산업이 요구하는 규모, 처리량, 재현성을 처리하는 데 선호되는 선택이 됩니다.

Slinky 프로젝트란?

Slinky 프로젝트는 Slurm의 주요 개발사인 SchedMD가 설계한 오픈소스 통합 도구 모음으로, Slurm 기능을 Kubernetes에 도입하여 효율적인 리소스 관리와 스케줄링을 위한 두 세계의 장점을 결합합니다. Slinky 프로젝트에는 Slurm 클러스터용 Kubernetes 오퍼레이터가 포함되어 있으며, Kubernetes 환경 내에서 배포된 Slurm Cluster 및 NodeSet 리소스의 수명 주기를 관리하기 위한 커스텀 컨트롤러커스텀 리소스 정의(CRD)를 구현합니다.

이 Slurm 클러스터에는 다음 구성 요소가 포함됩니다:

구성 요소설명
Controller (slurmctld)리소스를 모니터링하고, 작업을 수락하며, 컴퓨트 노드에 작업을 할당하는 중앙 관리 데몬입니다.
Accounting (slurmdbd)MariaDB 데이터베이스 백엔드를 통해 작업 회계 및 사용자/프로젝트 관리를 처리합니다.
Compute (slurmd)작업을 실행하는 워커 노드로, 다른 파티션으로 그룹화할 수 있는 NodeSet으로 구성됩니다.
Login사용자가 Slurm 클러스터와 상호 작용하고 작업을 제출할 수 있도록 SSH 접근 지점을 제공합니다.
REST API (slurmrestd)클러스터와의 프로그래밍 방식 상호 작용을 위해 Slurm 기능에 대한 HTTP 기반 API 접근을 제공합니다.
Authentication (sackd)Slurm 서비스에 대한 안전한 접근을 위한 자격 증명 인증을 관리합니다.
MariaDB작업, 사용자 및 프로젝트 정보를 저장하기 위해 accounting 서비스에서 사용하는 데이터베이스 백엔드입니다.
Prometheus Service Monitor모니터링 목적으로 스케줄러, 파티션, 노드 및 작업 엔드포인트에서 메트릭을 수집하도록 컨트롤러 내에 구성됩니다.

Amazon EKS와 결합하면 Slinky 프로젝트는 Kubernetes에서 인프라 관리를 표준화한 기업이 ML 과학자들에게 Slurm 기반 경험을 제공할 수 있도록 합니다. 또한 동일한 가속 노드 클러스터에서 훈련, 실험 및 추론이 이루어질 수 있게 합니다.

EKS에서의 Slurm 아키텍처

alt text

위 다이어그램은 이 가이드에 설명된 EKS에서의 Slurm 배포를 보여줍니다. Amazon EKS 클러스터가 오케스트레이션 레이어 역할을 하며, 핵심 Slurm Cluster 구성 요소는 m6i.xlarge 인스턴스의 관리형 노드 그룹에서 호스팅되고, Karpenter NodePool은 slurmd 파드가 실행될 GPU 가속 컴퓨트 노드의 배포를 관리합니다. Slinky Slurm 오퍼레이터와 Slurm 클러스터는 ArgoCD 애플리케이션으로 자동 배포됩니다.

로그인 LoadBalancer 타입 서비스는 AWS Load Balancer Controller를 사용하여 AWS Network Load Balancer를 동적으로 생성하도록 어노테이션되어 있어, ML 과학자들이 kubectl을 통해 Kubernetes API 서버와 인터페이스하지 않고도 로그인 파드에 SSH로 접속할 수 있습니다.

로그인 및 slurmd 파드에는 Amazon FSx for Lustre 공유 파일 시스템도 마운트되어 있습니다. 컨테이너화된 slurmd 파드를 사용하면 전통적으로 Conda나 Python 가상 환경을 사용하여 수동으로 설치했던 많은 종속성을 컨테이너 이미지에 포함할 수 있지만, 공유 파일 시스템은 훈련 아티팩트, 데이터, 로그 및 체크포인트 저장에 여전히 유용합니다.

주요 기능 및 이점

  • 동일한 인프라에서 Slurm 워크로드와 컨테이너화된 Kubernetes 애플리케이션을 나란히 실행합니다. Slurm과 Kubernetes 워크로드 모두 동일한 노드 풀에서 스케줄링되어 활용도를 높이고 리소스 단편화를 방지합니다.
  • 양쪽 에코시스템의 익숙한 도구를 활용하여 Slurm 작업과 Kubernetes 파드를 원활하게 관리하면서 제어나 성능을 희생하지 않습니다.
  • 워크로드 수요에 따라 컴퓨트 노드를 동적으로 추가하거나 제거하여 할당된 리소스를 효율적으로 자동 스케일링하고, 수요의 급증과 감소를 처리하여 인프라 비용과 유휴 리소스 낭비를 줄입니다.
  • Kubernetes 오케스트레이션을 통한 고가용성. 컨트롤러나 워커 파드가 실패하면 Kubernetes가 자동으로 다시 시작하여 수동 개입을 줄입니다.
  • Slurm의 정교한 스케줄링 기능(공정 공유 할당, 종속성 관리, 우선순위 스케줄링)이 Kubernetes에 통합되어 컴퓨트 활용률을 극대화하고 워크로드 요구사항에 맞춰 리소스를 조정합니다.
  • Slurm과 그 종속성이 컨테이너로 배포되어 환경 전반에 걸쳐 일관된 배포를 보장합니다. 이는 구성 드리프트를 줄이고 개발에서 프로덕션으로의 전환을 간소화합니다.
  • 사용자는 특수한 요구사항(예: 커스텀 종속성, 라이브러리)에 맞춤화된 Slurm 이미지를 빌드하여 과학적 또는 규제 환경에서 일관성과 재현성을 촉진할 수 있습니다.
  • 관리자는 Kubernetes Custom Resources를 사용하여 커스텀 Slurm 클러스터와 노드 세트를 직접 정의할 수 있으며, 다른 유형의 작업(예: 안정적 vs 기회주의적/백필 파티션)을 위해 컴퓨트 노드를 파티셔닝할 수 있습니다.
  • Slinky는 Slurm과 Kubernetes 모두를 위한 모니터링 스택과 통합되어 관리자와 사용자에게 강력한 메트릭과 시각화를 제공합니다.

솔루션 배포

👈

배포 확인

👈

FSDP 예제 실행

👈

CloudWatch Container Insights

👈

정리

👈