Ray Core
•
분산 애플리케이션을 빌드하고 확장하기 위한 소수의 핵심 기본 요소(예: 작업, 액터, 객체)를 제공
핵심 개념
Task
•
Ray는 임의의 함수를 별도의 Python Workers에서 비동기적으로 실행할 수 있도록 함
Python Worker : 병렬 처리나 멀티스레딩을 통해 작업을 동시에 수행하는 작업 단위
ex) 프로세스, 스레드
•
여기서 이러한 비동기 Ray 함수를 ‘Task’라고 함
Actor
•
Ray API를 함수(Task)에서 클래스로 확장한 것
•
인스턴스화가 된다면 새 Worker가 생성되고 Actor의 메서드가 해당 특정 Worker에 예약되고 해당 Worker의 상태에 Access하여 변경 가능
(Remote) Objects
•
Task과 Actor는 객체를 생성하고 계산
•
이러한 객체를 원격 객체(Remote Object)라고 부름
◦
Ray 클러스터의 어디에나 저장할 수 있고 객체 참조를 사용하여 참조하기 때문
•
Placement Groups
•
사용자가 여러 노드에서 리소스 그룹을 원자적으로 예약 가능
•
Ray Task 및 Actor를 지역성을 위해 최대한 가깝게 패킹(Pack)하거나 분산(Spread)하는데 사용 가능
패킹 : 여러 개를 하나로 묶는 것
Environment Dependencies
•
원격 컴퓨터에서 Task 및 Actor를 실행할 때 해당 환경 종속성(예: Python 패키지, 로컬 파일, 환경 변수)은 코드를 실행하는 데 사용할 수 있어야 한다.
초기 시작
import ray
ray.init() # ray를 가져와서 초기화
Python
복사
Ray의 최신 버전(>=1.5)에서는 ray.init()이 Ray 원격 API를 처음 사용할 때 자동으로 호출
Task
•
클러스터에서 원격 작업으로 함수를 실행 가능
•
원격 호출을 하여 Future, Ray Object Ref를 반환
# Task 설정
@ray.remote
def square(x):
return x * x
# Task 범위 지정
futures = [square.remote(i) for i in range(4)]
# 결과
print(ray.get(futures))
# -> [0, 1, 4, 9]
Python
복사
Actor 호출
•
여러 Actor 인스턴스에서 계산을 병렬화
# Actor 설정
@ray.remote
class Counter:
def __init__(self):
self.i = 0
def get(self):
return self.i
def incr(self, value):
self.i += value
# 인스턴스 생성
actor.c = Counter.remote()
# Actor 호출
# 비동기적으로 실행
# 원격 Actor Process에서
for _ in range(10):
c.incr.remote(1)
# Retrieve final actor state.
print(ray.get(c.get.remote()))
# -> 10
Python
복사
핵심 API
기존 Ray 클러스터에 연결하거나 Ray 클러스터를 시작하여 연결 | |
워커의 연결을 끊고 ray.init()로 시작된 프로세스 종료 | |
ray.init가 호출되었는지 확인 | |
작업 구성을 저장하는 데 사용되는 클래스 | |
Ray 작업에 대한 로깅 구성 |
Task
원격 함수나 액터 클래스 정의 | |
작업 호출 매개변수 구성 및 재정의 | |
작업 취소 |
Actor
원격 함수나 액터 클래스를 정의 | |
액터 인스턴스화 매개변수를 구성하고 재정의 | |
액터 메서드 주석 | |
Actor의 핸들 얻기 | |
Actor 강제 종료 |
객체 (Object Ref)
Runtime Context
현재 드라이버/워커의 런타임 컨텍스트를 가져옴 | |
런타임 컨텍스트를 얻는 데 사용되는 클래스 | |
작업자가 사용할 수 있는 GPU의 ID를 가져옴 |