레이 ObjectRef는 Ray에서 원격 함수 또는 액터 호출의 결과를 참조하기 위한 객체 참조자이다.
개요
ObjectRef는 Ray에서 분산 비동기 실행을 지원하기 위해 사용하는 참조 메커니즘이다. remote 함수나 액터 메서드를 호출하면 즉시 결과값이 반환되는 것이 아니라, 해당 결과를 가리키는 ObjectRef 객체가 반환된다. ObjectRef는 작업이 완료되었을 때 결과를 가져올 수 있도록 연결된 참조 역할을 한다.
주요 특징
- 비동기 실행 결과를 지연 참조(lazy reference)할 수 있다.
- Ray 클러스터 내 객체의 위치를 추적할 수 있는 메타데이터를 포함한다.
- `ray.get(ObjectRef)`를 호출하면 해당 결과를 가져온다.
- 하나의 객체는 여러 ObjectRef를 통해 참조될 수 있다.
생성 방식
- Remote 함수 또는 액터 메서드 호출 시 자동 생성된다.
- ray.put()을 통해 명시적으로 객체를 저장하고 ObjectRef를 생성할 수도 있다.
import ray
ray.init()
@ray.remote
def f(x):
return x + 1
obj_ref = f.remote(10)
result = ray.get(obj_ref) # result = 11
내부 동작
- ObjectRef는 고유 식별자(ID)를 통해 Ray의 객체 저장소에 저장된 데이터를 가리킨다.
- 소유자(owner)는 ObjectRef의 수명 주기를 관리하며, 참조 카운트를 통해 자동 메모리 해제(GC)가 이루어진다.
- 참조된 객체가 다른 노드에 있을 경우, Ray는 소유자로부터 복사 정보를 받아와 로컬 노드에 복제한다.
장애 허용
- 소유자 노드가 사라질 경우, ObjectRef도 함께 소실될 수 있다.
- 객체가 저장된 모든 노드가 사라지면, ObjectLostError가 발생한다.
- GCS에 저장된 작업 계보(lineage)를 통해 객체 재생성(reconstruction)이 가능한 경우도 있다.
같이 보기
참고 문헌
- Moritz, Philipp et al. Ray: A Distributed Framework for Emerging AI Applications. OSDI 2018.
- Ray Team. Object References in Ray. https://docs.ray.io