Ray provides a simple, universal API for building distributed applications.
Ray는 병령 및 분산 어플리케이션 제작을 위한 universal API임
@ray.remote
@ray.remote
로 Function을 감쌌을 때 Task.remote()
를 통해 Task 실행 ObjectRef
반환ray.get(ObjectRef)
을 통해 값 반환@ray.remote
def example():
""" example function """
...
return result
# example.remote()
ray.get(example.remote())
@ray.remote
로 감싼 클래스 인스턴스ray.put()
을 통해 생성ray.put()
는 큰 배열을 공유 메모리에 저장, 복사본을 만들지 않고 모든 작업자에 프로세스에 액세, ray.init()
을 호출하여 실행import ray
ray.init()
import numpy as np
@ray.remote
def create_matrix(size):
return np.random.normal(size=size)
@ray.remote
def multiply_matrices(x, y):
return np.dot(x, y)
.remote()
메서드를 통한 Task 실행 asyncronizationx_id = create_matrix.remote([1000, 1000])
y_id = create_matrix.remote([1000, 1000])
z_id = multiply_matrices.remote(x_id, y_id)
.get()
을 통한 값 반환 syncronizationz = ray.get(z_id)
프로세스 종료
ray.shutdown()
데이터를 공유 메모리에 저장하여 복사본을 만들지 않고 모든 프로세스에서 접근, ray.put()
을 사용해 메모리 사용을 줄일 수 있음
import numpy as np
import ray
ray.init(num_cpus=16)
arr = np.random.random(1000000)
@ray.remote
def mul(x):
return x * 10
arr = ray.put(arr)
result = ray.get(mul.remote(arr))