Kubernetes 환경에서 Kuberay 배포하기

노하람·2023년 2월 20일
0

오늘은 기구성된 쿠버네티스 환경 위에 Kuberay를 이용해서 ray 클러스터를 올려보고자 합니다.

개요

기존의 쿠버네티스 환경에서도 ray를 이용한 파드는 잘 사용했습니다만,

  • top이나 bpytop으로 정확히 어떤 프로세스가 어느 CPU를 점유하고, 메모리를 얼마나 사용하고 있는지 알기 힘듦
  • ray 리소스 할당에 따라 강화학습 훈련 모델 시간과 리소스 사용량이 얼마나 되는지 파악하기 힘듦
  • ray를 활용한 프로덕션을 배포하고자 할 때 정확히 필요한 리소스를 지정하고 싶음.

등의 문제로, 쿠버네티스 환경에서 ray를 사용할 때 ray DashBoard를 활용해 다양한 로그를 확인할 수 있도록 해보고자 합니다.

전제조건

  • Kubernetes 클러스터 (로컬 클러스터를 구축해서 테스트해보려면 앞선 포스팅에서 Minikube를 이용한 클러스터 구축을 확인해주세요.)

Kuberay Operator 배포

KubeRay GitHub 리포지토리에서 관련 구성 파일을 적용하여 KubeRay Operator를 배포합니다.

  • Kuberay Operator를 배포합니다.
    kubectl create -k "github.com/ray-project/kuberay/ray-operator/config/default?ref=v0.4.0&timeout=90s"

  • 연산자가 네임스페이스에서 실행 중인지 확인합니다
    kubectl -n ray-system get pod --selector=app.kubernetes.io/component=kuberay-operator

Ray Cluster 배포

KubeRay 오퍼레이터가 실행되면 Ray 클러스터를 배포할 준비가 된 것입니다.
이를 위해 RayCluster Custom Resource(CR)를 생성합니다.

이 가이드의 나머지 부분에서는 기본(Default) 네임스페이스에 리소스를 배포합니다.
기본이 아닌 네임스페이스를 사용하려면 kubectl 명령에서 네임스페이스를 지정합니다.

  • 사용할 네임스페이스 지정 후 RayCluster 배포
    kubectl -n kubeflow-user-example-com apply -f https://raw.githubusercontent.com/ray-project/kuberay/master/ray-operator/config/samples/ray-cluster.autoscaler.yaml

  • RayCluster CR이 생성되면 다음을 실행하여 볼 수 있습니다.
    kubectl get raycluster

  • KubeRay 연산자는 RayCluster 개체를 감지합니다. 그런 다음 운영자는 헤드 및 작업자 포드를 생성하여 Ray 클러스터를 시작합니다. Ray 클러스터의 포드를 보려면 다음 명령을 실행합니다.
    - 실행중인 ray 프로세스가 있으면 파드가 정상적으로 초기화되지 않습니다. 실행중인 ray 프로세스가 있다면 먼저 종료시켜주세요(ray stop)
    kubectl get pods --selector=ray.io/cluster=raycluster-autoscaler

  • 프로덕션 시나리오에서는 더 큰 Ray 포드를 사용하는 것이 좋습니다. 실제로 전체 Kubernetes 노드를 차지하도록 각 Ray 포드의 크기를 조정하는 것이 유리합니다. 자세한 구성 가이드

Ray Job 생성

Ray Jobs 제출을 위해 Ray Cluster를 설정하려면 Ray Jobs 포트가 클라이언트에 표시되는지 확인하기만 하면 됩니다.
Ray는 헤드 포드의 대시보드 서버를 통해 작업 요청을 수신합니다.

먼저 Ray 헤드 노드의 위치를 찾아야 합니다. KubeRay 연산자는 Ray 헤드 포드를 대상으로 하는 Kubernetes 서비스를 구성합니다.
이 서비스를 사용하면 Ray 컨테이너에서 직접 명령을 실행하지 않고도 Ray 클러스터와 상호 작용할 수 있습니다.

  • 예제 클러스터에 대한 Ray 헤드 서비스를 식별하려면 다음을 실행합니다.
    kubectl get service raycluster-autoscaler-head-svc

이제 서비스 이름이 있으므로 포트 전달을 사용하여 Ray 대시보드 포트(기본적으로 8265)에 액세스할 수 있습니다.

참고: 다음 포트 포워딩 명령은 차단됩니다. Jupyter 노트북에서 따라하는 경우 노트북 외부의 별도 셸에서 명령을 실행해야 합니다.
kubectl port-forward service/raycluster-autoscaler-head-svc 8265:8265

다만 저는 MetalLB를 활용해 외부 IP에서 로컬 포트 포워딩을 활용해 접근해보려고 합니다. 아래는 참고만 부탁드립니다.

kubectl patch service -n kubeflow-user-example-com raycluster-autoscaler-head-svc -p '{"spec": {"type": "LoadBalancer"}}'

profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글