Ray

Ray란?

khseon7 2025. 6. 30. 20:35

Ray는 AI 및 Python 애플리케이션 확장을 위한 오픈소스 통합 프레임워크로 노트북에서 cluster까지 확장 가능한 분산 애플리케이션을 구축하기 위한 간단하고 범용적인 API를 제공한다.

What's Ray?

Ray는 분산 컴퓨팅을 단순화하기 위해 다음 기능을 제공한다.

  • 확장 가능한 연산 기본 단위: Task와 Actor를 통해 병렬 프로그래밍을 손쉽게 구현할 수 있음
    • Task: 병렬로 실행 가능한 함수 단위. @ray.remote 데코레이터를 붙여 실행
    • Actor: 상태를 가진 클래스 인스턴스를 클러스터에 띄우고 원격으로 조작 가능
@ray.remote
def slow_function(x): → Task
	return x * x

@ray.remote
class Counter:
    def __init__(self): → Actor
        self.count = 0
    def inc(self):
    	self.count += 1
        return self.count

 

  • AI 특화 라이브러리: 데이터 처리(ray.data), 모델 학습(ray.train), 하이퍼파라미터 튜닝(ray.tune), 모델 서빙(ray.serve), 강화학습(ray.rllib) 등 일반적인 머신러닝 작업을 위한 도구 제공
# ray.data
import ray
import ray.data
ds = ray.data.read_csv("s3://my-bucket/data.csv")
ds = ds.map(lambda row: {"x": row["x"] * 2})

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

trainer = TorchTrainer(
    train_loop_per_worker=train_func,
    train_loop_config={  
        "lr": 1e-3,
        "epochs": 5
    },
    scaling_config=ScalingConfig(
        num_workers=4,
        use_gpu=True
    )
)

trainer.fit()

# ray.tune
from ray import tune

tune.run(
    trainable,
    config={"lr": tune.grid_search([0.01, 0.001])},
    num_samples=1,
    resources_per_trial={"cpu": 1, "gpu": 1}
)

# ray.serve
from ray import serve

@serve.deployment
class MyModel:
    def __init__(self):
        self.model = load_model()

    def __call__(self, request):
        input_data = request.json()
        return self.model.predict([input_data["features"]])

serve.run(MyModel.bind())

# ray.rllib
from ray.rllib.algorithms.ppo import PPOConfig
algo = PPOConfig().environment("CartPole-v1").build()
algo.train()
  • 통합 리소스 관리: 노트북에서 cloud까지 자동으로 자원을 관리하며 원활하게 확장 가능