레이 리모트 액터
IT 위키
레이 리모트 액터는 상태를 유지하는 객체를 분산 환경에서 실행할 수 있도록 지원하는 Ray의 실행 단위이다.
1 개요[편집 | 원본 편집]
Remote Actor는 @ray.remote 데코레이터가 붙은 클래스이며, 각 인스턴스는 클러스터 내의 단일 워커 프로세스로 생성된다. 일반 remote 함수와 달리 액터는 내부 상태를 유지할 수 있으며, 메서드 호출은 비동기적으로 실행되고 ObjectRef를 반환한다. 액터는 순차적으로 메시지를 처리하여 상태 충돌 없이 일관성을 유지한다.
2 특징[편집 | 원본 편집]
- 상태(state)를 유지할 수 있음
- 하나의 액터는 하나의 워커 프로세스에서 실행됨
- 메서드 호출은 remote 함수처럼 ObjectRef를 반환
- 모든 메서드 호출은 직렬화되어 순차적으로 실행됨
- 액터 풀을 통해 병렬 처리 가능
3 예시[편집 | 원본 편집]
import ray
ray.init()
@ray.remote
class Counter:
def __init__(self):
self.n = 0
def increment(self):
self.n += 1
def read(self):
return self.n
counter = Counter.remote()
counter.increment.remote()
print(ray.get(counter.read.remote())) # 출력: 1
4 동작 방식[편집 | 원본 편집]
- 액터는 생성 시 GCS에 등록되며, 메타데이터(IP, 포트 등)가 저장된다.
- 이후 메서드 호출은 gRPC를 통해 액터 프로세스에 직접 전달된다.
- 액터 생성 요청은 먼저 Actor Creation Task로 등록되고, 완료 전이라도 핸들은 반환된다.
- 자원 할당은 액터 생성 시 수행되며, 메서드 호출 시에는 별도 자원 할당이 필요 없다.
5 장애 허용[편집 | 원본 편집]
- 액터는 상태를 가지므로 복구가 복잡하다.
- 메시지 처리 중 실패: 자동 재시도되지 않음
- 메시지 처리 전/후 실패: 최대 max_restarts 또는 max_retries`횟수까지 자동 복구 가능
- 초기화 실패는 첫 번째 메시지 실패로 간주됨
6 같이 보기[편집 | 원본 편집]
7 참고 문헌[편집 | 원본 편집]
- Moritz, Philipp et al. Ray: A Distributed Framework for Emerging AI Applications. OSDI 2018.
- Ray Documentation. Actors. https://docs.ray.io