CycleCloud GridEngine 클러스터
클러스터 정의에서 "run_list"을 수정하여 Azure CycleCloud 클러스터에서 그리드 스케줄러(그리드 엔진)를 쉽게 사용하도록 설정할 수 있습니다. 그리드 엔진 클러스터의 두 가지 기본 구성 요소는 그리드 엔진 소프트웨어가 실행되는 공유 파일 시스템을 제공하는 '마스터' 노드와 공유 파일 시스템을 탑재하고 제출된 작업을 실행하는 호스트인 'execute' 노드입니다. 예를 들어 간단한 그리드 엔진 클러스터 템플릿 코드 조각은 다음과 같습니다.
[cluster grid-engine]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[configuration]]]
run_list = role[sge_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[configuration]]]
run_list = role[sge_execute_role]
참고
역할 이름에는 레거시 이유로 'sge'가 포함되어 있습니다. 그리드 엔진은 Sun Microsystems의 제품이었습니다.
CycleCloud에서 정의를 사용하여 클러스터를 가져오고 시작하면 단일 '마스터' 노드가 생성됩니다. 실행 노드는 명령을 통해 cyclecloud add_node
클러스터에 추가할 수 있습니다. 예를 들어 10개 이상의 실행 노드를 추가하려면 다음을 수행합니다.
cyclecloud add_node grid-engine -t execute -c 10
그리드 엔진 자동 크기 조정
Azure CycleCloud는 그리드 엔진에 대한 자동 크기 조정을 지원합니다. 즉, 소프트웨어가 큐의 상태를 모니터링하고 필요에 따라 노드를 켜고 끄고 최적의 시간/비용으로 작업을 완료합니다. 클러스터 정의에 를 추가하여 Autoscale = true
그리드 엔진에 대해 자동 크기 조정을 사용하도록 설정할 수 있습니다.
[cluster grid-engine]
Autoscale = True
기본적으로 그리드 엔진 큐에 제출된 모든 작업은 'execute' 형식의 머신에서 실행됩니다. 이러한 작업은 'execute'라는 노드 배열로 정의된 컴퓨터입니다. 'execute'라는 이름으로 제한되지 않으며 작업을 실행하고 자동 크기 조정을 위해 단일 유형의 컴퓨터 구성으로 제한되지도 않습니다.
예를 들어 다른 유형의 작업이 GPU 컴퓨터를 사용할 수 있지만 표준 CPU를 사용하는 '정상' 작업을 실행하기 위한 두 개의 노드 정의가 있는 클러스터가 있는 경우가 일반적일 수 있습니다. 이 경우 일반 작업과 GPU 작업 모두에 따라 독립적으로 큐 크기를 조정하여 작업 큐를 사용할 수 있는 각 컴퓨터의 양이 적절한지 확인하려고 합니다. 예제 정의는 다음과 같습니다.
[cluster grid-engine]
Autoscale = True
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A3 # 4 cores
[[[configuration]]]
run_list = role[sge_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[configuration]]]
run_list = role[sge_execute_role]
[[nodearray gpu]]
MachineType = Standard_NV12 # 2 GPUs
ImageName = cycle.image.centos7
# Set the number of cores to the number of GPUs for autoscaling purposes
CoreCount = 2
[[[configuration]]]
run_list = role[sge_execute_role]
gridengine.slot_type = gpu
gridengine.slots = 2
위의 예제에는 이제 두 개의 노드 배열이 있습니다. 하나는 '표준' 실행 노드 배열이고, 두 번째 노드 배열은 'gpu'로 명명되어 두 개의 Nvidia GPU(Azure의 Standard_NV12)가 있는 MachineType을 제공합니다. 또한 구성 섹션에는 'csge:sgeexec' 레시피 외에 두 개의 새 항목이 있습니다. 를 추가 gridengine.slot_type = gpu
하면 그리드 엔진 스케줄러에 이러한 노드의 이름을 'gpu' 노드로 지정해야 하므로 'gpu' 작업만 실행해야 합니다. 'gpu' 이름은 임의이지만 노드를 설명하는 이름이 가장 유용합니다. 이 유형의 노드가 한 번에 두 개의 작업만 실행할 수 있도록 소프트웨어에 지시하는 를 설정합니다 gridengine.slots = 2
(Standard_NV12 GPU가 2개만 있음). 기본적으로 그리드 엔진의 노드당 슬롯 수는 시스템의 CPU 수이며, 이 경우 노드에서 동시에 실행할 작업이 너무 많습니다. 위의 예제에서 는 CoreCount=2
MachineType에서 사용할 수 있는 GPU 수와 일치하도록 nodearray에 설정되므로 CycleCloud가 GPU와 CPU 수에서 해당 배열의 크기를 올바르게 조정할 수 있습니다.
명령을 실행하여 슬롯 수를 확인하고 머신에 slot_type 수 있습니다.
-bash-4.1# qstat -F slot_type
queuename qtype resv/used/tot. load_avg arch states
---------------------------------------------------------------------------------
all.q@ip-0A000404 BIP 0/0/4 0.17 linux-x64
hf:slot_type=execute
---------------------------------------------------------------------------------
all.q@ip-0A000405 BIP 0/0/2 2.18 linux-x64
hf:slot_type=gpu
---------------------------------------------------------------------------------
all.q@ip-0A000406 BIP 0/0/4 0.25 linux-x64
지정한 각 'slot_type' 중 하나(실행 및 gpu)가 있고 'execute' 슬롯의 슬롯 수는 컴퓨터의 CPU 수인 4입니다. 'gpu' 슬롯 유형의 슬롯 수는 클러스터 구성 템플릿에 지정된 2입니다. 세 번째 컴퓨터는 작업을 실행하지 않는 마스터 노드입니다.
그리드 엔진 고급 사용
위의 구성 설정을 사용하면 노드 및 노드 배열을 고급으로 사용자 지정할 수 있습니다. 예를 들어 작업에 각각 10GB와 같은 특정 양의 메모리가 필요한 경우 60GB 메모리로 컴퓨터를 시작하는 실행 nodearray를 정의한 다음 구성 옵션을 gridengine.slots = 6
추가하여 이 유형의 노드에서 6개의 작업만 동시에 실행할 수 있도록 합니다(각 작업에는 10GB 이상의 메모리가 있어야 함).
그리드 엔진의 그룹화된 노드
병렬 작업이 그리드 엔진에 제출되면 CycleCloud에서 사용할 기본 자동 크기 조정 동작은 각 MPI 작업을 그룹화된 노드 요청으로 처리하는 것입니다. 그룹화된 노드는 긴밀하게 결합되어 있으며 MPI 워크플로에 이상적으로 적합합니다.
그룹화된 노드 집합이 그리드 엔진 클러스터에 조인하면 각 노드의 그룹 ID가 복합 값 affinity_group
의 값으로 사용됩니다. 작업에 대해 를 affinity_group
지정해야 하므로 그리드 엔진 스케줄러는 작업이 동일한 그룹에 있는 컴퓨터에만 배치되도록 할 수 있습니다.
CycleCloud의 자동화는 병렬 작업이 발생할 때 그룹화된 노드를 자동으로 요청하고 사용 가능한 선호도 그룹에 할당합니다.
그리드 엔진에 작업 제출
그리드 엔진 스케줄러에 작업을 제출하는 가장 일반적인 방법은 명령입니다.
qsub my_job.sh
이 명령은 'execute' 형식의 노드에서 실행되는 작업을 제출합니다. 즉, nodearray 'execute'로 정의된 노드입니다. 위의 'gpu' 노드 형식과 같이 다른 형식의 nodearray에서 작업을 실행하기 위해 제출을 수정합니다.
qsub -l slot_type=gpu my_gpu_job.sh
이 명령은 작업이 'gpu'의 'slot_type'에서만 실행되도록 합니다.
slot_type 생략하면 작업에 'execute'가 자동으로 할당됩니다. slot_type 작업에 자동으로 할당하는 메커니즘은 사용자가 수정할 수 있습니다. 단일 함수 "sge_job_handler"을 정의해야 하는 /opt/cycle/jetpack/config/autoscale.py 에 있는 Python 스크립트를 만들 수 있습니다. 이 함수는 명령의 출력과 유사하게 작업의 사전 표현을 qstat -j JOB_ID
수신하며 작업에 대해 업데이트해야 하는 하드 리소스 사전을 반환해야 합니다. 예를 들어 아래는 작업 이름에 'gpu' 문자가 포함된 경우 'gpu' slot_type 작업을 할당하는 스크립트입니다. 이렇게 하면 사용자가 작업 매개 변수를 수정하지 않고도 자동화된 시스템에서 작업을 제출할 수 있으며 여전히 작업이 실행되고 올바른 노드를 자동 크기 조정할 수 있습니다.
#!/usr/env python
#
# File: /opt/cycle/jetpack/config/autoscale.py
#
def sge_job_handler(job):
# The 'job' parameter is a dictionary containing the data present in a 'qstat -j JOB_ID':
hard_resources = {'slot_type': 'execute', 'affinity_group' : 'default' }
# Don't modify anything if the job already has a slot type
# You could modify the slot type at runtime by not checking this
if 'hard_resources' in job and 'slot_type' in job['hard_resources']:
return hard_resources
# If the job's script name contains the string 'gpu' then it's assumed to be a GPU job.
# Return a dictionary containing the new job_slot requirement to be updated.
# For example: 'big_data_gpu.sh' would be run on a 'gpu' node.
if job['job_name'].find('gpu') != -1:
hard_resources {'slot_type': 'gpu'}
else:
return hard_resources
전달된 'job' 매개 변수는 호출의 데이터를 포함하는 사전입니다 qstat -j JOB_ID
.
{
"job_number": 5,
"job_name": "test.sh",
"script_file": "test.sh",
"account": "sge",
"owner": "cluster.user",
"uid": 100,
"group": "cluster.user",
"gid": 200,
"submission_time": "2013-10-09T09:09:09",
"job_args": ['arg1', 'arg2', 'arg3'],
"hard_resources": {
'mem_free': '15G',
'slot_type': 'execute'
}
}
이 스크립팅 기능을 사용하여 인수, 메모리, 사용자 제출 등의 기타 리소스 요구 사항과 같이 작업에 정의된 매개 변수를 기반으로 slot_type 자동으로 할당할 수 있습니다.
각 'slot_type'의 5개 작업을 제출하려는 경우:
qsub -t 1:5 gpu_job.sh
qsub -t 1:5 normal_job.sh
이제 큐에 10개의 작업이 있습니다. 위에 정의된 스크립트로 인해 이름에 'gpu'가 있는 5개의 작업은 'slot_type=gpu'의 노드에서만 실행되도록 자동으로 구성됩니다. CycleCloud 자동 크기 조정 메커니즘은 5개의 'gpu' 작업과 5개의 '실행' 작업이 있음을 감지합니다. 'gpu' nodearray는 노드당 2개의 슬롯이 있는 것으로 정의되므로 CycleCloud는 이러한 노드 중 3개(5/2=2.5에서 3까지 반올림됨)를 시작합니다. 'execute' nodearray의 컴퓨터 유형에는 각각 4개의 CPU가 있으므로 5개의 일반 작업이 있습니다. CycleCloud는 작업을 처리하기 위해 이러한 노드 중 2개(5/4=1.25에서 2로 반올림됨)를 시작합니다. 새로 시작된 노드가 부팅 및 구성되는 짧은 시간 후에는 10개의 작업이 모두 완료될 때까지 실행된 다음, 클라우드 공급자가 다시 청구하기 전에 5개 노드가 자동으로 종료됩니다.
작업은 1시간의 기간으로 간주됩니다. 작업 런타임이 알려진 경우 자동 크기 조정 알고리즘이 이 정보를 활용할 수 있습니다. 작업 컨텍스트에 추가하여 예상 작업 런타임의 자동 크기 조정을 알릴 수 있습니다. 다음 예제에서는 작업 런타임이 평균 10분이라는 자동 크기 조정을 알려줍니다.
qsub -ac average_runtime=10 job_with_duration_of_10m.sh
그리드 엔진 구성 참조
기능을 사용자 지정하기 위해 토글할 수 있는 그리드 엔진별 구성 옵션은 다음과 같습니다.
SGE-Specific 구성 옵션 | Description |
---|---|
gridengine.slots | 그리드 엔진에 보고할 지정된 노드의 슬롯 수입니다. 슬롯 수는 노드에서 실행할 수 있는 동시 작업 수이며, 이 값은 기본적으로 지정된 컴퓨터의 CPU 수로 설정됩니다. CPU를 기반으로 작업을 실행하지 않고 메모리, GPU 등을 실행하는 경우 이 값을 재정의할 수 있습니다. |
gridengine.slot_type | 노드가 제공하는 '슬롯' 형식의 이름입니다. 기본값은 'execute'입니다. 작업이 하드 리소스 'slot_type='로 태그가 지정되면 해당 작업은 동일한 슬롯 유형의 컴퓨터에서 만 실행됩니다. 이렇게 하면 노드당 서로 다른 소프트웨어 및 하드웨어 구성을 만들고 올바른 유형의 노드에서 적절한 작업이 항상 예약되도록 할 수 있습니다. |
gridengine.ignore_fqdn | 기본값: true입니다. 클러스터의 모든 노드가 단일 DNS 도메인에 속하지 않는 경우 false로 설정합니다. |
gridengine.version | 기본값: '2011.11'. 설치하고 실행할 그리드 엔진 버전입니다. 이는 현재 기본 옵션이며 유일한 옵션입니다. 향후에 그리드 엔진 소프트웨어의 추가 버전이 지원될 수 있습니다. |
gridengine.root | 기본값: '/sched/sge/sge-2011.11' 여기에서 그리드 엔진이 설치되고 시스템의 모든 노드에 탑재됩니다. 이 값은 변경되지 않는 것이 좋지만, 이 값인 경우 클러스터의 모든 노드에서 동일한 값으로 설정해야 합니다. |
CycleCloud는 스케줄러에서 표준 자동 중지 특성 집합을 지원합니다.
attribute | Description |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | 이 노드에서 자동 중지가 사용하도록 설정되어 있나요? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | 노드가 축소되기 전에 작업을 완료한 후 유휴 상태로 앉을 시간(초)입니다. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | 노드가 축소되기 전에 작업을 완료하기 전에 유휴 상태로 앉을 시간(초)입니다. |
알려진 문제
-
qsh
대화형 세션에 대한 명령이 작동하지 않습니다. 대안으로 사용합니다qrsh
. - 컴플렉스는
exclusive=1
자동 크기 조정에서 적용되지 않습니다. 결과적으로 예상보다 적은 수의 노드가 시작될 수 있습니다.
참고
Windows는 공식적으로 지원되는 GridEngine 플랫폼이지만 CycleCloud는 현재 Windows에서 GridEngine 실행을 지원하지 않습니다.
이 페이지는 CycleCloud에서 (Altair) GridEngine을 사용하는 기능 및 구성에 대해 설명합니다.
리소스 구성
cyclecloud-gridengine 애플리케이션은 sge 리소스를 Azure 클라우드 리소스와 일치하여 풍부한 자동 크기 조정 및 클러스터 구성 도구를 제공합니다. 애플리케이션은 CycleCloud UI를 통해 만든 클러스터에 대해 자동으로 배포되거나 기존 클러스터의 모든 Gridengine 관리자 호스트에 설치할 수 있습니다.
cyclecloud-gridengine 설치 또는 업그레이드
cyclecloud-gridengine 번들은 github 에서 릴리스 아티팩트로 사용할 수 있습니다. 설치 및 업그레이드는 동일한 프로세스입니다. 애플리케이션에는 virtualenv를 사용하는 python3이 필요합니다.
tar xzf cyclecloud-gridengine-pkg-*.tar.gz
cd cyclecloud-gridengine
./install.sh
중요한 파일
애플리케이션은 작업, 큐, 복소수 등 호출할 때마다 sge 구성을 구문 분석합니다. 정보는 구성 가능한 수준에서 로그 파일뿐만 아니라 명령의 stderr 및 stdout에 제공됩니다. 인수가 있는 모든 gridengine 관리 명령도 파일에 기록됩니다.
Description | 위치 |
---|---|
자동 크기 조정 구성 | /opt/cycle/gridengine/autoscale.json |
자동 크기 조정 로그 | /opt/cycle/jetpack/logs/autoscale.log |
qconf 추적 로그 | /opt/cycle/jetpack/logs/qcmd.log |
SGE 큐, 호스트 그룹 및 병렬 환경
cyclecloud-gridengine 자동 크기 조정 유틸리티인 azge
는 클러스터 구성에 따라 클러스터에 호스트를 추가합니다. 자동 크기 조정 작업은 다음 작업을 수행합니다.
- 작업 리소스 요청을 읽고 시작할 적절한 VM을 찾습니다.
- VM을 시작하고 VM이 준비될 때까지 기다립니다.
- 작업에서 큐 및 병렬 환경을 읽습니다.
- 큐/pe에 따라 적절한 호스트 그룹에 호스트 할당
- 호스트 그룹을 포함하는 다른 큐뿐만 아니라 클러스터에 호스트를 추가합니다.
short.q라는 큐에 대해 다음 큐 정의를 고려합니다.
hostlist @allhosts @mpihg01 @mpihg02 @lowprio
...
seq_no 10000,[@lowprio=10],[@mpihg01=100],[@mpihg02=200]
pe_list NONE,[@mpihg01=mpi01], \
[@mpihg02=mpi02]
를 통해 qsub -q short.q -pe mpi02 12 my-script.sh
작업을 제출하면 하나의 VM 임대에서 시작되며 클러스터에 추가되면 큐와 병렬 환경에서 모두 사용할 수 있는 호스트 그룹이기 때문에 호스트 그룹 @mpihg02 조인됩니다. 또한 특수 호스트 그룹인 @allhosts 추가됩니다.
pe qsub -q short.q my-script.sh
를 지정하지 않으면 결과 VM이 @allhosts 추가되고 pes가 할당되지 않은 큐의 호스트 그룹이 @lowpriority .
마지막으로 을 사용하여 제출된 qsub -q short.q -pe mpi0* 12 my-script.sh
작업으로 인해 CycleCloud 할당 예측에 따라 VM이 @mpihg01 또는 @mpihg02 추가됩니다.
병렬 환경은 cyclecloud 배치 그룹과 암시적으로 동일합니다. PE의 VM은 동일한 네트워크 내에 있도록 제한됩니다. 배치 그룹을 유지하지 않는 PE를 사용하려는 경우 autoscale.json 을 사용하여 옵트아웃합니다.
여기서는 make pe에 대한 배치 그룹을 옵트아웃합니다.
"gridengine": {
"pes": {
"make": {
"requires_placement_groups": false
}
},
CycleCloud 배치 그룹
CycleCloud 배치 그룹은 SinglePlacementGroup을 사용하여 Azure VMSS에 일대일 매핑 - 배치 그룹의 VM은 Infiniband 패브릭을 공유하고 배치 그룹 내의 VM과만 공유합니다. 이러한 사일로를 직관적으로 유지하기 위해 배치 그룹은 1:1을 Gridengine 병렬 환경과 매핑합니다.
작업에 대한 병렬 환경을 지정하면 스마트 호스트 그룹 할당 논리를 통해 배치 그룹에서 작업이 실행되도록 제한됩니다.
autoscale.json: "required_placement_groups" : false
에서 앞서 언급한 구성을 사용하여 이 동작을 옵트아웃할 수 있습니다.
자동 크기 조정 구성
이 플러그 인은 워크로드의 요구에 맞게 그리드의 크기를 자동으로 조정합니다. autoscale.json 구성 파일은 그리드 엔진 자동 크기 조정기의 동작을 결정합니다.
- cyclecloud 연결 세부 정보 설정
- 유휴 노드에 대한 종료 타이머 설정
- 다차원 자동 크기 조정이 가능하며, 작업 압축에 사용할 특성(예: 슬롯, 메모리)을 설정합니다.
- 관리할 큐, 병렬 환경 및 호스트 그룹 등록
구성 | 유형 | 설명 |
---|---|---|
url | String | CC URL |
username/password | String | CC 연결 세부 정보 |
cluster_name | String | CC 클러스터 이름 |
default_resources | 맵 | 자동 크기 조정을 위해 노드 리소스를 그리드 엔진 호스트 리소스에 연결 |
idle_timeout | Int | 유휴 노드를 종료하기 전에 대기 시간(들) |
boot_timeout | Int | 긴 구성 단계 동안 노드를 종료하기 전에 대기 시간(들) |
gridengine.relevant_complexes | 목록(문자열) | 자동 크기 조정에서 고려해야 할 그리드 엔진 복소수(예: 슬롯) mem_free |
gridengine.logging | 파일 | 로깅 구성 파일의 위치 |
gridengine.pes | 구조체 | PE의 동작 지정(예: requires_placement_group = false) |
자동 크기 조정 프로그램은 관련 리소스만 고려합니다.
추가 자동 크기 조정 리소스
기본적으로 작업에 의해 요청되는 슬롯 수에 따라 크기가 조정된 클러스터입니다. 자동 크기 조정에 다른 차원을 추가할 수 있습니다.
에 대한 m_mem_free
작업 리소스 요청으로 자동 크기 조정하려고 합니다.
-
autoscale.json의
gridengine.relevant_resources
에 추가m_mem_free
-
autoscale.json의 노드 수준 메모리 리소스에 연결
m_mem_free
이러한 특성은 node.*
를 _default/리소스의 값 으로 참조할 수 있습니다.
노드 | 유형 | Description |
---|---|---|
nodearray | String | cyclecloud nodearray의 이름 |
placement_group | String | nodearray 내의 cyclecloud 배치 그룹의 이름 |
vm_size | String | VM 제품 이름(예: "Standard_F2s_v2" |
vcpu_count | Int | 개별 제품 페이지에 표시된 대로 노드에서 사용할 수 있는 가상 CPU |
pcpu_count | Int | 노드에서 사용할 수 있는 물리적 CPU |
메모리 | String | 단위 표시기가 있는 VM에서 사용할 수 있는 대략적 실제 메모리(예: "8.0g") |
추가 특성은 네임스페이 node.resources.*
스에 있습니다(예: 'node.resources).
노드 | 유형 | Description |
---|---|---|
ncpus | String | VM에서 사용할 수 있는 CPU 수 |
pcpus | String | VM에서 사용할 수 있는 실제 CPU 수 |
ngpus | 정수 | VM에서 사용할 수 있는 GPU 수 |
memb | String | 단위 표시기가 있는 VM에서 사용할 수 있는 대략적 실제 메모리(예: "8.0b") |
memkb | String | 단위 표시기가 있는 VM에서 사용할 수 있는 대략적 실제 메모리(예: "8.0k") |
memmb | String | 단위 표시기가 있는 VM에서 사용할 수 있는 대략적 실제 메모리(예: "8.0m") |
memgb | String | 단위 표시기가 있는 VM에서 사용할 수 있는 대략적 실제 메모리(예: "8.0g") |
memtb | String | 단위 표시기가 있는 VM에서 사용할 수 있는 대략적 실제 메모리(예: "8.0t") |
slots | 정수 | ncpus와 동일 |
slot_type | String | 확장에 대한 추가 레이블입니다. 일반적으로 사용되지 않습니다. |
m_mem_free | String | 실행 호스트에 사용 가능한 메모리가 필요합니다(예: "3.0g"). |
mfree | String | _m/_mem/무료와 동일 |
리소스 매핑
default_resources 사용할 수 있는 수학도 있습니다. 특정 노드 배열의 슬롯을 2씩 줄이고 docker 리소스를 모든 노드에 추가합니다.
"default_resources": [
{
"select": {"node.nodearray": "beegfs"},
"name": "slots",
"value": "node.vcpu_count",
"subtract": 2
},
{
"select": {},
"name": "docker",
"value": true
},
노드 vCPU를 복합 슬롯 및 memmb
에 매핑하는 mem_free
것은 일반적으로 사용되는 기본값입니다.
첫 번째 연결이 필요합니다.
"default_resources": [
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
{
"select": {},
"name": "mem_free",
"value": "node.resources.memmb"
}
],
복합에 전체 값과 같지 않은 바로 가기가 있는 경우 default_resources 모두 정의합니다. 여기서 physical_cpu
은 복합 이름입니다.
"default_resources": [
{
"select": {},
"name": "physical_cpu",
"value": "node.pcpu_count"
},
{
"select": {},
"name": "pcpu",
"value": "node.resources.physical_cpu"
}
]
특정 특성에 대한 특정 동작을 원하는 경우 순서 지정이 중요합니다. 다른 모든 nodearray에 대한 기본 슬롯 수를 유지하면서 특정 nodearray에 단일 슬롯을 할당하려면 다음을 수행합니다.
"default_resources": [
{
"select": {"node.nodearray": "FPGA"},
"name": "slots",
"value": "1",
},
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
]
호스트 그룹
CycleCloud 자동 크기 조정기는 작업 요구 사항을 충족하기 위해 노드를 적절한 호스트 그룹에 매핑합니다. 큐, 병렬 환경 및 복소수는 모두 고려됩니다. 대부분의 논리는 적절한 주기클라우드 버킷(및 노드 수량)을 적절한 sge 호스트 그룹과 일치합니다.
제출된 작업의 경우: qsub -q "cloud.q" -l "m_mem_free=4g" -pe "mpi*" 48 ./myjob.sh
CycleCloud는 다음과 같은 호스트 그룹의 교집합을 가져옵니다.
-
cloud.q의 pe_list 포함되며 pe 이름과 일치합니다(예: ).
pe_list [@allhosts=mpislots],[@hpc1=mpi]
- 모든 작업 리소스를 제공하기에 충분한 리소스 및 구독 할당량이 있어야 합니다.
- 호스트 그룹 제약 조건 구성으로 필터링되지 않습니다.
여러 호스트 그룹이 이러한 요구 사항을 충족할 수 있습니다. 이 경우 논리를 선택해야 합니다. 호스트 그룹 멤버 자격의 모호성을 해결하는 세 가지 방법이 있습니다.
- 모호성이 없도록 큐를 구성합니다.
- autoscale.json에 제약 조건을 추가합니다.
- CycleCloud에서 스케줄러 구성을 조정하여
weight_queue_host_sort < weight_queue_seqno
이름 순서대로 일치하는 호스트 그룹을 선택하도록 합니다. - 호스트 그룹 기본 설정을 나타내도록 큐 구성에서 를 설정합니다
seq_no 10000,[@hostgroup1=100],[@hostgroup2=200]
.
호스트 그룹 제약 조건
큐 또는 xproject에서 여러 호스트 그룹을 정의하면 이러한 모든 호스트 그룹에 호스트가 추가될 수 있습니다. 호스트 그룹 제약 조건을 설정하여 어떤 종류의 호스트를 큐에 추가할 수 있는지 제한할 수 있습니다. 노드 속성에 따라 제약 조건을 설정합니다.
"gridengine": {
"hostgroups": {
"@mpi": {
"constraints": {
"node.vm_size": "Standard_H44rs"
}
},
"@amd-mem": {
"constraints" : {
"node.vm_size": "Standard_D2_v3",
"node.nodearray": "hpc"
}
},
}
}
힌트: 를 사용하여 사용 가능한 모든 노드 속성을
azge buckets
검사합니다.
azge
이 패키지에는 명령줄 azge가 함께 제공됩니다. 이 프로그램은 자동 크기 조정을 수행하는 데 사용해야 하며 자동 크기 조정에서 모든 하위 프로세서를 분할했습니다.
이러한 명령은 설정할 gridengine 환경 변수에 의존합니다. 이 호출되는 동일한 프로필 azge
에서 및 qsub
를 호출 qconf
할 수 있어야 합니다.
azge 명령 | Description |
---|---|
validate | 자동 크기 조정기 또는 gridengine에서 알려진 구성 오류 확인 |
jobs | 큐의 모든 작업 표시 |
버킷 | 자동 크기 조정에 사용할 수 있는 리소스 풀 표시 |
nodes | 클러스터 호스트 및 속성 표시 |
demand | 작업 요구 사항을 cyclecloud 버킷에 일치시키고 자동 크기 조정 결과를 제공합니다. |
자동 크기 조정 | 구성에 따라 전체 자동 크기 조정, 시작 및 제거 |
스케줄러 구성(qconf) 또는 자동 크기 조정 구성(autoscale.json)을 수정하거나 처음으로 설정할 때 azge 를 사용하여 자동 크기 조정 동작이 예상과 일치하는지 확인할 수 있습니다. 루트로 다음 작업을 실행할 수 있습니다. 자동 크기 조정 동작을 이해하려면 이러한 동작을 숙지하는 것이 좋습니다.
- 를 실행
azge validate
하여 알려진 문제에 대한 구성을 확인합니다. - 를 실행
azge buckets
하여 CycleCloud 클러스터에서 제공하는 리소스를 검사합니다. - 를 실행
azge jobs
하여 큐에 대기된 작업 세부 정보를 검사합니다. - 실행
azge demand
은 버킷 일치에 대한 작업을 수행하고, 어떤 작업이 어떤 버킷 및 호스트 그룹과 일치하는지 검사합니다. - 를 실행
azge autoscale
하여 노드 할당 프로세스를 시작하거나 조인할 준비가 된 노드를 추가합니다.
그런 다음 이러한 명령이 예상대로 작동하면 루트 crontab에 명령을 추가하여 azge autoscale
진행 중인 자동 크기 조정을 사용하도록 설정합니다. (Gridengine 환경 변수 수크)
* * * * * . $SGE_ROOT/common/settings.sh && /usr/local/bin/azge autoscale -c /opt/cycle/gridengine/autoscale.json
하이브리드 클러스터 만들기
CycleCloud는 클라우드로 버스팅하는 시나리오를 지원합니다. 기본 구성에서는 클라우드 노드에서 $SGE_ROOT
디렉터리를 사용할 수 있다고 가정합니다. 이 가정은 를 gridengine.shared.bin = false
설정하고 gridengine.shared.spool = false
GridEngine을 로컬로 설치하여 완화할 수 있습니다.
간단한 경우 디렉터리를 포함하는 $SGE_ROOT
실행 노드에서 탑재할 수 있는 파일 시스템을 제공하고 선택적 설정에서 해당 탑재를 구성해야 합니다. sched 및 공유 디렉터리의 종속성이 해제되면 기본적으로 클러스터의 일부인 스케줄러 노드를 종료하고 외부 파일 시스템의 구성을 사용할 수 있습니다.
- 새 그리드엔진 클러스터를 만듭니다.
- 반환 프록시를 사용하지 않도록 설정합니다.
- /sched 및 /shared를 외부 파일 시스템으로 대체합니다.
- 클러스터를 저장합니다.
- UI에서 작업으로 스케줄러 노드를 제거합니다.
- 클러스터를 시작하고 노드가 처음에 시작되지 않습니다.
- 새 클러스터를 사용하도록 autoscale.json으로 구성
cyclecloud-gridengine
CycleCloud에서 Univa Grid 엔진 사용
GridEngine용 CycleCloud 프로젝트는 기본적으로 sge-2011.11 을 사용합니다. Altair 라이선스 계약에 따라 자체 Altair GridEngine 설치 관리자를 사용할 수 있습니다.
이 섹션에서는 CycleCloud GridEngine 프로젝트에서 Altair GridEngine을 사용하는 방법을 설명합니다.
필수 구성 요소
이 예제에서는 8.6.1 데모 버전을 사용하지만 모든 ge 버전 > 8.4.0이 지원됩니다.
- 사용자는 UGE 이진 파일을 제공해야 합니다.
- ge-8.6.x-bin-lx-amd64.tar.gz
- ge-8.6.x-common.tar.gz
- CycleCloud CLI를 구성해야 합니다. 설명서는 여기에서 사용할 수 있습니다.
클라우드 사물함에 이진 파일 복사
보완 버전의 AGE(8.6.7-demo)는 CycleCloud와 함께 배포됩니다. 다른 버전을 사용하려면 CycleCloud에서 사용하는 스토리지 계정에 이진 파일을 업로드합니다.
$ azcopy cp ge-8.6.12-bin-lx-amd64.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
$ azcopy cp ge-8.6.12-common.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
클러스터 템플릿에 대한 구성 수정
gridengine 템플릿의 로컬 복사본을 만들고 기본값 대신 UGE 설치 관리자를 사용하도록 수정합니다.
wget https://raw.githubusercontent.com/Azure/cyclecloud-gridengine/master/templates/gridengine.txt
gridengine.txt 파일에서 의 첫 번째 항목을 [[[configuration]]]
찾아 아래 코드 조각과 일치되도록 텍스트를 삽입합니다. 이 파일은 들여쓰기를 구분하지 않습니다.
참고: 구성의 세부 정보, 특히 버전은 설치 관리자 파일 이름과 일치해야 합니다.
[[[configuration gridengine]]]
make = ge
version = 8.6.12-demo
root = /sched/ge/ge-8.6.12-demo
cell = "default"
sge_qmaster_port = "537"
sge_execd_port = "538"
sge_cluster_name = "grid1"
gid_range = "20000-20100"
qmaster_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool/qmaster"
execd_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool"
spooling_method = "berkeleydb"
shadow_host = ""
admin_mail = ""
idle_timeout = 300
managed_fs = true
shared.bin = true
ignore_fqdn = true
group.name = "sgeadmin"
group.gid = 536
user.name = "sgeadmin"
user.uid = 536
user.gid = 536
user.description = "SGE admin user"
user.home = "/shared/home/sgeadmin"
user.shell = "/bin/bash"
이러한 구성은 클러스터가 시작될 때 기본 gridengine 버전 및 설치 위치를 재정의합니다.
클러스터에서 특별히 공유된 /sched
nfs 위치이므로 에서 벗어나는 것은 안전하지 않습니다.