Ray Core란? 분산 어플리케이션을 만들기 위해 제공된 핵심 요소들 (i.e., tasks, actors, objects)
Key Concept
Tasks
Ray는 분산된 파이썬 작업들을 비동기로 실행할 수 있는 함수를 제공하는데, 이 비동기 함수를 'tasks'라고 부른다.
Ray를 사용하면tasks가 CPUs, GPUs, 사용자 요구 측면에서 자원을 지정할 수 있다. 이 리소스 요청은 병렬 처리를 위해 clueter scheduler가 task를 분배할 때 사용된다. (
Actors
함수에서 클래스로 Ray API가 확장된 것이다. actor는 필수적으로 stateful(네트워크 연결 상태를 추적할 수 있는) 작업이나 서비스이다.
새로운 actor 객체가 생성되면, 새로운 작업이 생성되고, actor의 method는 특정 작업에 스케쥴링된다.
Objects
Ray에서 tasks와 actors는 objects에서 생성되고 계산된다.
objects를 remote objects라고 할 수 있는데 Ray cluster 어느곳에나 저장할 수 있기 때문이다. remote objects는 Ray의 분산된 shared-memory object sotre에 캐시되고, cluster의 node당 하나의 object가 저장된다.
Placement Groups
placement groupts을 사용하면 여러개의 node에 걸쳐 리소스 그룹을 예약할 수 있다.
PACK : 지역성을 위해 최대한 가깝게 묶인 tasks와 actors를 예약
SPREAD : 멀리 떨어진 tasks와 actors를 예약
일반적으로 placement groups는 gang-scheduling actor를 사용하지만 task도 지원함
(gang-scheduling : 관련 스레드 또는 프로세스가 다른 프로세서에 동시에 실행되도록 스케줄링하는 병렬 시스템용 스케줄링 알고리즘)
Environment Dependencies
tasks와 actors를 원격 머신에서 작동시킬때 코드를 실행시키려면 환경 종속성이 준비되어 있어야 한다. (e.g., 파이썬 패키지, 로컬 파일, 환경 변수) 해당 문제 해결을 위해
(1) Ray Cluster Launcher를 미리 사용해서 환경 준비
(2) Ray의 런타임 환경을 이용해 즉시 설치
기본 명령어
ray.init() ray 컨텍스트 초기화
@ray.remote 병렬 처리를 위한 파이썬 데코레이터. 함수에 붙여서 사용한다. 클래스에 붙여서 사용하면 액터(actor)
.remote() 데코레이터를 붙인 후 호출 가능. 함수에 인자를 던져줄 때 remote()에 인자를 던져주면 된다
ray.put() 오브젝트 저장소에 받은 인자값을 저장. 이 때 오브젝트의 특정한 ID값을 던져줌. → 동일 인자를 반복적으로 넘길때 오버헤드를 줄여주는 기능을 한다.
ray.get() 오브젝트 ID값에 해당하는 값을 돌려줌. 이 함수 호출 시 분산처리가 시작됨. 연속적으로 ray.get() 지정했다면 이전 ray.get()작업이 종료될때까지 이후 작업들은 대기
ray.wait() .remote()로 지정된 오브젝트 중에서 준비가 된 오브젝트의 ID를 반환
'Programming' 카테고리의 다른 글
[Ray] 2-2. Ray Core : Actors 예제 (0) | 2022.10.18 |
---|---|
[Ray] 2-1. Ray Core: Tasks 예제 (0) | 2022.10.18 |
[자료구조] Heap (0) | 2022.10.07 |
[Ray]1. 시작하며 (0) | 2022.10.05 |
Python functools 모듈의 내장함수[기본] (0) | 2022.08.06 |