distributed-machine-learning

1 개의 포스트

discord

단일 노드에서 멀티 GPU (새 탭에서 열림)

Discord는 ML 모델과 데이터 규모가 커지면서 단일 머신으로는 학습·추론을 감당하기 어려워지자 Ray 기반의 분산 컴퓨팅 플랫폼을 구축했다. 핵심은 Ray 자체보다 CLI, Dagster·KubeRay 오케스트레이션, X-Ray 관측성 도구를 결합해 분산 ML의 사용성을 높인 데 있다. 그 결과 엔지니어들은 복잡한 Kubernetes·GPU 설정 없이 멀티 GPU 작업을 실행할 수 있었고, Ads Ranking 모델은 매일 재학습되는 프로덕션 딥러닝 파이프라인으로 발전했다. ## 단일 노드 ML의 확장 한계 - 모델이 단순 분류기에서 대규모 모델로 발전하고 데이터셋도 커지면서 단일 머신에 담기 어려운 작업이 늘어났다. - 일부 학습 작업은 여러 GPU를 필요로 했고, 기존 인프라보다 빠른 연산 능력과 분산 학습이 요구됐다. - Discord는 오픈소스 분산 컴퓨팅 프레임워크인 **Ray**를 기반으로 선택했지만, 프레임워크만 도입해서는 충분하지 않다고 판단했다. - 실제 목표는 분산 ML을 소수의 인프라 전문가가 아니라 일반 ML 엔지니어도 쉽게 사용할 수 있게 만드는 것이었다. ## 수작업 Ray 클러스터의 문제 - 초기에는 엔지니어들이 오픈소스 문서를 참고해 각자 Ray 클러스터를 직접 구성했다. - 팀마다 클러스터 설정과 리소스 관리 방식이 달라 표준화가 어려웠다. - 작업 스케줄링, 모니터링, 클러스터 운영을 위한 공통 기능도 부족했다. - 결국 각 팀이 동일한 인프라 문제를 반복해서 해결하고 있었고, Discord 내부에 Ray 플랫폼이 필요해졌다. ## YAML 대신 단일 CLI 명령 - Discord는 GPU 종류, 워커 수, 메모리 등 필요한 리소스를 인자로 받는 **매개변수화된 단일 템플릿**을 만들었다. - CLI가 실행 시점에 전체 Kubernetes 클러스터 사양과 보안 설정을 생성하도록 했다. - 엔지니어는 복잡한 YAML 파일을 직접 작성하지 않고 자신의 요구에 맞는 멀티 GPU 클러스터를 한 번의 명령으로 생성할 수 있다. - CLI는 클러스터 생성부터 작업 실행, 삭제까지 전체 생명주기를 관리한다. - 이를 통해 다음 효과를 얻었다. - 팀 간 클러스터 설정의 일관성 확보 - 하드웨어 역량에 맞는 리소스 요청 - YAML 디버깅 부담 감소 - 엔지니어별 맞춤형 클러스터 제공 ## Dagster·KubeRay·Ray 기반 오케스트레이션 Discord는 일회성 실험을 정기적이고 재현 가능한 작업으로 전환하기 위해 세 가지 도구를 결합했다. - **Dagster** - 워크플로, 설정, 의존성을 정의한다. - 모델명, 데이터셋 기간, GPU 풀 등의 구조화된 설정을 사용한다. - 스키마 검증과 기본값을 제공해 필수 파라미터 누락으로 인한 실패를 줄인다. - UI 또는 예약 실행을 통해 학습 파이프라인을 시작할 수 있다. - **KubeRay** - Kubernetes에서 Ray 클러스터를 동적으로 생성한다. - 적절한 네임스페이스, 서비스 계정, GPU 노드 풀을 연결한다. - CLI와 동일한 내부 설정 로직을 사용한다. - **Ray** - 생성된 클러스터에서 학습, 평가, 배치 추론 작업을 여러 GPU에 분산 실행한다. 작업 흐름은 다음과 같다. 1. 엔지니어가 Dagster에서 파이프라인을 실행하거나 예약한다. 2. Dagster가 Ray Job Operator에 작업 사양을 전달한다. 3. KubeRay가 적절한 Kubernetes 환경에 Ray 클러스터를 생성한다. 4. Ray가 여러 GPU에 학습 작업을 분배한다. 5. 로그와 메트릭이 Dagster 및 모니터링 시스템으로 전달된다. 이 구조는 버전 관리된 설정을 통한 **예측 가능성**, 파이프라인과 인프라 리소스를 함께 정의하는 **재현성**, SSH 없이 로그와 클러스터 상태를 확인하는 **가시성**을 제공한다. 대표적으로 GPU 사용량이 큰 광고 관련성 모델은 엔지니어가 클러스터 설정을 직접 수정하지 않아도 매일 학습할 수 있게 됐다. ## X-Ray를 통한 통합 관측성 - Ray 사용량이 늘면서 여러 클러스터의 상태를 한곳에서 확인할 필요가 생겼다. - Discord는 **X-Ray**라는 중앙 웹 UI를 구축했다. - X-Ray에서 다음 정보를 실시간으로 확인할 수 있다. - 실행 중인 Ray 클러스터 - 클러스터 소유자 - 머신 및 GPU 종류 - 클러스터 상태 - 관련 대시보드 - 엔지니어는 X-Ray에서 실험용 인터랙티브 노트북도 시작할 수 있어 운영과 실험 환경을 한 인터페이스에서 관리할 수 있다. ## Ads Ranking의 프로덕션 성과 - Ads Ranking은 사용자가 어떤 Quest 광고에 관심을 가질지 결정하는 모델이다. - 도입 전에는 주로 XGBoost를 사용했으며, 기존 인프라에는 다음 기능이 없었다. - 데이터 및 모델 샤딩 - 멀티 GPU 학습 - 필요한 주기의 대규모 재학습 - Ray 도입 후 Ads Ranking은 샤딩된 신경망을 멀티 GPU 클러스터에서 학습하게 됐다. - 성과는 다음과 같다. - Quest 참여 사용자 수 2배 증가 - 광고 트래픽 적용 범위가 약 40%에서 거의 100%로 확대 - 매일 재학습하고 새 버전을 지속적으로 배포하는 프로덕션 딥러닝 파이프라인 구축 - 비즈니스 지표 약 200% 개선 ## 실용적인 시사점 분산 ML 도입에서는 Ray 같은 실행 엔진만 선택하는 것보다, 표준화된 CLI, 선언적 오케스트레이션, 자동화된 클러스터 프로비저닝, 통합 관측성을 함께 제공하는 것이 중요하다. 특히 엔지니어가 인프라 세부사항 대신 모델과 데이터 문제에 집중하도록 만드는 개발자 경험이 분산 시스템의 실제 채택과 운영 성과를 좌우한다.