-gPU
작업에 필요한 GPU 자원의 특성을 지정합니다.
카테고리
리소스
요약
bsub -gpu - | " [num= num_gpus [/task | host ] ] [:mode=shared | exclusive_process ] [:mps=yes [,shared ] [,nocvd ] | no | per_socket [,shared ] [,nocvd ] | per_gpu [,shared ] [,nocvd ] ] [:j_exclusive=yes | no ] [:aff=yes | no ] [:block=yes | no ] [:gpack=yes | no ] [:gvendor=amd | nvidia ] [:gmodel= 모델명 [- 메모리 크기 ]] [:gtile= 타일_번호 |'!' ] [:gmem= 메모리 값 ] [:glink=yes ] [:mig= GI_크기 [/ CI_크기 ]]"설명
- -
- 작업이 작업 레벨 GPU 요구사항을 설정하지 않도록 지정합니다. 문자가 없는 하이픈을 사용하여 클러스터, 큐 또는 애플리케이션 프로파일 레벨에서 정의되는 유효 GPU 요구사항을 설정하십시오.
GPU 요구사항이 클러스터, 큐 및 애플리케이션 프로파일 레벨에서 지정되는 경우 GPU 요구사항의 각 옵션 (num, mode, mps, j_exclusive, gmodel, gtile, gmem및 nvlink) 은 별도로 병합됩니다. 애플리케이션 프로파일 레벨은 클러스터 레벨 기본 GPU 요구사항을 대체하는 큐 레벨을 대체합니다.
클러스터, 큐 또는 애플리케이션 레벨에 정의된 GPU 요구사항이 없는 경우 기본값은
"num=1:mode=shared:mps=no:j_exclusive=no"입니다.
- 숫자=num_gpus[/task | host]
- 작업에 필요한 실제 GPU 수입니다. 기본적으로 이 수는 호스트당입니다. 숫자 뒤에 /task 를 지정하여 태스크별 숫자를 지정할 수도 있습니다.
태스크당 수를 지정했거나 lsb.resources 파일의 ngpus_physical 자원 구성이 PER_TASK로 설정되었거나 RESOURCE_RESERVE_PER_TASK=Y 매개변수가 lsb.params 파일에 설정된 경우, 이 수는 태스크당 요청된 수입니다.
- 모드=공유 | 독점_프로세스
- 작업이 실행 중인 경우 GPU 모드이며 shared 또는 exclusive_process입니다. 기본 모드는 shared입니다.
공유 모드는 Nvidia 또는 AMD DEFAULT 계산 모드에 해당합니다. exclusive_process 모드는 Nvidia EXCLUSIVE_PROCESS 계산 모드에 해당합니다.
참고: AMD GPU를 사용하는 경우 (즉, gvendor=amd 가 지정된 경우) exclusive_process 를 지정하지 마십시오. - mps=yes[, nocvd][, shared] | per_socket[, shared][, nocvd] | per_gpu[, shared][, nocvd] | no
- 작업에 할당된 GPU에 대해 Nvidia MPS (Multi-Process Service) 를 사용 또는 사용 안함으로 설정합니다. MPS를 효과적으로 사용하면 EXCLUSIVE_PROCESS 모드가 모든 MPS 클라이언트에 대해 DEFAULT 모드처럼 작동합니다. MPS는 항상 여러 클라이언트가 MPS 서버를 통해 GPU를 사용하도록 허용합니다.참고: 불일치 동작을 방지하려면 AMD GPU를 사용할 때 (즉, gvendor=amd 가 지정된 경우) mps 를 사용으로 설정하지 마십시오. 클러스터, 큐, 애플리케이션 및 작업 레벨에서 GPU 요구사항을 병합한 결과가 gvendor=amd 이고 mps 가 사용으로 설정된 경우 (예를 들어, gvendor=amd 가 mps=no를 지정하지 않고 작업 레벨에서 지정되었지만 mps=yes 가 애플리케이션, 큐 또는 클러스터 레벨에서 지정된 경우), LSF 는 mps 요구사항을 무시합니다.
MPS는 공유 및 독점 프로세스 GPU둘 다에 유용하며 GPU 리소스를 보다 효율적으로 공유하고 GPU 활용도를 높일 수 있습니다. 자세한 정보 및 제한사항은 Nvidia 문서를 참조하십시오.
MPS를 사용하는 경우 EXCLUSIVE_PROCESS 모드를 사용하여 단일 MPS 서버만 GPU를 사용하는지 확인하십시오. 이는 MPS 서버가 해당 GPU에 대한 모든 CUDA 프로세스 간의 단일 중재 지점이라는 추가 보험을 제공합니다.
공백 없이 쉼표로 share 키워드를 추가하여 MPS 디먼 공유를 사용으로 설정할 수도 있습니다. 예를 들어, mps=yes,shared 는 호스트에서 MPS 디먼 공유를 사용으로 설정합니다. 공유가 사용으로 설정된 경우 동일한 자원 요구사항을 가진 동일한 사용자가 제출한 모든 작업은 호스트, 소켓 또는 GPU에서 동일한 MPS 디먼을 공유합니다.
LSF 는 mps 키워드의 값에 따라 호스트별, 소켓별 또는 GPU별로 MPS 디먼을 시작합니다.
- mps=yes 가 설정되면 LSF 는 작업당 호스트당 하나의 MPS 디먼을 시작합니다.
공유가 사용 가능한 경우 (즉, mps=yes,shared 가 설정된 경우), LSF 는 동일한 자원 요구사항을 가진 동일한 사용자가 제출한 모든 작업에 대해 호스트당 하나의 MPS 디먼을 시작합니다. 이러한 작업은 모두 호스트에서 동일한 MPS 디먼을 사용합니다.
CUDA_VISIBLE_DEVICES 환경 변수가 사용 안함으로 설정된 경우 (즉, mps=yes,nocvd 가 설정된 경우), LSF 는 태스크에 대해 CUDA_VISIBLE_DEVICES<number> 환경 변수를 설정하지 않으므로 LSF MPI 는 태스크에 대해 CUDA_VISIBLE_DEVICES 를 설정하지 않습니다. LSF 는 CUDA_VISIBLE_DEVICES가 아닌 태스크에 대한 CUDA_VISIBLE_DEVICES<number> 환경 변수만 설정합니다. LSF MPI 는 CUDA_VISIBLE_DEVICES<number> 환경 변수를 CUDA_VISIBLE_DEVICES 로 변환하고 태스크에 대해 설정합니다.
- mps=per_socket 가 설정되면 LSF 는 작업당 소켓당 하나의 MPS 디먼을 시작합니다. 공유로 사용 가능한 경우 (즉, mps=per_socket,shared 가 설정된 경우), LSF 는 동일한 자원 요구사항을 가진 동일한 사용자가 제출한 모든 작업에 대해 소켓당 하나의 MPS 디먼을 시작합니다. 이러한 작업은 모두 소켓에 대해 동일한 MPS 디먼을 사용합니다.
- mps=per_gpu 가 설정된 경우 LSF 는 작업당 GPU당 하나의 MPS 디먼을 시작합니다. 공유로 사용으로 설정된 경우 (즉, mps=per_gpu,shared 가 설정된 경우) LSF 는 동일한 자원 요구사항을 가진 동일한 사용자가 제출한 모든 작업에 대해 GPU당 하나의 MPS 디먼을 시작합니다. 이러한 작업은 모두 GPU에 대해 동일한 MPS 디먼을 사용합니다.
중요: MPS와 함께 EXCLUSIVE_THREAD 모드를 사용하는 것은 지원되지 않으며 예기치 않은 동작이 발생할 수 있습니다. - mps=yes 가 설정되면 LSF 는 작업당 호스트당 하나의 MPS 디먼을 시작합니다.
- j_exclusive=yes | 아니오
- 할당된 GPU를 다른 작업에서 사용할 수 있는지 여부를 지정합니다. 모드가 exclusive_process로 설정되면 j_exclusive=yes 옵션이 자동으로 설정됩니다.
- aff=yes | 아니오
- 엄격한 GPU-CPU 선호도 바인딩을 적용할지 여부를 지정합니다. no로 설정된 경우 LSF 는 CPU 선호도를 유지하면서 GPU 선호도를 완화합니다. 기본적으로 aff=yes 는 엄격한 GPU-CPU 선호도 바인딩을 유지하도록 설정되어 있습니다.참고: aff=yes 설정은 block=yes 와 충돌합니다 (태스크 수가 요청된 GPU수보다 큰 경우 할당된 GPU를 블록으로 분배). 이는 엄격한 CPU-GPU 바인딩이 CPU NUMA ID를 기반으로 태스크에 GPU를 할당하기 때문이며, 이는 할당된 GPU를 블록으로 분배하는 것과 충돌합니다. aff=yes 및 block=yes 가 모두 GPU 요구사항 문자열에 지정된 경우 block=yes 설정이 우선하고 엄격한 CPU-GPU 선호도 바인딩이 사용 안함으로 설정됩니다 (즉, aff=no 가 자동으로 설정됨).
- block=yes | 아니오
- 작업 수가 요청된 GPU수보다 큰 경우 블록 분배 즉, 작업의 할당된 GPU를 블록으로 분배할지 여부를 지정합니다. yes로 설정된 경우, LSF 는 태스크 수가 요청된 GPU수보다 큰 경우 작업의 할당된 모든 GPU를 블록으로 분배합니다. 기본적으로 block=no 는 할당된 GPU가 블록으로 분배되지 않도록 설정됩니다.
예를 들어, GPU 작업이 4개의 GPU및 40개의 태스크가 있는 호스트에서 실행하도록 요청하는 경우 블록 분배는 랭크 0-9의 경우 GPU0 , 랭크 10-19의 경우 GPU1 , 탱크 20-29의 경우 GPU2 , 랭크 30-39의 경우 GPU3 을 지정합니다.
참고: block=yes 설정은 aff=yes (엄격한 CPU-GPU 선호도 바인딩) 과 충돌합니다. 이는 엄격한 CPU-GPU 바인딩이 CPU NUMA ID를 기반으로 태스크에 GPU를 할당하기 때문이며, 이는 할당된 GPU를 블록으로 분배하는 것과 충돌합니다. block=yes 및 aff=yes 가 모두 GPU 요구사항 문자열에 지정된 경우 block=yes 설정이 우선하고 엄격한 CPU-GPU 선호도 바인딩이 사용 안함으로 설정됩니다 (즉, aff=no 가 자동으로 설정됨). - gpack=yes | 아니오
- 공유 모드 작업 전용입니다. 팩 스케줄링을 사용할지 여부를 지정합니다. yes로 설정된 경우 LSF 는 여러 공유 모드 GPU 작업을 할당된 GPU에 압축합니다. LSF 는 다음과 같이 공유 모드 GPU를 스케줄합니다.
- LSF 는 이미 실행 중인 작업이 있는 공유 GPU의 수를 기반으로 한 후 독점적이지 않은 GPU의 수를 기준으로 후보 호스트를 정렬합니다 (가장 큰 항목에서 가장 작은 항목 순으로).
order [] 키워드가 자원 요구사항 문자열에 정의된 경우, order []를 정렬한 후 LSF 는 gpack 정책을 기준으로 후보 호스트를 다시 정렬합니다 (이미 실행 중인 작업이 있는 공유 GPU를 기준으로 한 후 독점적이지 않은 GPU수를 기준으로). gpack 정책 정렬 우선순위가 order [] 정렬보다 높습니다.
- LSF 는 실행 중인 작업 수를 기반으로 각 호스트의 후보 GPU를 정렬합니다 (가장 큰 GPU에서 가장 작은 GPU까지).
스케줄링 후에 공유 모드 GPU 작업은 새 공유 GPU가 아니라 먼저 정렬되는 할당된 공유 GPU에 압축됩니다.
Docker 속성 선호도가 사용으로 설정된 경우 후보 호스트의 순서는 GPU별로 정렬하기 전에 Docker 속성 선호도별로 정렬됩니다.
기본적으로 gpack=no 는 팩 스케줄링이 사용되지 않도록 설정되어 있습니다.
- LSF 는 이미 실행 중인 작업이 있는 공유 GPU의 수를 기반으로 한 후 독점적이지 않은 GPU의 수를 기준으로 후보 호스트를 정렬합니다 (가장 큰 항목에서 가장 작은 항목 순으로).
- g벤더=AMD | nvidia
- GPU 공급업체 유형을 지정합니다. LSF 는 지정된 벤더 유형으로 GPU를 할당합니다.
amd 를 지정하여 AMD GPU를 요청하거나 nvidia 를 지정하여 Nvidia GPU를 요청하십시오.
기본적으로 LSF 는 Nvidia GPU를 요청합니다.
- gmodel=모델_이름 [ -mem_size ]
- 특정 모델 이름 및 선택적으로 해당 총 GPU 메모리를 사용하여 GPU를 지정합니다. 기본적으로 LSF 는 GPU를 동일한 모델 (사용 가능한 경우) 로 할당합니다.
gmodel 키워드는 다음 형식을 지원합니다.
- gmodel=모델_이름
- 지정된 브랜드 및 모델 이름 (예: TeslaK80) 을 사용하여 GPU를 요청합니다.
- gmodel=short_model_name
- 특정 브랜드 이름 (예: Tesla, Quadro, NVS) 을 사용하여 GPU를 요청합니다. 또는 모델 유형 이름 (예: K80, P100).
- gmodel= 모델_이름 - 메모리_크기
- 지정된 브랜드 이름 및 총 GPU 메모리 크기를 사용하여 GPU를 요청합니다. GPU 메모리 크기는 M, G, T, MB, GB및 TB (예: 12G) 를 포함하는 숫자 및 해당 단위로 구성됩니다.
각 호스트에서 사용 가능한 GPU 모델 이름을 찾으려면 lsload –gpuload, lshosts –gpu또는 bhosts -gpu 명령을 실행하십시오. 모델 이름 문자열에 공백 문자가 포함되어 있지 않습니다. 또한 슬래시 (/) 및 하이픈 (-) 문자는 밑줄 문자 (_) 로 대체됩니다. 예를 들어, GPU 모델 이름 "Tesla C2050 / C2070” LSF에서 "TeslaC2050_C2070" 로 변환됩니다.
- gMEM=MEM_값
작업에 필요한 각 GPU의 GPU 메모리를 지정하십시오. mem_value 의 형식은 다른 자원 값과 동일합니다 (예:mem또는swap) 작업 자원 요구사항의 rusage 섹션에서 (-R).
- gtile= ! | tile_num
- 소켓당 GPU수를 지정합니다. 호스트의 소켓당 GPU수를 명시적으로 정의하는 숫자를 지정하거나 느낌표 (!) 를 지정하여 LSF 가 호스트의 모든 소켓을 따라 GPU를 균등하게 나누는 숫자를 자동으로 계산할 수 있도록 하십시오. LSF 는 연관관계 작업에 대해서도 gtile 요구사항을 보장합니다. 이는 gtile 요구사항을 충족할 수 없는 경우 LSF 가 GPU의 선호도를 할당된 CPU에 할당하지 않을 수 있음을 의미합니다.
선호도 작업에 대해 gtile 키워드가 지정되지 않은 경우 LSF 는 GPU를 할당한 소켓에 충분한 GPU를 할당하려고 시도합니다. 최적 소켓에 GPU가 충분하지 않으면 작업이 이 호스트로 이동할 수 없습니다.
비선호도 작업에 대해 gtile 키워드가 지정되지 않은 경우 LSF 는 동일한 소켓에 충분한 GPU를 할당하려고 시도합니다. 이를 사용할 수 없는 경우 LSF 는 별도의 GPU에 GPU를 할당할 수 있습니다.
- nvlink=예
- LSF, 버전 10.1 수정팩 11에서 더 이상 사용되지 않습니다. 대신 glink 키워드를 사용하십시오. GPU간 NVLink 연결에 대한 작업 적용을 사용으로 설정합니다. LSF 는 강제 실행 중인 NVLink 연결을 사용하여 GPU를 할당합니다.
- glink=예
- GPU간의 특수 연결에 대한 작업 적용을 사용으로 설정합니다. LSF 는 GPU 공급업체에 특정한 특수 연결을 사용하여 GPU를 할당해야 합니다.
작업이 AMD GPU를 요청하는 경우 LSF 는 xGMI 연결을 사용하여 GPU를 할당해야 합니다. 작업이 Nvidia GPU를 요청하는 경우 LSF 는 NVLink 연결을 사용하여 GPU를 할당해야 합니다.
더 이상 사용되지 않는 nvlink 키워드와 함께 glink 를 사용하지 마십시오.
기본적으로 LSF 는 이러한 연결에 GPU가 충분하지 않은 경우 특수 연결 없이 GPU를 할당할 수 있습니다.
- mig=GI_size [ /CI_size ]
- Nvidia MIG (Multi-Instance GPU) 디바이스 요구사항을 지정합니다.
MIG 작업에 대해 요청된 GPU 인스턴스 크기를 지정합니다. 유효한 GPU 인스턴스 크기는 1, 2, 3, 4, 7입니다.
선택 사항으로, 지정된 GPU 인스턴스 크기 뒤에 슬래시 문자(/)를 붙여 요청된 컴퓨팅 인스턴스 크기를 지정합니다. 요청된 컴퓨팅 인스턴스 크기는 요청된 GPU 인스턴스 크기보다 작거나 같아야 합니다. 또한 Nvidia MIG는 GPU/컴퓨팅 인스턴스 크기 조합 4/3, 7/5, 7/6을 지원하지 않습니다. 이를 지정하지 않으면 기본 계산 인스턴스 크기는 1입니다.
GPU_REQ_MERGE 매개변수가 lsb.params 파일에서 Y 또는 y 로 정의되고 GPU 요구사항이 다중 레벨 (최소 두 개의 기본 클러스터, 큐, 애플리케이션 프로파일 또는 작업 레벨 요구사항) 에서 지정되는 경우 GPU 요구사항의 각 옵션이 개별적으로 병합됩니다. 작업 레벨은 기본 클러스터 GPU 요구사항을 대체하는 큐 레벨을 대체하는 애플리케이션 레벨을 대체합니다. 예를 들어, GPU 요구사항의 mode 옵션이 -gpu 옵션에 정의되고 mps 옵션이 큐에 정의된 경우 작업 레벨의 모드 및 큐의 mps 값이 사용됩니다.
GPU_REQ_MERGE 매개변수가 lsb.params 파일에서 Y 또는 y 로 정의되지 않고 GPU 요구사항이 다중 레벨 (최소한 두 개의 기본 클러스터, 큐, 애플리케이션 프로파일 또는 작업 레벨 요구사항) 에서 지정되는 경우, 전체 GPU 요구사항 문자열이 대체됩니다. 전체 작업 레벨 GPU 요구사항 문자열은 기본 GPU 요구사항을 대체하는 큐 레벨을 대체하는 애플리케이션 레벨을 대체합니다.
esub 매개변수 LSB_SUB4_GPU_REQ 는 -gpu 옵션의 값을 수정합니다.
LSF 는 먼저 토폴로지 요구사항을 충족하는 GPU를 선택합니다. 선택된 GPU의 GPU 모드가 요청된 모드가 아닌 경우 LSF 는 GPU를 요청된 모드로 변경합니다. 예를 들어, LSF 가 공유 GPU가 필요한 작업에 exclusive_process GPU를 할당하는 경우 LSF 는 작업이 시작되기 전에 GPU 모드를 공유로 변경한 후 작업이 완료되면 모드를 다시 exclusive_process 로 변경합니다.
GPU 요구사항은 작업에 대한 rusage 자원 요구사항으로 변환됩니다. 예를 들어, num=2 는 다음으로 변환됩니다.rusage[ngpus_physical=2]. bjobs, bhist및 bacct 명령을 사용하여 병합된 자원 요구사항을 확인하십시오.
복합 GPU 요구사항 (다른 호스트의 작업에 대한 다른 GPU 요구사항 또는 병렬 작업의 다른 파트에 대한 다른 GPU 요구사항) 및 대체 GPU 요구사항 (실행할 작업에 대해 둘 이상의 GPU 요구사항 세트가 허용될 수 있는 경우) 을 포함하여 bsub -gpu 옵션 및 GPU_REQ 매개변수 구문이 포함할 수 없는 복잡한 GPU 요구사항이 있을 수 있습니다. 복합 GPU 요구사항의 경우 bsub -R 명령 옵션을 사용하거나 lsb.applications 또는 lsb.queues 파일에서 RES_REQ 매개변수를 사용하여 자원 요구사항 문자열을 정의하십시오.
예
bsub -gpu - ./appbsub -gpu "num=2:mode=exclusive_process:mps=yes" ./appbsub -gpu "num=2:mode=shared:j_exclusive=yes" ./appbsub -gpu "num=3:mode=shared:j_exclusive=no" ./appbsub -gpu "num=4:mode=exclusive_process" ./appbsub -gpu "num=2:mode=exclusive_process" -n2 -R "span[ptile=1] affinity[core(1)]" ./appbsub -gpu "num=2:mig=3/2" ./app관련 참조
lsf.conf 파일의 LSB_GPU_REQ 매개변수 및 lsb.queues 및 lsb.applications 파일의 GPU_REQ 매개변수