Ray
Ray
분산 ML 프레임워크. 병렬 학습, 하이퍼파라미터 튜닝.
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, 전용 지원, 거버넌스 |
비용 절감 팁: