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))