클러스터 만들기

Vertex AI 학습 클러스터에 관심이 있으면 영업 담당자에게 문의하여 액세스 권한을 받으세요.

이 페이지에서는 학습 클러스터를 만들고 관리하기 위한 API 기반의 직접적인 방법을 제공합니다. 로그인 노드, A4와 같은 고성능 GPU 파티션, Slurm 조정자 설정 등을 포함하여 JSON 파일 안에서 클러스터의 전체 구성을 정의하는 방법을 배울 수 있습니다. 또한 curl 및 REST API 호출을 사용해 이 구성을 배포하고, 클러스터를 생성하며 GET, LIST, UPDATE, DELETE 작업으로 클러스터 수명 주기를 관리하는 방법도 포함되어 있습니다.

클러스터 구성 정의

학습 클러스터의 전체 구성을 정의하기 위해 JSON 파일을 만드세요.

조직 정책상 컴퓨팅 인스턴스에서 공개 IP 주소 사용이 금지된 경우 enable_public_ips: false 파라미터를 지정해 학습 클러스터를 배포하고 인터넷 이그레스를 위해 Cloud NAT를 사용하세요.

학습 클러스터를 프로비저닝하는 첫 번째 단계는 전체 구성을 JSON 파일에 정의하는 것입니다. 이 파일은 클러스터의 청사진 역할을 하며 클러스터 이름과 네트워크 설정부터 로그인 노드 및 워커 노드의 하드웨어까지 모든 요소를 지정합니다.

다음 섹션에서는 다양한 일반적인 사용 사례에 맞춘 완전한 JSON 구성 파일 예시를 제공합니다. 이 목록에서 자신의 요구사항과 가장 유사한 예시를 찾아 시작점으로 사용하세요.

각 예시 뒤에는 해당 구성에서 사용된 주요 파라미터에 대한 자세한 설명이 제공됩니다.

GPU + Filestore만 사용하는 구성

이는 표준 구성입니다. 클러스터의 /home 디렉터리로 사용되는 Filestore 인스턴스를 제공합니다. 일반적인 용도와 사용자 데이터 저장에 적합합니다.

다음 예시는 gpu-filestore.json의 내용을 보여줍니다. 이 사양은 GPU 파티션을 포함한 클러스터를 만듭니다. machineType 또는 nodeCount과 같은 값을 변경하여 필요에 맞게 템플릿으로 사용할 수 있습니다.

파라미터 목록은 파라미터 참조를 확인하세요.

 {
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "provisioning_model": "RESERVATION",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION"
          ]
        }
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
}

GPU + Filestore + Managed Lustre

이 고급 구성은 표준 Filestore 인스턴스 외에도 고성능 Lustre 파일 시스템을 포함합니다. 학습 작업에 대규모 데이터 세트에 대한 높은 처리량 액세스가 필요한 경우 이 옵션을 선택하세요.

파라미터 목록은 파라미터 참조를 확인하세요.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/asia-sREGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservation_affinity_type": RESERVATION_AFFINITY_TYPE,
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "provisioning_model": "RESERVATION",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
  

GPU + 시작 스크립트

이 예시에서는 노드 풀에 커스텀 스크립트를 추가하는 방법을 보여줍니다. 이 스크립트는 해당 풀의 모든 노드에서 시작 시 실행됩니다. 이를 구성하려면 일반 설정 외에 노드 풀 정의에 관련 필드를 추가하세요. 파라미터 및 설명 목록은 파라미터 참조를 확인하세요.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "provisioning_model": "RESERVATION_NAME",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
}

CPU 전용 클러스터

학습 클러스터 환경을 프로비저닝하려면 먼저 JSON 파일에서 전체 구성을 정의해야 합니다. 이 파일은 클러스터의 청사진 역할을 하며 클러스터 이름과 네트워크 설정부터 로그인 노드 및 워커 노드의 하드웨어까지 모든 요소를 지정합니다.

파라미터 목록은 파라미터 참조를 확인하세요.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8",
      }
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

고급 Slurm 구성의 CPU 클러스터

이 예시에서는 고급 파라미터를 사용해 Slurm 조정자를 맞춤설정하는 방법을 보여줍니다. 다중 요소 우선순위 가중치 설정, 작업 선점 구성, 자동화된 작업 설정 및 정리용 프롤로그 및 에필로그 스크립트 실행 등 작업 스케줄링 동작을 세밀하게 제어해야 하는 경우 이 템플릿을 사용하세요.

파라미터 목록은 파라미터 참조를 확인하세요.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

클러스터가 JSON 파일로 정의되면, 다음 REST API 명령어를 사용해 클러스터를 배포하고 관리할 수 있습니다. 이 예시에서는 gcurl 별칭을 사용하며, 이는 API 엔드포인트와 상호작용하기 위한 인증된 편리한 단축 명령입니다. 이러한 명령어는 클러스터의 초기 배포부터 클러스터 업데이트, 상태 가져오기, 전체 클러스터 나열, 최종 클러스터 삭제까지 전체 수명 주기를 다룹니다.

인증

alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'

JSON 파일 만들기

JSON 파일(예: @cpu-cluster.json)을 만들어 모델 학습 클러스터의 구성을 지정합니다.

클러스터 배포

JSON 구성 파일을 만든 후 REST API를 사용하여 클러스터를 배포할 수 있습니다.

환경 변수 설정하기

명령어를 실행하기 전에 다음 환경 변수를 설정하세요. 이렇게 하면 API 명령어를 더 간결하고 관리하기 쉽게 만들 수 있습니다.

  • PROJECT_ID: 클러스터가 생성될 Google Cloud 프로젝트 ID입니다.
  • REGION: 클러스터 및 해당 리소스의 Google Cloud 리전입니다.
  • ZONE: 클러스터 리소스가 프로비저닝될 Google Cloud 영역입니다.
  • CLUSTER_ID: 학습 클러스터에 대한 고유 식별자입니다. 관련 리소스의 이름을 지정할 때 프리픽스로도 사용됩니다.

create 명령어 실행

이제 다음 gcurl 명령어를 실행하세요. 이 명령어는 JSON 파일(이 예시에서는 cpu-cluster.json)을 요청 본문으로 사용하고, 방금 설정한 환경 변수를 사용하여 API 엔드포인트와 쿼리 파라미터를 구성합니다.

  gcurl -X POST -d @cpu-cluster.json https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters?model_development_cluster_id=CLUSTER_ID
    

배포가 시작되면 작업 ID가 생성됩니다. 이 ID를 복사해 두세요. 다음 단계에서 클러스터를 검증하는 데 필요합니다.

  gcurl -X POST -d @cpu-cluster.json https://us-central1-aiplatform.googleapis.com/v1beta1/projects/managedtraining-project/locations/us-central1/modelDevelopmentClusters?model_development_cluster_id=training
  {
      "name": "projects/1059558423163/locations/us-central1/operations/2995239222190800896",
      "metadata": {
      "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateModelDevelopmentClusterOperationMetadata",
      "genericMetadata": {
        "createTime": "2025-10-24T14:16:59.233332Z",
        "updateTime": "2025-10-24T14:16:59.233332Z"
      },
      "progressMessage": "Create Model Development Cluster request received, provisioning..."
  }
    

클러스터 배포 검증

클러스터를 배포할 때 제공된 작업 ID를 사용하여 배포 진행 상황을 추적하세요. 예를 들어 앞에서 인용한 예시에서 작업 ID는 2995239222190800896입니다.

    gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

요약

gcurl POST 명령어로 클러스터 구성을 제출하면 클러스터 프로비저닝이 시작됩니다. 이는 비동기 장기 실행 작업입니다. API는 즉시 Operation ID가 포함된 응답을 반환합니다. 이 ID는 이후 단계에서 배포 진행 상황을 모니터링하고 클러스터가 성공적으로 생성되었는지 확인하며 수명 주기를 관리하는 데 사용되므로 반드시 저장해 두는 것이 중요합니다.

파라미터 참조

다음 목록은 구성 예시에 사용된 모든 파라미터를 설명합니다. 파라미터는 구성 대상 리소스에 따라 논리적 그룹으로 구성되어 있습니다.

일반 및 네트워크 설정

  • DISPLAY_NAME: 학습 클러스터의 고유한 이름입니다. 문자열은 소문자 영숫자 문자만 포함할 수 있으며, 문자로 시작해야 하며, 최대 10자로 제한됩니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REGION: 클러스터와 해당 리소스가 위치할 Google Cloud 리전입니다.
  • NETWORK: 클러스터 리소스에 사용할 가상 프라이빗 클라우드 네트워크입니다.
  • ZONE: 클러스터 및 리소스가 위치할 Google Cloud 영역입니다.
  • SUBNETWORK: 클러스터 리소스에 사용할 서브네트워크입니다.

노드 풀 구성

다음 파라미터는 로그인 노드와 워커 노드 모두의 노드 풀을 정의하는 데 사용됩니다.

일반적인 노드 풀 설정

  • ID: 클러스터 내에서 노드 풀을 식별하는 고유 식별자입니다(예: "login", "a4", "cpu").
  • MACHINE_TYPE: 워커 노드에 사용할 머신 유형입니다. 지원되는 값은 a3-megagpu-8g, a3-ultragpu-8g, a4-highgpu-8g입니다.
  • MIN_NODE_COUNT: MIN_NODE_COUNTMAX_NODE_COUNT와 동일해야 합니다.
  • MAX_NODE_COUNT: 로그인 노드 풀의 경우 MAX_NODE_COUNTMIN_NODE_COUNT와 동일해야 합니다.
  • ENABLE_PUBLIC_IPS: 로그인 노드에 공개 IP 주소를 부여할지 여부를 결정하는 불리언(true 또는 false)입니다.
  • BOOT_DISK_TYPE: 로그인 노드의 부팅 디스크 유형입니다(예: pd-standard, pd-ssd).
  • BOOT_DISK_SIZE_GB: 로그인 노드의 부팅 디스크 크기(GB)입니다.

작업자별 설정

  • ACCELERATOR_TYPE: 워커 노드에 연결할 GPU 가속기입니다. 지원되는 값은 다음과 같습니다.
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT: 각 워커 노드에 연결할 가속기 수입니다.
  • PROVISIONING_MODEL: 워커 노드의 프로비저닝 모델입니다(예: ON_DEMAND, SPOT, RESERVATION, FLEX_START).
  • RESERVATION_AFFINITY_TYPE: 노드 풀에 대한 예약 어피니티입니다(예: SPECIFIC_RESERVATION).
  • RESERVATION_NAME: 노드 풀이 사용할 예약의 이름입니다.

조정자 및 스토리지 구성

이 필드들은 JSON 파일의 orchestrator_spec.slurm_spec 블록 내에 정의됩니다.

핵심 Slurm 및 스토리지 설정

  • FILESTORE(home_directory_storage에 해당): /home 디렉터리로 마운트할 Filestore 인스턴스의 전체 리소스 이름입니다.
  • LUSTRE(node_pools 객체 내부의 lustres에 해당): 고성능 파일 액세스를 위해 클러스터 노드에 마운트할 기존 Managed Lustre 인스턴스 목록입니다.
  • LOGIN_NODE_POOL_ID(login_node_pool_id에 해당): 로그인 노드를 위해 사용해야 하는 노드 풀의 ID입니다.
  • partitions: 파티션 객체의 목록이며, 각 객체에는 idnode_pool_ids 목록이 필요합니다.

고급 Slurm 설정

  • prolog_bash_scripts: 문자열 목록입니다. 각 문자열에는 작업이 시작되기 전에 실행될 Bash 스크립트의 전체 콘텐츠가 포함됩니다.
  • epilog_bash_scripts: 문자열 목록입니다. 각 문자열에는 작업이 완료된 후에 실행될 Bash 스크립트의 전체 콘텐츠가 포함됩니다.
  • ACCOUNTING_STORAGE_ENFORCE: 스토리지 사용량에 대한 계정 한도를 적용합니다.
  • PRIORITY_TYPE: 사용할 스케줄링 우선순위 알고리즘입니다(예: priority/multifactor).
  • priority_weight_*: 스케줄링 우선순위 계산에서 서로 다른 요소에 가중치를 부여하는 정수 값들의 집합입니다(예: priority_weight_age, priority_weight_fairshare).
  • PREEMPT_TYPE: 사용할 선점 플러그인입니다(예: preempt/partition_prio).
  • PREEMPT_MODE: 선점 플러그인의 모드입니다(예: REQUEUE).
  • PREEMPT_EXEMPT_TIME: 작업이 시작된 후 선점될 수 없는 기간입니다.

다음 단계

활성 영구 학습 클러스터를 사용하여 머신러닝 워크로드를 실행합니다.