GKE에서 AI 워크로드를 위해 GPU 가속이 적용된 Ray 배포
이 페이지에서는 Google Kubernetes Engine (GKE)에서 GPU 지원 Ray 클러스터를 설정하고 실행하여 AI/ML 워크로드를 확장하는 방법을 보여줍니다.
Ray를 사용하는 이유
KubeRay를 통해 GKE에서 Ray를 사용하면 Python 및 AI 애플리케이션을 확장할 수 있습니다. Ray는 애플리케이션 확장을 처리하고 GKE는 기본 서버와 리소스를 관리합니다.
이 조합을 사용하면 리소스를 더 쉽게 관리하고, 용량을 자동으로 조정하고, 안정성을 보장하고, 다양한 환경에 애플리케이션을 배포할 수 있습니다. 분산된 Ray 애플리케이션을 GKE의 기존 클라우드 인프라 및 도구와 연결하면 표준 Kubernetes 방법을 사용하여 작업을 간소화하고 복잡한 작업을 위한 강력하고 확장 가능한 플랫폼을 프로비저닝할 수 있습니다.
자세한 내용은 블로그 게시물 Ray AI 워크로드에 GKE를 사용하는 이유를 참고하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
Install the Google Cloud CLI.
-
제휴 ID를 사용하도록 gcloud CLI를 구성합니다.
자세한 내용은 제휴 ID로 gcloud CLI에 로그인을 참고하세요.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
kubectl
설치:kubectl
은 GKE 클러스터와 상호작용하는 기본 명령줄 도구입니다. Cloud Shell을 사용하는 경우kubectl
가 이미 설치되어 있습니다. 그렇지 않으면gcloud components install kubectl
명령어를 실행하여 터미널에 설치합니다.설치를 확인하려면 다음 명령어를 실행합니다.
kubectl version --client
- Ray 설치: 종속 항목을 격리할 수 있도록 Ray를 설치하기 전에 Python 가상 환경 (
venv
)을 만들고 입력하는 것이 좋습니다.- Python을 설치합니다.
- 새 가상 환경을 만들고 활성화합니다.
- 가상 환경 내에서
pip install -U "ray[default]"
명령어를 실행하여 Ray의 최신 안정화 버전을 설치합니다. - 설치를 확인하려면
ray --version
명령어를 실행합니다. 출력에서 Ray 버전 (예: 2.44.1)을 확인합니다.
- Google Cloud 프로젝트에 L4 GPU 할당량이 충분한지 확인합니다. 자세한 내용은 GPU 정보 및 배정 할당량을 참고하세요.
터미널에서 다음
gcloud container clusters create-auto
명령어를 실행합니다.gcloud container clusters create-auto my-ray-enabled-cluster \ --enable-ray-operator \ --enable-ray-cluster-monitoring \ --enable-ray-cluster-logging \ --location=us-central1
이 Google Cloud CLI 명령어는 다음 설정으로
my-ray-enabled-cluster
라는 Autopilot 클러스터를 만듭니다.--enable-ray-operator
: 클러스터에 Ray 연산자를 설치합니다. 이렇게 하면 Kubernetes 내에서 Ray 클러스터 관리가 간소화됩니다.--enable-ray-cluster-monitoring
: Ray 클러스터 측정항목을 위해 Cloud Monitoring과의 통합을 설정합니다.--enable-ray-cluster-logging
: Cloud Logging과의 통합을 구성하여 Ray 클러스터에서 로그를 수집합니다.--location=us-central1
: GKE 클러스터가 생성될 지리적 리전을 지정합니다. 가속기 사용 가능 여부와 지원되는 유형은 위치에 따라 다릅니다. 자세한 내용은 GPU 리전 및 영역을 참고하세요.
Autopilot 클러스터는 워크로드 요구에 따라 자동으로 노드를 프로비저닝하고 확장 (컴퓨팅 클래스를 사용하는 GPU 지원 노드 포함)하여 사용률과 비용을 모두 최적화합니다. Autopilot 클러스터에서 리소스를 자동으로 프로비저닝하고 확장하면 리소스 관리가 간소화되므로 인프라 대신 모델에 집중할 수 있습니다.
GKE Standard 클러스터를 사용하는 경우 Ray를 사용 설정하는 플래그와 설정이 다를 수 있습니다. 자세한 내용은 GKE에서 Ray 연산자 사용 설정을 참고하세요.
클러스터와 통신하도록
kubectl
을 구성합니다.gcloud container clusters get-credentials my-ray-enabled-cluster \ --region=us-central1
터미널에서 다음
gcloud container clusters create
명령어를 실행합니다.gcloud container clusters create my-ray-enabled-cluster \ --addons=RayOperator \ --enable-ray-cluster-monitoring \ --enable-ray-cluster-logging \ --region=us-central1 \ --enable-autoprovisioning \ --max-cpu=10 \ --max-memory=64
이 Google Cloud CLI 명령어는 다음 설정으로
my-ray-enabled-cluster
라는 이름의 Standard 클러스터를 만듭니다.--addons=RayOperator
: 클러스터에 Ray 연산자를 설치합니다. 이렇게 하면 Kubernetes 내에서 Ray 클러스터 관리가 간소화됩니다.--enable-ray-cluster-monitoring
: Ray 클러스터 측정항목을 위해 Cloud Monitoring과의 통합을 설정합니다.--enable-ray-cluster-logging
: Cloud Logging과의 통합을 구성하여 Ray 클러스터에서 로그를 수집합니다.--region=us-central1
: GKE 클러스터가 생성될 지리적 리전을 지정합니다. 가속기 사용 가능 여부와 지원되는 유형은 위치에 따라 다릅니다. 자세한 내용은 GPU 리전 및 영역을 참고하세요.--enable-autoprovisioning
: 워크로드의 요구에 따라 노드 풀을 자동으로 만들고 삭제하며 이러한 풀 내에서 노드를 확장합니다.--max-cpu
: 클러스터가 확장될 수 있는 최대 코어 수입니다.--max-memory
: 클러스터가 확장될 수 있는 최대 메모리 용량(GB)입니다.
클러스터와 통신하도록
kubectl
을 구성합니다.gcloud container clusters get-credentials my-ray-enabled-cluster \ --region=us-central1
출시 페이지로 이동하여 플랫폼용 바이너리를 다운로드합니다. 예를 들어 Linux amd64에
kubectl ray
플러그인 버전 1.3.2를 설치하려면 다음 명령어를 실행합니다.curl -LO https://github.com/ray-project/kuberay/releases/download/v1.3.2/kubectl-ray_v1.3.2_linux_amd64.tar.gz tar -xvf kubectl-ray_v1.3.2_linux_amd64.tar.gz cp kubectl-ray ~/.local/bin
~/.local/bin
를PATH
의 디렉터리로 바꿉니다.설치를 확인합니다.
kubectl ray version
KubeRay operator installation cannot be found: no KubeRay operator deployments found in any namespace.
과 같은 경고가 표시되면 무시해도 됩니다. 설치가 성공하면kubectl ray
플러그인의 버전이 출력됩니다.다음 컴퓨팅 클래스 사양을
nvidia-l4-compute-class.yaml
로 저장합니다.apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: gpu-compute-class spec: priorities: - gpu: type: nvidia-l4 count: 1 spot: true - gpu: type: nvidia-l4 count: 1 spot: false nodePoolAutoCreation: enabled: true whenUnsatisfiable: DoNotScaleUp
다음 명령어를 실행하여 컴퓨팅 클래스를 만듭니다.
kubectl apply -f nvidia-l4-compute-class.yaml
커스텀 컴퓨팅 클래스를 적용하면 어떻게 되나요? 컴퓨팅 클래스 YAML 파일을 적용하면 Ray 클러스터에서 요청할 때 GKE가 NVIDIA L4 GPU가 하나 있는 노드를 자동으로 프로비저닝합니다. 매니페스트에 정의된 대로 스팟 VM의 우선순위를 지정합니다.
whenUnsatisfiable: DoNotScaleUp
설정은 지정된 요구사항을 충족하지 않는 노드를 생성하지 않도록 GKE에 지시합니다.Ray 클러스터를 만듭니다.
kubectl ray create cluster
명령어를 사용하여 Ray 클러스터를 정의하고 만듭니다. 이 명령어는 기본 Kubernetes 리소스 생성을 처리하여 프로세스를 간소화합니다.kubectl ray create cluster my-ray-cluster \ --worker-replicas=1 \ --worker-cpu=2 \ --worker-memory=4Gi \ --worker-gpu=1 \ --worker-node-selectors="cloud.google.com/compute-class=gpu-compute-class"
kubectl ray create cluster
명령어는 KubeRay 플러그인을 사용하여 사양을 RayCluster 커스텀 리소스 정의로 변환하고 Kubernetes API로 전송하여 RayCluster 객체를 만듭니다. 이 객체는 GKE 내에서 실제 Ray 클러스터 구성요소 (헤드 및 작업자 노드)를 프로비저닝하고 관리하는 방법을 Ray 연산자에게 알려주는 청사진 역할을 합니다. 기본적으로 GKE는 E2 머신 시리즈의 노드에 헤드 포드를 예약합니다.예시 명령어는 다음 설정을 사용합니다.
kubectl ray create cluster my-ray-cluster
: 만들려는 Ray 클러스터의 이름을 지정합니다.--worker-node-selectors
: Kubernetes에cloud.google.com/compute-class=gpu-compute-class
라벨이 지정된 노드에 작업자 포드를 예약하도록 지시합니다.
Ray 클러스터 상태를 확인합니다. 이러한 명령어를 사용하여 Ray 클러스터가 실행 중인지 확인합니다.
다음 명령어를 실행하여 RayCluster 리소스를 확인합니다.
kubectl ray get cluster
이 명령어는 Kubernetes 네임스페이스의 모든 Ray 클러스터를 나열합니다.
my-ray-cluster
가 나열되어야 합니다. 클러스터가 초기화되는 데 몇 분 정도 걸릴 수 있습니다.다음 명령어를 실행하여 Kubernetes 포드를 확인합니다.
kubectl get pods
이 명령어는 Kubernetes 네임스페이스에서 실행 중인 모든 포드를 나열합니다. Ray 클러스터와 관련된 포드가 표시됩니다.
- Ray 헤드 노드의 포드(이름:
my-ray-cluster-head-0
) - Ray 작업자 노드의 포드가 하나 이상 있으며 이름은
my-ray-cluster-worker-group-0-xxxxx
와 같습니다. 작업자 포드 수는 Ray 클러스터의 초기 구성과 발생했을 수 있는 자동 확장에 따라 달라집니다.
- Ray 헤드 노드의 포드(이름:
Ray 대화형 세션을 시작합니다. Ray 클러스터에 로컬 연결을 설정하려면 다음 명령어를 실행하세요.
kubectl ray session my-ray-cluster
이 명령어는 로컬 머신과 GKE 클러스터의 Ray 헤드 노드 간에 포트 포워딩을 시작합니다. 이 세션이 활성 상태인 동안 터미널이 사용 중입니다. 계속하려면 별도의 터미널 인스턴스를 여세요.
실행할 샘플 코드 만들기 다음 예시 코드를
sample_code.py
파일에 저장합니다.import ray import os import requests ray.init() @ray.remote class Counter: def __init__(self): # Used to verify runtimeEnv self.name = os.getenv("counter_name") assert self.name == "test_counter" self.counter = 0 def inc(self): self.counter += 1 def get_counter(self): return "{} got {}".format(self.name, self.counter) counter = Counter.remote() for _ in range(5): ray.get(counter.inc.remote()) print(ray.get(counter.get_counter.remote())) # Verify that the correct runtime env was used for the job. assert requests.__version__ == "2.26.0"
새 터미널을 열고 Ray 작업을 제출합니다.
- 로컬 머신에서 새 터미널을 엽니다. Ray 설치를 위한 가상 환경을 만든 경우 이 새 터미널에서도 활성화해야 합니다.
sample_code.py
파일을 저장한 디렉터리로 이동합니다.다음 명령어를 실행합니다.
ray job submit \ --working-dir=. \ --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}' \ --address http://localhost:8265 python sample_code.py
예시 명령어는 다음 설정을 사용합니다.
--working-dir=.
: 현재 디렉터리를 클러스터의 Ray 작업에 제공되는 작업 디렉터리로 지정합니다. 이 디렉터리에는 Ray에서 실행하려는 애플리케이션 소스 코드만 포함되어야 합니다. 이 예에서는sample_code.py
파일입니다.--runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}'
: 작업의 런타임 환경을 정의합니다. 필요한 Python 라이브러리 버전(requests==2.26.0
)을 지정하고 작업 실행을 위한 환경 변수 (counter_name
)를 설정합니다.
Ray 작업 보기 다음 방법 중 하나로 작업을 모니터링할 수 있습니다.
- Ray 대시보드: 웹브라우저를 열고
http://localhost:8265
로 이동합니다. 이 URL을 사용하면 실행 중인 작업에 관한 정보(상태, 로그, 리소스 사용량 등)를 확인할 수 있는 Ray 대시보드가 열립니다. - 측정항목 탐색기:Google Cloud 콘솔에서 사전 빌드된 측정항목 대시보드를 사용합니다. 자세한 내용은 GKE의 Ray 클러스터에 대한 로그 및 측정항목 수집 및 보기를 참고하세요.
- Ray 대시보드: 웹브라우저를 열고
Ray 세션을 종료합니다. Ray 클러스터와 상호작용하거나 작업을 모니터링한 후
kubectl ray session
명령어를 실행한 터미널에서Ctrl+C
를 눌러 대화형 세션을 종료할 수 있습니다.- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력하고 종료를 클릭하여 프로젝트를 삭제합니다.
- GKE에서 Ray를 위한 추가 예시, 권장사항, 도구 살펴보기: 자세한 내용은 ai-on-gke GitHub 저장소를 참고하세요.
- GKE에서 가속기 사용 자세히 알아보기: 머신러닝 및 데이터 분석 작업에서 병렬 처리를 위해 GPU를 사용합니다. 대규모 딥 러닝 모델 학습 및 추론을 가속화하려면 TPU를 사용하세요.
- Ray 연산자 자세히 알아보기: Ray 연산자를 사용하여 Ray 작업 등 Ray 배포를 관리하는 방법을 자세히 알아보려면 GKE의 Ray 정보를 참고하세요.
- Kueue를 사용하여 작업 큐 추가: Kubernetes 기반 작업 큐 시스템인 Kueue를 사용하여 AI/ML 워크로드를 관리하고 우선순위를 지정하여 리소스 활용도를 개선하는 방법을 알아봅니다. 자세한 내용은 혼합된 AI/ML 학습 및 추론 워크로드에 맞게 GKE 리소스 활용도 최적화를 참고하세요.
GKE 클러스터 만들기
GKE Autopilot 또는 Standard 클러스터에 워크로드를 배포할 수 있습니다. 완전 관리형 Kubernetes 환경을 위해서는 Autopilot 클러스터를 사용하는 것이 좋습니다. 워크로드에 가장 적합한 GKE 작업 모드를 선택하려면 GKE 작업 모드 선택을 참고하세요.
Autopilot
Autopilot 모드에서 Google은 확장, 보안, 기타 사전 구성된 설정을 포함하여 클러스터 구성을 관리합니다. Autopilot 클러스터는 대부분의 프로덕션 워크로드를 실행하고 Kubernetes 매니페스트에 따라 컴퓨팅 리소스를 프로비저닝하도록 최적화되어 있습니다.
표준
Standard 모드에서는 GKE 클러스터의 기본 인프라를 더 많이 제어할 수 있습니다. 노드 풀, 노드 크기, 기타 구성을 직접 관리하여 더 세부적으로 맞춤설정할 수 있습니다. 표준 클러스터는 특정 구성이 필요하거나 리소스를 세부적으로 제어해야 하는 워크로드에 적합합니다.
KubeRay kubectl ray
플러그인 설치
kubectl ray
플러그인은 Kubernetes에서 일반적인 Ray 워크플로를 간소화합니다. 최신 설치 안내는 KubeRay 문서를 참고하세요.
클러스터에서 커스텀 컴퓨팅 클래스 만들기
GKE의 커스텀 컴퓨팅 클래스를 사용하면 우선순위에 따라 GPU 유형 및 수와 같은 특정 하드웨어 요구사항을 정의할 수 있습니다. GKE는 워크로드용 노드를 프로비저닝할 때 이 우선순위를 사용합니다.
이 가이드의 예시 맞춤 컴퓨팅 클래스를 만들려면 다음 단계를 따르세요.
Ray 클러스터 만들기 및 확인
이제 GKE 클러스터에서 Ray 클러스터를 만들 수 있습니다.
Ray 작업 제출
Ray 클러스터가 준비되면 GKE에서 실행 중인 Ray 클러스터에 Ray 작업을 제출할 수 있습니다.
이렇게 하려면 kubectl ray session
명령어를 사용하여 대화형 세션을 시작하고 ray job submit
명령어를 사용하여 작업 실행을 시작합니다.
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
새 Google Cloud 프로젝트에 빠른 시작을 배포했고 프로젝트가 더 이상 필요하지 않으면 다음 단계를 완료하여 프로젝트를 삭제합니다.
새 Google Cloud 프로젝트를 만들지 않았고 GKE 클러스터가 더 이상 필요하지 않으면 다음 명령어를 실행하여 삭제할 수 있습니다.
gcloud container clusters delete my-ray-enabled-cluster \
--location=us-central1