What's Ray Core?

What's Ray Core?

Ray Core는 분산 애플리케이션을 만들고 확장하기 위한 필수 프리미티브(태스크, 액터, 객체)를 제공하는 강력한 분산 컴퓨팅 프레임워크예요. 이 페이지에서는 파이썬 함수·클래스를 분산 Ray 태스크·액터로 바꾸는 방법과 Ray 객체 활용법을 간단한 예시로 살펴볼게요.

출처: What's Ray Core?

시작하기

Ray 설치는 pip install -U ray로 해요. 추가 설치 옵션은 Installing Ray 문서를 참고해요.

먼저 Ray를 import 하고 초기화해요.

import ray

ray.init()

:::note 명시적으로 ray.init()을 호출하지 않아도, Ray 원격 API를 처음 호출할 때 인자 없이 ray.init()이 암시적으로 호출돼요. :::

태스크 실행하기

태스크는 파이썬 함수를 Ray 클러스터에서 병렬화하는 가장 간단한 방법이에요. 태스크를 만들려면:

  1. 함수를 @ray.remote로 장식해 원격 실행되도록 표시
  2. 일반 함수 호출 대신 .remote()로 호출
  3. ray.get()으로 반환된 future(Ray 객체 참조)의 결과를 검색

간단한 예시예요:

# Define the square task.
@ray.remote
def square(x):
    return x * x

# Launch four parallel square tasks.
futures = [square.remote(i) for i in range(4)]

# Retrieve results.
print(ray.get(futures))
# -> [0, 1, 4, 9]

액터 호출하기

태스크는 무상태(stateless)인 반면, Ray 액터는 메서드 호출 사이에 내부 상태를 유지하는 상태를 가진 워커를 만들 수 있게 해 줘요. Ray 액터를 인스턴스화하면:

  1. Ray가 클러스터 어딘가에 전용 워커 프로세스를 시작
  2. 액터의 메서드가 그 특정 워커에서 실행되어 그 상태에 접근·수정
  3. 액터가 받은 순서대로 메서드 호출을 직렬 실행해 일관성 유지

간단한 Counter 예시예요:

# Define the Counter actor.
@ray.remote
class Counter:
    def __init__(self):
        self.i = 0

    def get(self):
        return self.i

    def incr(self, value):
        self.i += value

# Create a Counter actor.
c = Counter.remote()

# Submit calls to the actor. These calls run asynchronously but in
# submission order on the remote actor process.
for _ in range(10):
    c.incr.remote(1)

# Retrieve final actor state.
print(ray.get(c.get.remote()))
# -> 10

이 예시는 기본 액터 사용법을 보여줘요. 태스크와 액터를 함께 쓰는 더 포괄적인 예시는 Monte Carlo Pi 추정 예시를 참고해요.

객체 전달하기

Ray의 분산 객체 스토어는 클러스터 전반의 데이터를 효율적으로 관리해요. 객체를 다루는 세 가지 주요 방법이 있는데, 태스크·액터의 입력과 출력이 전부 Ray 객체(원격 객체)로 표현돼요. 객체는 클러스터의 어느 노드에든 저장될 수 있고, 이를 참조하는 데 **객체 참조(object ref)**를 사용해요.

정리

Ray Core는 태스크·액터·객체 세 가지 핵심 프리미티브를 제공해요.

  • 태스크: @ray.remote로 장식해 .remote()로 호출하면 병렬 실행돼요.
  • 액터: 상태를 가진 워커로, 같은 액터의 메서드 호출은 직렬 실행되고 상태를 공유해요.
  • 객체: 분산 객체 스토어에 저장되어 참조로 전달돼요.

이 세 프리미티브를 조합하면 단일 파이썬 노트북부터 대규모 클러스터까지 유연하게 확장할 수 있어요.

더 알아보기