🤖 AI/ML

Ray

Ray

분산 ML 프레임워크. 병렬 학습, 하이퍼파라미터 튜닝.

📖 상세 설명

Ray는 분산 컴퓨팅을 위한 오픈소스 프레임워크로, 머신러닝 워크로드를 여러 머신에서 쉽게 병렬 실행할 수 있게 해줍니다. UC Berkeley의 RISELab에서 개발되었으며, Python 코드를 최소한의 수정만으로 분산 환경에서 실행할 수 있어 ML 엔지니어들에게 인기가 높습니다.

Ray는 2017년 UC Berkeley에서 시작되었고, 2019년 상용 서비스 Anyscale이 설립되었습니다. 기존 Spark, Dask 등 분산 프레임워크는 특정 워크로드에 최적화되어 있지만, Ray는 범용 분산 컴퓨팅을 목표로 하여 강화학습, 하이퍼파라미터 튜닝, 모델 서빙 등 다양한 ML 태스크를 지원합니다.

Ray의 핵심은 Task(함수)와 Actor(클래스) 기반 분산 프로그래밍 모델입니다. @ray.remote 데코레이터 하나로 함수를 분산 태스크로 변환할 수 있으며, Ray Tune(하이퍼파라미터 튜닝), Ray Train(분산 학습), Ray Serve(모델 서빙) 등 ML 전용 라이브러리를 제공합니다.

실무에서 Ray는 대규모 ML 학습 파이프라인의 표준으로 자리잡고 있습니다. OpenAI, Uber, Shopify 등 글로벌 기업에서 사용하며, 특히 LLM Fine-tuning과 강화학습에서 활발히 활용됩니다. Anyscale의 관리형 서비스를 통해 클라우드에서 손쉽게 Ray 클러스터를 운영할 수 있습니다.

💻 코드 예제

Ray를 활용한 분산 하이퍼파라미터 튜닝 예제입니다.

# pip install ray[tune] torch
import ray
from ray import tune
from ray.tune.schedulers import ASHAScheduler

# Ray 초기화
ray.init()

# 학습 함수 정의
def train_model(config):
    """하이퍼파라미터 config로 모델 학습"""
    import torch
    import torch.nn as nn

    model = nn.Sequential(
        nn.Linear(10, config["hidden"]),
        nn.ReLU(),
        nn.Linear(config["hidden"], 1)
    )

    optimizer = torch.optim.Adam(model.parameters(), lr=config["lr"])

    for epoch in range(10):
        loss = torch.rand(1).item()  # 실제로는 학습 로직
        tune.report({"loss": loss, "epoch": epoch})

# 하이퍼파라미터 검색 공간
search_space = {
    "lr": tune.loguniform(1e-4, 1e-2),
    "hidden": tune.choice([32, 64, 128, 256]),
}

# ASHA 스케줄러 (조기 종료)
scheduler = ASHAScheduler(max_t=10, grace_period=1, reduction_factor=2)

# 분산 하이퍼파라미터 튜닝 실행
tuner = tune.Tuner(
    train_model,
    param_space=search_space,
    tune_config=tune.TuneConfig(
        metric="loss",
        mode="min",
        num_samples=20,  # 20개 시도
        scheduler=scheduler,
    ),
)
results = tuner.fit()

print(f"Best config: {results.get_best_result().config}")

📊 성능 & 비용

2025년 1월 기준 Ray 및 Anyscale 가격 정보입니다.

옵션 가격 특징
Ray OSS (오픈소스) 무료 셀프 호스팅, 커뮤니티 지원
Anyscale Platform ~$0.50/시간~ 관리형 서비스, Pay-as-you-go
Anyscale Enterprise 커스텀 견적 SLA, 전용 지원, 거버넌스

비용 절감 팁:

  • Spot Instance 활용 시 최대 60% 비용 절감 가능
  • 자동 스케일링으로 유휴 리소스 최소화
  • 신규 가입 시 $100 크레딧 제공

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"학습 시간이 너무 오래 걸리니까 Ray로 분산 학습을 구성하면 좋겠어요. 노드 10개로 늘리면 학습 시간을 1/8로 줄일 수 있습니다."
💬 면접에서
"Ray는 Task와 Actor 기반의 분산 프로그래밍 모델을 제공합니다. @ray.remote 데코레이터로 함수를 분산 태스크로 쉽게 변환할 수 있어요."
💬 기술 토론에서
"하이퍼파라미터 튜닝은 Ray Tune, 분산 학습은 Ray Train, 서빙은 Ray Serve로 통일하면 전체 ML 파이프라인을 일관되게 관리할 수 있습니다."

⚠️ 흔한 실수 & 주의사항

작은 태스크를 과도하게 분산: 태스크 오버헤드가 있으므로, 너무 작은 작업을 분산하면 오히려 느려집니다. 배치로 묶어서 분산하세요.
Object Store 메모리 무시: Ray는 객체를 공유 메모리에 저장합니다. 대용량 데이터 전송 시 메모리 부족이 발생할 수 있으니 ray.put()을 활용하세요.
Dashboard 활용: Ray Dashboard(localhost:8265)로 태스크 상태, 메모리 사용량, 병목 지점을 실시간 모니터링하세요.

🔗 관련 용어

📚 더 배우기