클러스터 스케줄러 개념 설명
이 단원을 마치면 작업 스케줄러, 리소스 관리자, 고성능 컴퓨팅, 고처리량 컴퓨팅의 기본 기능을 설명할 수 있습니다.
작업 스케줄러
클러스터 컴퓨팅 작업 스케줄러는 클러스터에 제출된 작업에 컴퓨팅 리소스(예: CPU, 메모리, 디스크)를 관리하고 할당하는 소프트웨어 구성 요소입니다. 작업 스케줄러가 리소스의 가용성, 작업의 우선 순위, 기타 요인에 따라 특정 작업을 실행하기 위해 클러스터에서 가장 적합한 노드를 결정합니다. 작업 스케줄러를 사용하면 병렬로 실행되는 여러 작업이 서로 간섭하지 않습니다. 작업 스케줄러에는 보류 중인 작업을 보유하기 위한 큐와 예약 정책이 포함됩니다.
작업 스케줄러의 기본 목표는 다음과 같습니다.
- 작업 제출과 작업 완료 사이의 시간을 최소화합니다.
- CPU 사용률을 최적화합니다.
- 작업 처리량을 최대화합니다.
사용자는 비대화형 일괄 처리 작업을 스케줄러에 제출합니다. 스케줄러는 일괄 처리 작업을 저장하고, 리소스 요구 사항 및 우선 순위를 평가하고, 작업을 적절한 컴퓨팅 노드에 분산합니다.
스케줄러를 통해 제출된 작업 스크립트는 작업을 작업 큐에 추가합니다. 작업에 필요한 가용 리소스에 따라 스케줄러는 작업이 큐에서 나갈 시기와 작업을 실행할 백 엔드 노드를 결정합니다.
스케줄러가 다음으로 실행할 작업을 결정하는 데 사용할 수 있는 기본 전략이 몇 가지 있습니다.
선착순: 작업은 큐에 처음 들어온 순서와 동일한 순서로 실행됩니다. 모든 작업이 확실하게 실행된다는 장점이 있지만, 작은 작업 세트가 실제 실행 시간보다 부적절하게 긴 시간 동안 기다릴 수 있습니다.
가장 짧은 작업 우선: 작업 스크립트에 선언된 시간을 기반으로 스케줄러는 작업 실행 시간을 예측합니다. 실행 시간의 오름차순으로 작업의 순위가 결정됩니다. 짧은 작업은 짧은 대기 시간 후에 시작되지만, 장기 실행 작업(또는 적어도 장기 실행으로 선언된 작업)은 실제로는 시작되지 않을 수도 있습니다.
백필: 스케줄러는 장기 실행 작업이 실행되는 것을 막지 않고 선착순 개념을 유지합니다. 스케줄러는 큐의 첫 번째 작업을 실행할 수 있는 경우에만 작업을 실행합니다. 그렇지 않으면 스케줄러는 큐의 나머지 부분을 살펴보면서 큐의 첫 번째 작업의 대기 시간을 늘리지 않고 다른 작업을 실행할 수 있는지 확인합니다. 스케줄러는 이러한 작업을 찾으면 해당 작업을 실행합니다. 작업이 작으면 일반적으로 큐 시간이 짧습니다.
리소스 관리자
클러스터 컴퓨팅 리소스 관리자는 컴퓨팅 클러스터 내에서 리소스를 할당합니다. 리소스 관리자는 클러스터에서 실행되는 작업에 메모리, CPU, 스토리지, 네트워크 대역폭을 할당해야 합니다. 이 구성 요소는 클러스터 내의 리소스 사용을 모니터링하고, 유휴 리소스나 활용률이 낮은 리소스를 검색하여 이를 필요로 하는 다른 작업에 재할당합니다.
Slurm 개요
Slurm은 Linux 클러스터에서 워크로드를 실행하기 위한 오픈 소스 작업 스케줄러 및 리소스 관리자입니다. Slurm은 Linux 클러스터 환경에서 리소스를 관리하고 작업을 예약하기 위한 확장 가능한 프레임워크를 제공합니다. 병렬 작업, 일괄 처리 작업, 대화형 작업을 비롯한 다양한 작업 유형을 지원합니다. Slurm을 사용하면 명령줄 인터페이스, 웹 기반 인터페이스, API를 비롯한 다양한 인터페이스를 통해 작업을 제출할 수 있습니다. Slurm은 많은 강력한 슈퍼컴퓨터와 컴퓨팅 클러스터에서 널리 사용되는 솔루션이며, Microsoft Azure에서 HPC(고성능 컴퓨팅)를 사용할 때 옵션으로 사용할 수 있습니다.
Slurm을 사용하면 CPU, GPU, 메모리를 포함한 리소스 조건에 따라 컴퓨팅 리소스를 적절하게 일치시킬 수 있습니다.
Slurm 작업 스케줄러에는 다음과 같은 중요한 함수가 있습니다.
- HPC 클러스터의 컴퓨팅 노드에 대한 액세스를 사용자에게 할당하여 해당 작업을 실행할 수 있도록 합니다.
- 할당된 노드 집합에서 작업을 시작, 실행, 모니터링하기 위한 프레임워크를 제공합니다.
- 보류 중인 작업의 큐를 관리하여 리소스에 대한 경합을 중재합니다.
Slurm 작업
Slurm을 사용하여 Linux HPC 클러스터에서 작업을 실행하는 경우 다음과 같은 높은 수준의 단계가 발생합니다.
- 작업 제출: 첫 번째 단계는 사용자가 리소스 요구 사항과 작업에 필요한 명령 집합을 포함하는 작업 스크립트를 만들어 Slurm 스케줄러에 작업을 제출하는 것입니다.
- 작업 할당: 다음 단계에서는 Slurm 스케줄러가 필요한 노드, CPU 및 메모리 수와 같은 작업의 리소스 요구 사항과 파티션 및 시간 제한과 같은 다른 제약 조건을 검토하는 작업이 포함됩니다. 이런 요구 사항에 따라 스케줄러는 현재 클러스터 사용량 및 기타 보류 중인 작업을 고려하여 작업에 할당할 가장 적합한 리소스를 결정합니다.
- 작업 큐: 스케줄러는 요청된 리소스를 사용할 수 있는지 여부를 결정합니다. 리소스를 즉시 사용할 수 있는 경우 작업이 실행됩니다. 요청된 리소스를 즉시 사용할 수 없는 경우 작업이 큐에 배치됩니다. 스케줄러는 큐에 대기된 작업과 우선 순위를 지속적으로 평가하여 리소스를 사용할 수 있게 되면 할당합니다.
- 작업 실행: 필요한 리소스가 작업에 할당되면 Slurm 작업은 할당된 노드에서 실행을 시작합니다. 스크립트에 지정된 작업은 노드에서 실행됩니다.
- 작업 완료: 마지막 단계는 컴퓨팅 리소스가 클러스터로 다시 릴리스되고 스케줄러가 작업의 상태 완료됨으로 업데이트하는 작업 완료입니다. 작업 출력과 작업 실행 중에 생성될 수 있는 모든 오류 메시지는 지정된 출력 파일에 저장됩니다.
- 작업 계정 및 보고: Slurm은 리소스 사용량과 실행 시간을 포함하여 완료된 작업에 대한 계정 데이터를 생성합니다.
Slurm 명령
명령줄 유틸리티 집합을 사용하여 Slurm을 통해 관리되는 컴퓨팅 클러스터에서 작업을 수행합니다. 다음은 일반적인 Slurm 사용자 명령입니다.
명령 | 함수 |
---|---|
sacct |
이 명령은 활성화되어 있거나 완료된 작업에 대한 작업 및 작업 단계 계정 정보를 보고합니다. |
salloc |
이 명령을 사용하면 실시간으로 작업에 리소스를 할당할 수 있습니다. 병렬 작업을 시작하는 방법으로 셸을 생성하고 srun 명령을 적용할 수 있습니다. |
sattach |
이 명령은 현재 실행 중인 작업이나 작업 단계에 표준 입력, 출력 및 오류 신호 기능을 연결합니다. |
sbatch |
이 명령을 사용하여 나중에 실행할 작업 스크립트를 제출합니다. 이러한 스크립트에는 일반적으로 병렬 작업을 시작하기 위한 하나 이상의 srun 명령이 포함됩니다. |
scancel |
이 명령을 사용하여 필요한 노드에서 파일을 전송합니다. |
scontrol |
이는 Slurm 상태를 보고 수정할 수 있는 Slurm 관리 도구입니다. 대부분의 scontrol 명령에는 루트 권한이 필요합니다. |
sinfo |
이 명령은 Slurm이 관리하는 파티션과 노드에 대한 정보를 표시합니다. |
sprio |
이 명령을 사용하면 작업의 우선 순위에 영향을 미치는 구성 요소에 대한 정보를 볼 수 있습니다. |
squeue |
이 명령을 사용하면 작업 또는 작업 단계의 상태를 볼 수 있습니다. |
srun |
실행 작업을 제출하거나 작업 단계를 실시간으로 트리거하려면 이 명령을 사용합니다. srun 을 사용하여 최소 및 최대 노드 수, 프로세서 수 및 노드 특성과 같은 리소스 요구 사항을 지정할 수 있습니다. |
sstat |
이 명령을 사용하면 실행 중인 작업이나 작업 단계에서 사용된 리소스에 대한 정보를 볼 수 있습니다. |
strigger |
이 명령을 사용하면 노드가 실패하거나 작업이 시간 제한에 도달할 때 수행할 작업 등의 이벤트 트리거를 구성하거나 확인할 수 있습니다. |
sview |
이 명령을 사용하면 Slurm이 관리하는 작업, 파티션 및 노드에 대한 상태 정보를 볼 수 있습니다. |
Slurm 명령에 대한 자세한 내용은 Slurm 빠른 시작 사용자 가이드에서 확인할 수 있습니다.