Vertex AI 학습 클러스터는 클러스터에서 작업을 관리하고 예약하는 조정자로 Simple Linux Utility for Resource Management(Slurm)를 사용합니다.
Slurm은 확장성과 내결함성으로 유명한 널리 사용되는 오픈소스 클러스터 관리 및 작업 예약 시스템입니다.
Slurm 주요 기능
- Slurm은 정의된 기간 동안 특정 작업을 독점적으로 사용할 수 있는 컴퓨팅 노드 집합을 할당합니다. 이렇게 하면 작업에 간섭 없이 실행하는 데 필요한 리소스에 대한 전용 액세스 권한이 부여됩니다.
- Slurm은 제출 및 실행부터 모니터링 및 완료에 이르기까지 작업의 전체 수명 주기를 관리하는 프레임워크를 제공합니다. 이 시스템은 할당된 노드 집합에서 실행되는 병렬 작업을 처리하도록 특별히 설계되었습니다.
- Slurm은 정교한 우선순위 지정 엔진을 사용하여 컴퓨팅 리소스에 대한 액세스를 중재해 대기 중인 작업의 큐를 유지보수합니다. 이 시스템은 작업 크기, 사용자 우선순위, 대기 시간과 같은 요인을 고려하여 클러스터 전반에서 공정하고 효율적인 리소스 활용을 보장합니다.
기본 클러스터 구성
작업을 실행하려면 먼저 Slurm 클러스터 기본 구조를 정의해야 합니다. 이 섹션에서는 컴퓨팅 노드를 파티션으로 구성하고 전용 로그인 노드 풀을 지정하고 사용자를 위한 공유 홈 디렉터리를 구성하는 방법을 포함한 필수 구성 설정을 자세히 설명합니다.
파티션
파티션은 노드를 논리적 집합으로 그룹화하며 이는 다양한 머신 유형이나 액세스 등급을 관리하는 데 유용할 수 있습니다. slurm_spec의 파티션 필드 내 목록으로 정의됩니다.
각 파티션 객체에는 다음과 같은 필수 입력란이 있습니다.
id: 파티션의 고유 식별자입니다.node_pool_ids: 이 파티션에 속하는 노드 풀 하나 이상의 ID가 포함된 목록입니다.
예를 들면 다음과 같습니다.
"partitions": [
{
"id": "a4",
"node_pool_ids": [ "a4" ]
}
]
로그인 노드
로그인 노드 풀은 사용자가 클러스터와 상호작용하는 데 사용할 수 있는 기본 진입점 역할을 하는 전용 노드를 제공합니다. login_node_pool_id 필드는 이 풀의 고유 식별자를 지정합니다.
예를 들면 다음과 같습니다.
"login_node_pool_id": "login"
홈 디렉터리 스토리지
home_directory_storage 필드는 클러스터의 모든 노드에 /home 디렉터리로 마운트할 Filestore 인스턴스를 지정합니다. 이렇게 하면 모든 사용자를 위한 영구 공유 홈 디렉터리가 제공됩니다.
이 값에 Filestore 인스턴스의 전체 리소스 이름을 제공해야 합니다.
예를 들면 다음과 같습니다.
"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"
고급 Slurm 구성
Vertex AI 학습 클러스터를 사용하면 선택한 slurm.conf 파라미터를 맞춤설정할 수 있지만 이러한 설정은 초기 클러스터 생성 중에만 구성될 수 있으며 나중에 변경될 수 없습니다.
회계
Vertex AI 학습 클러스터를 사용하면 기본 제공 회계 기능을 사용하여 클러스터 내 리소스 사용량을 추적할 수 있습니다. 작업별 CPU 시간 및 메모리 사용량과 같은 측정항목을 모니터링하는 방법에 대한 전체 가이드는 공식 Slurm 회계 문서를 참조하세요.
| 매개변수 | 값 | 예 |
|---|---|---|
| AccountingStorageEnforce | 쉼표로 구분된 문자열 | associations,limits,qos |
선점 및 우선순위
작업이 예약되고 우선순위가 지정되는 방식을 관리하려면 Vertex AI 학습 클러스터를 사용하여 Slurm 작업 선점을 구성하면 됩니다. 선점은 멀티 요소 우선순위 플러그인과 함께 작동하여 우선순위가 높은 작업을 수행하려면 실행 중인 작업을 일시중지해야 하는지 여부를 결정합니다.
전체 개념 개요는 멀티 요소 우선순위 플러그인 및 선점에 대한 공식 Slurm 문서를 참조하세요.
선점 파라미터
| 매개변수 | 값 | 예 |
|---|---|---|
| PREEMPT_TYPE | 문자열 | preempt/partition_prio |
| PREEMPT_MODE | 쉼표로 구분된 문자열 | SUSPEND,GANG |
| PREEMPT_EXEMPT_TIME | 문자열 | 00:00:00 |
우선순위 파라미터
| 매개변수 | 값 | 예 |
|---|---|---|
| PRIORITY_TYPE | 문자열 | priority/multifactor |
| PRIORITY_WEIGHT_AGE | 정수 | 0 |
| PRIORITY_WEIGHT_ASSOC | 정수 | 0 |
| PRIORITY_WEIGHT_FAIRSHARE | 정수 | 0 |
| PRIORITY_WEIGHT_JOB_SIZE | 정수 | 0 |
| PRIORITY_WEIGHT_PARTITION | 정수 | 0 |
| PRIORITY_WEIGHT_QOS | 정수 | 0 |
| PRIORITY_WEIGHT_TRES | 쉼표로 구분된 문자열 | cpu=100,mem=150 |
프롤로그 및 에필로그 스크립트
다음 필드를 사용하여 각 작업의 시작(프롤로그)과 끝 (에필로그)에서 자동으로 실행되는 커스텀 Bash 스크립트를 구성할 수 있습니다.
prolog_bash_scripts: 문자열 목록입니다. 각 문자열에는 작업이 시작되기 전에 실행될 Bash 스크립트의 전체 콘텐츠가 포함됩니다.epilog_bash_scripts: 문자열 목록입니다. 각 문자열에는 작업이 완료된 후에 실행될 Bash 스크립트의 전체 콘텐츠가 포함됩니다.
이는 고유한 작업 환경을 설정하거나 자동 정리 태스크를 수행하는 데 유용합니다.
클러스터 사양 예시
다음 예시는 학습 클러스터를 만들기 위한 전체 JSON 구성을 보여줍니다. 이 사양을 자체 니즈에 맞게 조정할 수 있습니다.
{ // ... other cluster configurations ... "orchestratorSpec": { "slurmSpec": { "partitions": [ { "id": "a4", "node_pool_ids": ["a4"] } ], "login_node_pool_id": "login", "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID", "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'" ] // ... other Slurm settings ... } } }
클러스터 관리 및 운영
실행 중인 클러스터 관리
선택한 회계 및 선점 설정으로 클러스터를 만든 후 Slurm의 명령줄 도구를 사용하여 사용자 계정을 관리하고 작업 일정을 모니터링할 수 있습니다.
sacctmgr을 사용한 계정 관리
sacctmgr 명령어는 Slurm 데이터베이스에서 사용자와 계정 정보를 관리하는 기본 도구입니다. 예를 들어 계정에 새 사용자를 추가하고 새 사용자에게 파티션에 대한 액세스 권한을 부여하려면 다음 명령어를 실행합니다.
sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>
모든 sacctmgr 옵션의 전체 목록은 공식 Slurm 계정 문서를 참조하세요.
작업 우선순위 확인
큐에 있는 각 작업의 우선순위 구성요소를 확인하려면 sprio 유틸리티를 사용합니다. 이는 특정 작업이 다른 작업보다 먼저 실행되도록 예약된 이유를 이해하는 데 유용합니다.
자세한 사용 방법은 sprio 유틸리티 문서를 참조하세요.
선점 예시
공식 Slurm 문서에서는 다양한 선점 전략 작동에 대한 여러 가지 예시를 제공합니다. Slurm 선점 페이지에서 이러한 예시를 확인할 수 있습니다.
다음 단계
다음에서는 학습된 모델을 관리, 배포, 모니터링하는 머신러닝 수명 주기의 마지막 단계에 중점을 둡니다.
- 추론을 위해 모델 배포: 학습된 모델을 Vertex AI 엔드포인트에 배포하여 대규모로 온라인 추론 요청을 처리합니다.
- 모델 수명 주기 관리: Vertex AI Model Registry를 사용하여 모델을 버전 관리하고 비교하고 관리합니다. 학습이 성공하면 새 모델을 자동으로 등록하도록 파이프라인을 구성할 수 있습니다.
- 파이프라인 실행 및 모델 성능을 모니터링합니다.
- 파이프라인 모니터링: 파이프라인 실행의 실행 그래프, 아티팩트, 성능을 추적하여 문제를 디버그하고 조정을 최적화합니다.
- 모델 모니터링: 배포 후 모델의 예측 성능에서 드리프트와 이상치를 감지하도록 모니터링을 설정하여 시간이 지남에 따라 모델의 정확도를 유지할 수 있습니다.
- 비용 최적화 및 클러스터 수명 주기 관리: 자동화된 파이프라인을 사용할 때는 실행 빈도를 고려하여 클러스터의 수명 주기를 관리합니다.
- 실행 빈도가 낮은 경우 마지막 파이프라인 단계에서 클러스터를 삭제하여 비용을 절감하세요. 일반적으로 삭제 함수를 호출하는 커스텀 파이프라인 구성요소를 만들어야 합니다.
- 자주 실행하는 경우 클러스터를 활성 상태로 유지하여 작업 시작 시간을 줄이세요.