SLURM: 표준 출력 이름 사용자 정의

SLURM: 표준 출력 이름 사용자 정의

SLURM 작업을 실행할 때 sbatchslurm은 slurm-102432.out(slurm-jobid.out)과 유사한 표준 출력 파일을 생성합니다. (yyyymmddhhmmss-jobid-jobname.txt)로 사용자 정의하고 싶습니다. 어떻게 해야 하나요?

sbatch아니면 더 일반적으로 매개변수에 계산된 변수를 포함하려면 어떻게 해야 합니까 -o?

script.sh에서 다음을 시도했습니다.

#SBATCH -p core
#SBATCH -n 6
#SBATCH -t 1:00:00
#SBATCH -J indexing
#SBATCH -o "/home/user/slurm/$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt"

그러나 그것은 작동하지 않았습니다. 새 디렉토리에 있는 파일의 위치는 정확하지만 파일 이름은 문자 그대로의 줄입니다 $(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt.

/home/user/slurm/그래서 저는 다음과 같은 파일 이름을 가진 디렉터리에 표준 출력 파일을 저장하는 방법을 찾고 있습니다.20160526093322-10453-indexing.txt

답변1

이것이 내가 이전 답변에서 결론을 내린 것입니다.

  • %j작업 ID 제공
  • %x직위를 부여하세요
  • 필요한 형식으로 날짜를 얻는 방법을 모르겠습니다. 작업 ID는 실행 전반에 걸쳐 고유 식별자 역할을 하며 파일 수정 날짜는 향후 분석을 위해 날짜를 캡처합니다.

내 SBATCH 마법은 다음과 같습니다.

#SBATCH --output=R-%x.%j.out
#SBATCH --error=R-%x.%j.err

R-모든 항목을 쉽게 이동하거나 삭제할 수 있도록 접두사로 추가하는 것을 선호합니다.R-*

답변2

적어도 당신이 원하는 방식으로는 할 수 없습니다. 이 #SBATCH줄은 명령에 의해 해석되는 쉘 주석이며 sbatch, 여기서는 쉘 코드를 실행할 수 없습니다.

또한 sbatch옵션 -o은 매우 제한된 대체 기호 집합만 이해합니다(아래 발췌 맨페이지 참조).

아마도 원하는 것과 가장 가까운 방법은 sbatch작업 ID, 작업 이름, 현재 날짜 및 시간을 텍스트 파일(예: timestamp<TAB>jobid<TAB>jobname)에 추가하는 래퍼 스크립트에서 실행한 다음 다음을 사용하는 것 입니다.작업이 완료된 후출력 파일의 이름을 바꿉니다.

time_t 또는 "epoch 이후의 초"는 date +%s스크립트에서 가장 유용한 날짜/시간 형식입니다. 먼저 구문 분석하지 않고도 원하는 방식으로 쉽게 인쇄할 수 있습니다.

squeue -t BF,CA,CD,F,NF,PR,TO해당 텍스트 파일을 통과하여 더 이상 실행되지 않고(검사를 사용하여) 아직 이름이 변경되지 않은 각 작업 ID의 이름을 바꾸는 스크립트를 작성하는 것은 어렵지 않습니다.

참고로 매뉴얼 페이지에는 다음과 sbatch같이 나와 있습니다.

-o, --output=

배치 스크립트의 표준 출력을 "파일 이름 패턴"에 지정된 파일 이름에 직접 연결하도록 Slurm에 지시합니다. 기본적으로 표준 출력과 표준 오류는 모두 동일한 파일로 전달됩니다. 작업 배열의 경우 기본 파일 이름은 이며 slurm-%A_%a.out작업 ID 및 배열 인덱스로 대체됩니다 %A. %a다른 작업의 경우 기본 파일 이름은 slurm-%j.out작업 %jID로 대체됩니다. --input option파일 이름 지정 옵션은 을 참조하십시오.

그리고 -i다음과 같이 적혀 있기 때문입니다.

-i, --input=

배치 스크립트의 표준 입력을 "파일 이름 패턴"에 지정된 파일 이름에 직접 연결하도록 Slurm에 지시합니다. 기본적으로 배치 스크립트는 표준 입력에서 열리고 표준 출력과 표준 오류는 모두 아래에 설명된 대로 작업 할당 번호로 대체되는 이름 /dev/null의 파일로 전달됩니다 .slurm-%j.out%j

파일 이름 패턴에는 퍼센트 기호 뒤에 문자가 오는 대체 기호가 하나 이상 포함될 수 있습니다 %(예 %j: ).

지원되는 대체 기호는 다음과 같습니다.

%A Job array's master job allocation number.
%a Job array ID (index) number.
%j Job allocation number.
%N Node name. Only one file is created, so %N will be replaced
   by the name of the first node in the job, which is the one
   that runs the script.
%u User name.

답변3

이 명령에 대한 문서는 sbatch허용되는 문자 대체의 전체 목록을 제공합니다.스배치 매뉴얼 페이지

파일 이름 패턴 sbatch를 사용하면 파일 이름 패턴에 하나 이상의 대체 기호(예: 퍼센트 기호 "%" 뒤에 문자(예: %j))를 포함할 수 있습니다.

\\ 대체 기호를 처리하지 마십시오.

%% 수치"%".

%A 작업 배열의 기본 작업 할당 번호입니다.

%a 작업 배열 ID(인덱스) 번호입니다.

%J 실행 중인 작업의 jobid.stepid입니다. (예: "128.0")

실행 중인 작업의 %j 작업 ID입니다.

%N 짧은 호스트 이름. 이렇게 하면 각 노드에 대해 별도의 IO 파일이 생성됩니다.

%n 현재 작업과 관련된 노드 식별자(예: "0"은 실행 중인 작업의 첫 번째 노드입니다.) 이렇게 하면 각 노드에 대해 별도의 IO 파일이 생성됩니다.

%s 실행 중인 작업의 stepid입니다.

%t 현재 작업에 상대적인 작업 식별자(순위)입니다. 이렇게 하면 각 작업에 대해 별도의 IO 파일이 생성됩니다.

%u 사용자 이름.

%x 작업 이름.

백분율 기호 문자와 형식 지정자 사이의 숫자를 사용하여 IO 파일 이름의 결과를 0으로 채울 수 있습니다. 형식 지정자가 숫자가 아닌 데이터(예: %N)에 해당하는 경우 이 숫자는 무시됩니다.

아래 목록은 작업 ID가 128이고 단계 ID가 0인 4태스크 작업 단계에 대해 형식 문자열을 사용하는 방법에 대한 몇 가지 예입니다.

일%J.아웃

job128.0.out

작업 %4j.out

직업 0128.out

작업 %j-%2t.out

job128-00.out, job128-01.out,...

답변4

이것은 다소 흥미로운 새로운 답변입니다. 이 프로세스 중에는 로그 파일의 이름을 변경할 수 없으며 나중에 변경하는 것은 sbatch 명령을 더 많은 코드로 래핑해야 하기 때문에 이상적이지 않습니다. 대신, sbatch 로그 파일에 "링크된" 원하는 이름으로 새 로그 파일을 생성합니다. 로그 파일은 원하는 이름을 갖게 되며 sbatch 로그 파일이 업데이트되면 업데이트됩니다. 코드 끝에서 sbatch 로그 파일을 삭제하면 링크된 파일만 남게 됩니다. 물론 프로세스가 실행되는 동안 두 개의 로그 파일이 있지만 이는 나쁘지 않습니다.

#SBATCH -o something%j.log
[...]
ln -f something${SLURM_JOB_ID}.log coolName.log
[...]
rm something${SLURM_JOB_ID}.log

관련 정보