SLURM srun
과 sbatch
명령 의 차이점을 이해하려고 합니다. 다음 질문에 대한 구체적인 답변보다는 일반적인 설명에 만족할 것입니다. 그러나 여기에 시작점이 될 수있는 몇 가지 구체적인 혼란 지점이 있으며 제가 찾고있는 내용에 대한 아이디어를 제공 할 수 있습니다.
문서 에 따르면 , srun
작업 제출을위한 것이고 sbatch
나중에 실행하기 위해 작업을 제출하기위한 것이지만 실질적인 차이점은 나에게 분명하지 않으며 그들의 행동은 동일하게 보입니다. 예를 들어, 각각 2 개의 CPU가있는 2 개의 노드가있는 클러스터가 있습니다. srun testjob.sh &
5x를 연속으로 실행 하면 CPU가 사용 가능해질 때까지 다섯 번째 작업을 멋지게 큐에 넣을 것 sbatch testjob.sh
입니다.
질문을 좀 더 구체적으로 설명하기 위해 시작하기 좋은 곳 은 다음과 같습니다. 하나로 할 수있는 일 중 다른 하나로는 할 수없는 것은 무엇이며 그 이유는 무엇입니까?
두 명령에 대한 많은 인수가 동일합니다. 가장 관련성을 보이는 사람은 --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. 이것들은 서로 어떻게 관련되어 있으며 srun
vs sbatch
?
한 가지 특별한 차이점은 실행 권한이 없으면 srun
오류가 발생하는 반면 행복하게 실행된다는 것입니다. “내부에서”무슨 일이 일어나고 있는가?testjob.sh
chmod +x testjob.sh
sbatch
설명서에는 스크립트 srun
내부에서 일반적으로 사용되는 내용 도 언급되어 sbatch
있습니다. 이것은 다음과 같은 질문으로 이어집니다. 서로 어떻게 상호 작용하며 각각에 대한 “표준”사용 사례는 무엇입니까? 구체적으로, 내가 단독으로 사용할 srun
수 있습니까?
답변
문서에 따르면
srun is used to submit a job for execution in real time
동안
sbatch is used to submit a job script for later execution.
둘 다 거의 동일한 매개 변수 세트를 허용합니다. 가장 큰 차이점은 srun
대화 형 및 차단 (터미널에서 결과를 얻고 완료 될 때까지 다른 명령을 작성할 수 없음) sbatch
이며 배치 처리 및 비 차단 (결과는 파일에 기록되고 다른 명령을 제출할 수 있음)입니다. 곧).
기호 srun
와 함께 백그라운드에서 사용하는 경우 대화 형이지만 차단되지 않는 &
의 ‘차단’기능을 제거합니다 srun
. 그래도 여전히 대화 형이므로 출력이 터미널을 복잡하게 만들고 srun
프로세스가 터미널에 연결됩니다. 연결을 끊으면 제어권을 잃거나 죽을 수 있습니다 ( stdout
기본적으로 사용하는지 여부에 따라 다름 ). 그리고 작업을 제출하기 위해 연결 한 시스템이 재부팅되면 종료됩니다.
를 사용하는 경우 sbatch
작업을 제출하고 Slurm에서 처리합니다. 결과없이 연결을 끊거나 터미널을 종료 할 수 있습니다. 작업이 더 이상 실행중인 프로세스에 연결되어 있지 않습니다.
하나는 할 수 있지만 다른 하나로는 할 수없는 것은 무엇이며, 그 이유는 무엇입니까?
사용할 수 sbatch
있고 사용할 수 없는 기능 srun
은 작업 지연 입니다. 스크립트 srun
내에서 사용할 수있는 것처럼으로 할 sbatch
수없는 작업은 없습니다 sbatch
.
이들은 서로 어떻게 관련되어 있으며 srun과 sbatch의 차이점은 무엇입니까?
모든 매개 변수는 --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
두 명령에서 동일한 의미를 갖는다. 주목할만한 예외를 제외하고 거의 모든 매개 변수에 해당됩니다 --exclusive
.
“내부에서”무슨 일이 일어나고 있는가?
srun
즉시 원격 호스트에서 스크립트를 실행하고 sbatch
내부 저장소에 스크립트 를 복사 한 다음 작업이 시작될 때 컴퓨팅 노드에 업로드합니다. 제출 스크립트를 제출 한 후 수정하여이를 확인할 수 있습니다. 변경 (참조 고려되지 않습니다 이 ).
서로 어떻게 상호 작용하며 각각에 대한 “표준”사용 사례는 무엇입니까?
일반적으로 sbatch
작업을 제출하는 데 사용 srun
하고 제출 스크립트에서 Slurm이 호출하는대로 작업 단계를 생성합니다. srun
프로세스를 시작하는 데 사용됩니다. 프로그램이 병렬 MPI 프로그램 인 경우 srun
모든 MPI 프로세스 생성을 처리합니다. 그렇지 않은 경우 옵션에 srun
지정된 횟수만큼 프로그램을 실행합니다 --ntasks
. 프로그램은 병렬 여부, 긴 실행 시간을 갖거나 별도의 규정이없는 등, 하나의 실행 여부로 구성되어 여부에 따라 많은 사용 사례가 있습니다 srun
기본적으로 상속은의 관련 옵션 sbatch
또는 salloc
그것을 실행 아래 ( 여기에서 ).
특히 srun을 단독으로 사용할 수 있습니까?
작은 테스트를 제외하고는 그렇지 않습니다. 일반적인 용도는 srun --pty bash
컴퓨팅 작업에서 셸을 얻는 것입니다.
답변
이것은 실제로 질문에 대한 완전한 답은 아니지만 앞으로 누군가에게 도움이 될만한 정보가 더 있습니다.
A로부터 관련 스레드 내가 발견 비슷한 질문 :
간단히 말해서 sbatch 및 salloc은 작업에 리소스를 할당하는 반면 srun은 해당 리소스에 대해 병렬 작업을 시작합니다. 작업 할당 내에서 호출되면 srun은 할당 된 리소스의 일부 또는 전체에서 병렬 작업을 시작합니다. 이 경우 srun은 기본적으로 실행되는 sbatch 또는 salloc의 관련 옵션을 상속합니다. 그런 다음 (일반적으로) 기본적으로 수신하는 것을 재정의하는 다른 옵션을 제공 할 수 있습니다. 작업 내에서 각 srun 호출을 작업 단계라고합니다.
srun은 작업 할당 외부에서 호출 할 수도 있습니다. 이 경우 srun은 리소스를 요청하고 해당 리소스가 부여되면 해당 리소스에서 작업을 단일 작업 및 작업 단계로 시작합니다.
-B 및-독점 옵션에 대해 자세히 설명하는 비교적 새로운 웹 페이지가 있습니다.
doc / html / cpu_management.shtml
SLURM FAQ 페이지 의 추가 정보 .
srun 명령에는 두 가지 작동 모드가 있습니다. 첫째, 기존 작업 내에서 실행되지 않는 경우 (즉, salloc 또는 sbatch에 의해 생성 된 Slurm 작업 할당 내에서 실행되지 않음), 작업 할당을 생성하고 응용 프로그램을 생성합니다. 기존 할당 내에서 실행되는 경우 srun 명령은 응용 프로그램 만 생성합니다. 이 질문에 대해서는 첫 번째 작업 모드 만 다루고 sbatch 및 srun 명령을 사용하여 작업 할당 생성을 비교합니다.
srun 명령은 누군가가 출력을 모니터링하는 대화식 사용을 위해 설계되었습니다. 응용 프로그램의 출력은 일반적으로 사용자의 터미널에서 srun 명령의 출력으로 표시됩니다. sbatch 명령은 나중에 실행하기 위해 스크립트를 제출하도록 설계되었으며 그 출력은 파일에 기록됩니다. 작업 할당에 사용되는 명령 옵션은 거의 동일합니다. 옵션에서 가장 눈에 띄는 차이점은 sbatch 명령은 작업 배열 개념을 지원하지만 srun은 지원하지 않는다는 것입니다. 또 다른 중요한 차이점은 내결함성입니다. sbatch 작업과 관련된 실패는 일반적으로 작업이 다시 대기열에 추가되고 다시 실행되는 반면, srun과 관련된 실패는 일반적으로 사용자가 적절한 방식으로 응답 할 것이라는 예상과 함께 오류 메시지가 생성됩니다.
여기에 또 다른 관련 대화