Tech

Kubernetes에서 Ray Cluster 구축해보기

hongcoder 2024. 12. 5. 16:16

이 글에서는 kubernetes상에서 Ray Cluster를 구축해서 사용해보는 과정을 적어보려고 한다.

 

Ray Cluster를 사용하려는 이유는 다음과 같다.

현재 진행하는 프로젝트에서는 실시간으로 쌓이는 대규모 데이터를 분석하고 이것을 활용하기 위함이다.

더 자세하게는 보다 효율적으로, 빠르게 데이터를 불러오고 분석하기 위해서 사용을 결정했다.

 

Ray 말고 다른 분산 처리, 학습을 지원하는 다양한 도구들이 존재하지만 Ray를 선택하게 된 이유는 Kubernetes에서 다른 도구들보다 유연하고, 쉽게 사용 가능할 것 같아서이다.

 

필자와 같은 경우는 대규모 데이터를 효율적으로 처리하기 위해 Apache Spark를 사용해 데이터를 분석, 처리 할것이다.

그렇기 때문에 RayDP를 Ray Cluster에 적용시켜 배포할 계획이다.

RayDP는 Spark를 포함하고, Ray Cluster 내부에 Spark Cluster를 동적으로 생성, 할당을 해주는 역할을 한다.


우선 Ray Cluster를 Kubernetes환경에 배포하는 과정을 설명하겠다.

 

GitHub - ray-project/kuberay: A toolkit to run Ray applications on Kubernetes

A toolkit to run Ray applications on Kubernetes. Contribute to ray-project/kuberay development by creating an account on GitHub.

github.com

해당 github 레포지토리를 이용해 Ray Cluster를 배포했다.

필자는 1개의 Head node와 2개의 worker node를 사용했다.

 

다음으로 테스트 코드를 작성해 보았다.

import ray

data = [x for x in range(100)]
print(data)

ray.init()

@ray.remote
def mul(x):
	import random
    return x * random.random()

result = ray.get([mul.remote(x) for x in data])
print(result)

해당 코드는 1부터 100까지의 숫자에 랜덤한 숫자를 곱하고 그 결과를 출력해주는 코드이다.

 

해당 스크립트를 실행하기 위해서는 다음과 같은 커맨드를 입력해주면 된다.

ray job submit --address http://localhost:8265 --working-dir {dir-path} python {script-name}

 

다음 그림은 kubernetes cluster 현황과 위 코드 실행 결과이다.

Ray Cluster Info

Ray Cluster에서 성공적으로 분산 처리를 한것을 볼 수 있다.

 

더 자세하게 내용을 확인하고 싶다면 localhost:8265로 접속하면 대시보드가 존재하는데 이것으로 더 자세하게 확인할 수 있다.