AI를 위한 Ray 클러스터: 분산 컴퓨팅 아키텍처

AI를 위한 Ray 클러스터: 분산 컴퓨팅 아키텍처

AI를 위한 Ray 클러스터: 분산 컴퓨팅 아키텍처

2025년 12월 11일 업데이트

2025년 12월 업데이트: OpenAI가 ChatGPT 훈련 조율에 Ray를 사용. Ray가 PyTorch Foundation에 합류하며 엔터프라이즈 도입 검증. 노트북에서 수천 대의 GPU까지 확장 가능한 프레임워크. 밀리초 이하의 지연 시간으로 초당 수백만 개의 작업 처리—AI 패턴에서 Spark보다 한 자릿수 빠름. CPU/GPU 워크로드 혼합을 지원하는 네이티브 이기종 컴퓨팅.

OpenAI는 ChatGPT 및 기타 모델의 훈련을 조율하기 위해 Ray를 사용합니다.¹ 이 프레임워크는 노트북에서 수천 대의 GPU 클러스터까지 확장되며, 그렇지 않으면 모든 프로젝트에 맞춤형 인프라가 필요한 분산 컴퓨팅의 복잡성을 처리합니다. Ray의 도입은 2025년까지 급격히 증가했으며, 프레임워크가 PyTorch Foundation에 합류하고 Anyscale이 엔터프라이즈 배포를 지원하기 위해 자본을 조달하면서 검증되었습니다.² Ray의 아키텍처와 배포 패턴을 이해하면 조직이 실험에서 프로덕션까지 확장 가능한 분산 AI 인프라를 구축하는 데 도움이 됩니다.

Ray는 훈련, 튜닝, 추론, 데이터 처리 등 분산 AI 워크로드를 위한 통합 프레임워크를 제공하며, 리소스 할당에 대한 세밀한 제어를 유지하면서 클러스터 관리의 복잡성을 추상화합니다. 단일 GPU 실험을 넘어 다중 노드 프로덕션 시스템으로 이동하는 조직에게 Ray는 확장 가능한 AI 인프라로 가는 가장 직접적인 경로를 제공합니다.

AI 인프라에 Ray를 사용하는 이유

Ray는 Apache Spark와 같은 전통적인 프레임워크가 제대로 처리하지 못하는 분산 AI 워크로드의 특정 과제를 해결하기 위해 UC Berkeley의 RISELab에서 탄생했습니다:

AI 워크로드 요구사항

이기종 컴퓨팅: AI 파이프라인은 CPU 집약적인 데이터 처리와 GPU 가속 훈련 및 추론을 혼합합니다. Ray는 워크로드 요구에 따라 CPU와 GPU 전반에 걸쳐 작업을 스케줄링하는 이기종 리소스 할당을 기본적으로 지원합니다.³

세밀한 병렬성: 딥러닝 훈련은 워커 간 그래디언트 조율, 모델 상태 관리, 장애의 우아한 처리가 필요합니다. Ray의 태스크와 액터 추상화는 이러한 패턴에 필요한 프리미티브를 제공합니다.

상태 유지 계산: MapReduce 스타일 프레임워크와 달리 AI 워크로드는 종종 반복 간에 상태를 유지합니다. Ray 액터는 호출 간 상태를 지속하여 파라미터 서버 및 강화학습 에이전트와 같은 패턴을 지원합니다.

낮은 지연 시간: 실시간 추론과 하이퍼파라미터 검색은 마이크로초 단위의 작업 스케줄링이 필요합니다. Ray는 밀리초 이하의 지연 시간으로 초당 수백만 개의 작업을 처리합니다—이러한 패턴에서 Spark보다 한 자릿수 빠릅니다.⁴

대안과의 비교

Apache Spark: SQL과 DataFrame을 사용한 배치 데이터 처리에 최적화되어 있습니다. ETL, 피처 엔지니어링, 구조화된 데이터 분석에 뛰어납니다. GPU 워크로드, 상태 유지 계산, 낮은 지연 시간 요구사항에는 덜 적합합니다.⁵

Dask: DataFrame 및 배열 API가 있는 Python 네이티브 분산 컴퓨팅. Spark보다 가볍지만 Ray의 액터 모델과 ML 전용 라이브러리가 부족합니다.

Horovod: 분산 딥러닝 훈련에 특화되어 있습니다. 다양한 AI 워크로드에는 Ray보다 유연성이 떨어지지만 순수 훈련 시나리오에는 더 간단합니다.

Ray의 장점: 단일 프레임워크가 데이터 처리, 훈련, 하이퍼파라미터 튜닝, 추론 서빙을 처리합니다. 팀은 여러 시스템과 그 사이의 통합 복잡성 관리를 피할 수 있습니다.

프로덕션 도입

주요 조직들이 프로덕션에서 Ray를 운영합니다:⁶

  • OpenAI: ChatGPT 훈련 조율
  • Uber: 분산 ML 플랫폼
  • Instacart: ML 인프라 백본
  • Shopify: 프로덕션 ML 워크로드
  • Ant Group: 대규모 금융 ML

Ray 클러스터는 공식적으로 최대 2,000개의 노드를 지원하여 프론티어 모델 훈련과 대용량 추론에 필요한 규모를 가능하게 합니다.

Ray 아키텍처

핵심 추상화

Ray는 분산 계산을 위한 두 가지 기본 추상화를 제공합니다:

태스크: 원격으로 실행되는 상태 비저장 함수. Ray는 사용 가능한 워커 전반에 걸쳐 자동으로 작업을 스케줄링하고, 장애를 처리하며, 결과를 반환합니다.

import ray

ray.init()

@ray.remote
def process_batch(data):
    # 사용 가능한 모든 워커에서 실행
    return transform(data)

# 병렬 실행
futures = [process_batch.remote(batch) for batch in batches]
results = ray.get(futures)

액터: 클러스터 전체에 분산된 상태 유지 객체. 각 액터는 메서드 호출 사이에 상태를 유지하여 모델 서빙, 파라미터 서버, 게임 환경과 같은 패턴을 가능하게 합니다.

@ray.remote
class ModelServer:
    def __init__(self, model_path):
        self.model = load_model(model_path)

    def predict(self, input_data):
        return self.model(input_data)

# 액터 인스턴스 생성
server = ModelServer.remote("model.pt")
# 원격으로 메서드 호출
prediction = ray.get(server.predict.remote(data))

클러스터 아키텍처

Ray 클러스터는 헤드 노드와 워커 노드로 구성됩니다:

헤드 노드: 클러스터 상태를 관리하는 Global Control Store(GCS), 데이터 위치를 추적하는 객체 디렉토리, 작업 배치를 조율하는 스케줄러를 실행합니다.

워커 노드: 태스크와 액터를 실행합니다. 각 워커는 로컬 스케줄링과 객체 관리를 처리하는 Raylet 데몬을 실행합니다.

객체 스토어: 분산 공유 메모리로 동일 노드의 태스크 간 제로 카피 데이터 전달과 노드 간 효율적인 직렬화를 가능하게 합니다.

리소스 관리

Ray는 이기종 리소스를 명시적으로 관리합니다:

@ray.remote(num_cpus=4, num_gpus=1)
def train_step(model, data):
    # 4개의 CPU와 1개의 GPU 보장
    return model.train(data)

커스텀 리소스로 세밀한 스케줄링이 가능합니다:

# 특정 하드웨어 요청
@ray.remote(resources={"TPU": 1})
def tpu_inference(data):
    return run_on_tpu(data)

Ray AI 라이브러리

Ray는 일반적인 AI 워크로드를 위한 목적별 라이브러리를 포함합니다:

Ray Train

PyTorch, TensorFlow 및 기타 프레임워크를 지원하는 분산 훈련 추상화:

from ray.train.torch import TorchTrainer
from ray.train import ScalingConfig

def train_func():
    # 표준 PyTorch 훈련 코드
    model = MyModel()
    for epoch in range(10):
        train_epoch(model)

trainer = TorchTrainer(
    train_loop_per_worker=train_func,
    scaling_config=ScalingConfig(
        num_workers=8,
        use_gpu=True
    ),
)
result = trainer.fit()

주요 기능:⁷ - 2줄의 코드 변경으로 단일 GPU에서 다중 노드 클러스터로 확장 - 자동 분산 데이터 로딩 및 그래디언트 동기화 - 체크포인트 관리 및 장애 복구 - PyTorch Lightning, Hugging Face Transformers, DeepSpeed와의 통합

Ray Tune

분산 하이퍼파라미터 최적화:

from ray import tune
from ray.tune.schedulers import ASHAScheduler

def training_function(config):
    model = build_model(config["learning_rate"], config["batch_size"])
    for epoch in range(100):
        loss = train_epoch(model)
        tune.report(loss=loss)

analysis = tune.run(
    training_function,
    config={
        "learning_rate": tune.loguniform(1e-4, 1e-1),
        "batch_size": tune.choice([32, 64, 128])
    },
    scheduler=ASHAScheduler(metric="loss", mode="min"),
    num_samples=100,
)

Ray Tune이 제공하는 기능: - 클러스터 전체에서 병렬 트라이얼 실행 - ASHA, Population-Based Training 및 기타 스케줄러를 통한 조기 중단 - Optuna, HyperOpt 및 기타 최적화 라이브러리와의 통합 - 체크포인팅 및 재개

Ray Serve

오토스케일링이 있는 프로덕션 모델 서빙:

from ray import serve

@serve.deployment(num_replicas=2, ray_actor_options={"num_gpus": 1})
class LLMDeployment:
    def __init__(self):
        self.model = load_llm()

    async def __call__(self, request):
        prompt = await request.json()
        return self.model.generate(prompt["text"])

serve.run(LLMDeployment.bind())

Ray Serve 기능:⁸ - 요청 속도 기반 오토스케일링 - 무중단 배포 - 다중 모델 구성 및 요청 라우팅 - LLM 서빙을 위한 OpenAI 호환 API - 접두사 인식 라우팅으로 첫 토큰까지 시간 60% 감소⁹

Ray Data

분산 데이터 로딩 및 전처리:

import ray

ds = ray.data.read_parquet("s3://bucket/data/")
ds = ds.map(preprocess)
ds = ds.filter(lambda x: x["label"] > 0)

# PyTorch DataLoader로 변환
train_loader = ds.iter_torch_batches(batch_size=32)

Ray Data가 제공하는 기능: - 대규모 데이터셋을 위한 스트리밍 실행 - GPU 가속 전처리 - 분산 훈련을 위한 Ray Train과의 통합 - 이미지, 텍스트, 테이블 데이터의 네이티브 지원

KubeRay를 사용한 Kubernetes 배포

프로덕션 Ray 배포는 일반적으로 공식 Kubernetes 오퍼레이터인 KubeRay를 사용하여 Kubernetes에서 실행됩니다:¹⁰

KubeRay 컴포넌트

RayCluster CRD: 헤드 및 워커 노드 사양, 오토스케일링 정책, 리소스 요구사항을 포함한 클러스터 구성을 정의합니다.

apiVersion: ray.io/v1
kind: RayCluster
metadata:
  name: ml-cluster
spec:
  headGroupSpec:
    rayStartParams:
      dashboard-host: '0.0.0.0'
    template:
      spec:
        containers:
        - name: ray-head
          image: rayproject/ray:2.52.0-py310-gpu
          resources:
            limits:
              nvidia.com/gpu: 1
  workerGroupSpecs:
  - replicas: 4
    minReplicas: 2
    maxReplicas: 10
    groupName: gpu-workers
    rayStartParams: {}
    template:
      spec:
        containers:
        - name: ray-worker
          image: rayproject/ray:2.52.0-py310-gpu
          resources:
            limits:
              nvidia.com/gpu: 1

RayJob CRD: 자동으로 프로비저닝된 클러스터에 작업을 제출합니다. KubeRay는 클러스터를 생성하고, 작업을 실행하며, 완료 시 선택적으로 클러스터를 삭제합니다.

RayService CRD: 무중단 업그레이드와 헬스 체크가 있는 관리형 Ray Serve 배포.

프로덕션 모범 사례

컨테이너 이미지: 런타임에 설치하는 대신 게시된 Docker 이미지에 의존성을 포함시킵니다. 이렇게 하면 재현성이 보장되고 시작이 빨라집니다.¹¹

오토스케일링: Ray 오토스케일링(클러스터 내 워커 확장)과 Kubernetes 오토스케일링(클러스터 노드 확장) 모두 활성화합니다:

spec:
  enableInTreeAutoscaling: true
  autoscalerOptions:
    upscalingMode: Default
    idleTimeoutSeconds: 60

스토리지: 체크포인트에는 영구 볼륨을 사용하고 대규모 데이터셋에는 공유 스토리지를 사용합니다:

volumes:
- name: shared-storage
  persistentVolumeClaim:
    claimName: ml-data-pvc

모니터링: 관찰 가능성을 위해 Prometheus 및 Grafana와 통합합니다:

metadata:
  annotations:
    prometheus.io/scrape: "true"
    prometheus.io/port: "8080"

클라우드별 배포

GKE: Ray on GKE 애드온은 자동 프로비저닝과 Google Cloud 서비스 통합이 있는 관리형 Ray 클러스터를 제공합니다.¹²

EKS: 노드 스케일링을 위해 Cluster Autoscaler 또는 Karpenter와 함께 KubeRay를 배포합니다. FSx for Lustre와의 통합은 고성능 공유 스토리지를 제공합니다.

AKS: Microsoft와 Anyscale은 Azure Portal에서 접근 가능한 퍼스트 파티 서비스로 Anyscale on Azure를 제공합니다.¹³

Anyscale 관리형 Ray

Ray 창시자들이 설립한 회사인 Anyscale은 관리형 Ray 배포를 제공합니다:

Anyscale 플랫폼

관리형 클러스터: 인프라 관리 없이 자동 스케일링, 장애 허용, 모니터링이 있는 프로덕션급 Ray 클러스터.

RayTurbo 런타임: 오픈소스 Ray 대비 더 높은 복원력, 더 빠른 성능, 더 낮은 비용을 제공하는 독점 성능 개선.¹⁴

엔터프라이즈 기능: 역할 기반 액세스 제어, 감사 로깅, VPC 피어링, 컴플라이언스 인증.

클라우드 파트너십

CoreWeave: Anyscale BYOC(Bring Your Own Cloud)는 CoreWeave Kubernetes Service를 통해 CoreWeave 고객 계정에 직접 배포됩니다.¹⁵

Azure: Azure Portal에서 네이티브 통합과 함께 사용 가능한 퍼스트 파티 Anyscale 서비스.

AWS: Anyscale은 기존 AWS 서비스와의 통합과 함께 AWS에서 운영됩니다.

Anyscale 사용 시기

**Anyscale 고려

Request a Quote_

Tell us about your project and we'll respond within 72 hours.

> TRANSMISSION_COMPLETE

Request Received_

Thank you for your inquiry. Our team will review your request and respond within 72 hours.

QUEUED FOR PROCESSING