이 문서에서는 Google Kubernetes Engine (GKE)에서 Slurm 클러스터용 맞춤 Docker 이미지를 빌드하는 방법을 설명합니다. GKE에서 제공하는 기본 Slurm 이미지를 확장하여 고성능 컴퓨팅 (HPC) 워크로드에 필요한 추가 도구, 라이브러리 또는 구성을 포함할 수 있습니다.
이 문서를 읽기 전에 GKE용 Slurm Operator 부가기능을 숙지해야 합니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
기본 요건
이 문서에서는 GKE에 Slurm 클러스터가 이미 실행 중이고 GKE용 Slurm 연산자 부가기능이 설치되어 있다고 가정합니다. 다음 페이지의 절차를 완료합니다.
- 빠른 시작: GKE에 Slurm 클러스터 배포를 완료합니다.
- 프로젝트에서 Artifact Registry 저장소를 구성하여 커스텀 이미지를 저장합니다.
Slurm 기본 이미지
GKE는 gcr.io/gke-release/ Artifact Registry 저장소에 기본 Slurm 이미지를 제공합니다. GKE는 보안 및 성능을 위해 이러한 이미지를 자주 업데이트합니다. 이러한 이미지는 최신 Slurm 버전과 두 가지 Linux 배포(Ubuntu 및 Rocky Linux)가 포함된 변형으로 제공됩니다.
다음 기본 이미지를 맞춤설정할 수 있습니다.
gcr.io/gke-release/slinky/slurmd: Slurm 컴퓨팅 노드에 사용됩니다.gcr.io/gke-release/slinky/login: 로그인 노드에 사용됩니다.
맞춤 이미지 빌드
다음 예에서는 JAX가 설치된 Python 가상 환경이 포함된 맞춤 Slurm 컴퓨팅 이미지를 빌드하는 방법을 보여줍니다. 또한 JAX 라이브러리를 실제로 설치하지 않고도 컴퓨팅 이미지 PATH 환경 변수를 미러링하는 해당 로그인 이미지를 빌드합니다.
이미지 버전 선택
기본 이미지를 선택할 때는 다음 조건을 충족해야 합니다.
- 버전이 Slurm 클러스터의 다른 구성요소에서 사용하는 Slurm 버전과 일치합니다.
- 특정 Slurm 버전의 경우 최신 보안 업데이트와 버그 수정이 포함된 사용 가능한 최신 이미지의 태그를 선택합니다.
예를 들어 클러스터의 기본 Slurm 버전이 25.11인 경우 25.11-로 시작하는 태그(예: 25.11-ubuntu24.04-gke.6)를 선택해야 합니다.
Dockerfile 만들기
Ubuntu 기반
slurmd이미지 태그를 선택합니다.Google Cloud 콘솔에서
slinky/slurmd패키지가 포함된 Artifact Registry 저장소 페이지로 이동합니다.ubuntu를 포함하고 Slurm 버전(예:25.11-ubuntu24.04-gke.6)과 일치하는 태그가 있는 이미지를 찾습니다.태그를 복사합니다. 이 태그를 사용하여 다음 구성 파일에서
VERSION_TAG자리표시자를 바꿉니다.
다음 콘텐츠로
Dockerfile이라는 파일을 만듭니다.# --- Target 1: The Worker Node (slurmd) --- FROM gcr.io/gke-release/slinky/slurmd:VERSION_TAG AS slurmd-custom USER root # Install minimal requirements for venv RUN apt-get update && apt-get install -y --no-install-recommends \ python3-pip \ python3-venv \ && rm -rf /var/lib/apt/lists/* # Create and populate the virtual environment ENV VIRTUAL_ENV=/opt/custom_venv RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:$PATH" # Install JAX (CPU version for general compatibility) and dependencies RUN pip install --no-cache-dir jax[cpu] numpy # --- Target 2: The Login Node --- FROM gcr.io/gke-release/slinky/login:VERSION_TAG AS login-custom USER root # Mirror the PATH exactly so that the srun command captures it. # Note: You don't need to install the JAX libs here, # but the binary path must exist for the shell to recognize it. ENV VIRTUAL_ENV=/opt/custom_venv ENV PATH="${VIRTUAL_ENV}/bin:$PATH" # Create the directory structure so the PATH is valid on the login node RUN mkdir -p ${VIRTUAL_ENV}/binVERSION_TAG을 클러스터의 기본 Slurm 버전과 일치하는 Slurm 버전 태그로 바꿉니다.docker build명령어를 사용하여 이미지를 빌드합니다.docker build --target=slurmd-custom \ -t AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG \ -f Dockerfile . docker build --target=login-custom \ -t AR_PATH/slinky/login:CUSTOM_LOGIN_TAG \ -f Dockerfile .다음을 바꿉니다.
AR_PATH: Artifact Registry 저장소의 경로입니다(예:gcr.io/my-project).CUSTOM_SLURMD_TAG: 선택한slurmd-custom태그 이름입니다.CUSTOM_LOGIN_TAG: 선택한login-custom태그 이름입니다.
커스텀 이미지를 저장소로 푸시합니다.
docker push AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG docker push AR_PATH/slinky/login:CUSTOM_LOGIN_TAG
GKE에서 커스텀 이미지 사용
커스텀 이미지를 사용하려면 다음 단계를 완료하세요.
다음 예와 같이
values.yaml파일을 수정하여slurmd노드셋과login로그인셋의 이미지 저장소와 태그를 업데이트합니다.nodesets: slinky: replicas: 1 slurmd: image: repository: AR_PATH/slinky/slurmd tag: CUSTOM_SLURMD_TAG loginsets: slinky: enabled: true replicas: 1 login: image: repository: AR_PATH/slinky/login tag: CUSTOM_LOGIN_TAG기존 배포를 업그레이드합니다.
helm upgrade slurm oci://ghcr.io/slinkyproject/charts/slurm \ --namespace slurm \ --version=1.0.2 \ -f values.yaml로그인 노드에 로그인하고 다음
srun명령어를 실행하여 컴퓨팅 노드의 새로운 기능을 테스트합니다.srun python3 -c " import sys import jax import jax.numpy as jnp print(f'Python Executable: {sys.executable}') print(f'Using JAX backend: {jax.devices()[0].platform}') key = jax.random.PRNGKey(42) x = jax.random.normal(key, (5000, 5000)) result = jnp.dot(x, x) print(f'Matrix multiplication successful. Shape: {result.shape}') "출력은 다음과 비슷합니다.
Python Executable: /opt/custom_venv/bin/python3 Using JAX backend: cpu Matrix multiplication successful. Shape: (5000, 5000)이 출력은 Slurm이 커스텀 이미지를 실행하는 작업자 포드에서 스크립트를 실행하고 이미지가 필요한 Python 및 JAX 기능을 포함하고 있음을 확인해 줍니다.
삭제
이 튜토리얼에서 사용한 리소스를 정리하려면 다음 단계를 따르세요.
Helm 배포를 제거합니다.
sh helm uninstall slurm --namespace slurm이 명령어는 Helm 차트로 배포된 모든 Kubernetes 리소스를 삭제합니다.
Slurm 네임스페이스를 삭제합니다.
kubectl delete namespace slurmGKE 클러스터를 삭제합니다.
gcloud container clusters delete CLUSTER_NAMECLUSTER_NAME을 클러스터 이름으로 바꿉니다.Artifact Registry에서 커스텀 이미지를 삭제합니다.
gcloud container images delete AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG --force-delete-tags gcloud container images delete AR_PATH/slinky/login:CUSTOM_LOGIN_TAG --force-delete-tags로컬 Docker 환경에서 맞춤 이미지를 삭제합니다.
docker rmi AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG docker rmi AR_PATH/slinky/login:CUSTOM_LOGIN_TAG
다음 단계
- GitHub의 Slurm 프로젝트를 살펴봅니다.
- GKE용 Slurm 연산자 부가기능을 사용 설정하는 방법을 알아봅니다.