HTCondor 사용법: 두 판 사이의 차이

3,693 바이트 추가됨 ,  2023년 4월 10일 (월)
편집 요약 없음
편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
본 문서에서는 HTCondor (HT: High Throughput) 를 사용하는 방법에 대해 다룹니다. HTCondor 가 기구축된 클러스터를 활용하는 사용자 측면에서 다룹니다.
본 문서에서는 HTCondor (HT: High Throughput) 를 사용하는 방법에 대해 다룹니다. HTCondor 가 기구축된 클러스터를 활용하는 사용자 측면에서 다룹니다. HTCondor 는 한개 또는 한개 이상의 컴퓨터로 구성된 클러스터의 작업을 관리하는 프로그램으로서 CERN lxplus, NERSC 등 초대형 클러스터부터 kCMS, koALICE 나 각 연구실의 클러스터에서도 광범위하게 활용되고 있습니다.


HTCondor 는 한개 또는 한개 이상의 컴퓨터로 구성된 클러스터의 작업을 관리하는 프로그램으로서 CERN lxplus 부터, NERSC 초대형 클러스터부터 kCMS, koALICE 나 각 연구실의 클러스터에서도 광범위하게 활용되고 있습니다.
''다음과 같은 사전 지식이 필요합니다.''
 
* 컴퓨터 프로그램을 컴파일하여 실행파일을 만들수 있거나, ROOT 를 활용하여 매크로를 실행할 수 있을 것
* 파일 입출력 (txt, root 파일 무관)
* 파일 실행 (Unix or Unix-like system 에서 bash shell 을 통한)
* Shell script 를 실행할 수 있을 것
* mv, cp
* 상대 경로, 절대 경로


HTCondor 를 활용하여 프로그램을 병렬작동하기 위해서는 다음 과정을 따릅니다.
HTCondor 를 활용하여 프로그램을 병렬작동하기 위해서는 다음 과정을 따릅니다.
178번째 줄: 185번째 줄:


=== 출력 파일 구분 ===
=== 출력 파일 구분 ===
'''구동하는 파일이나, 입력 파일을 노드에 복사'''한 경우 그 파일을 삭제하여야만 합니다. (그렇지 않으면 output file 로서 UI 머신에 카피됩니다.) 또는, 출력 파일명이 개별 작업별로 구별되지 않는 경우 그 파일명을 구별하기 위한 이름바꾸기를 해야합니다. 파일 삭제가 필요한 경우 rm -rf 를 쓰면 되고, 파일명 변경이 필요한 경우 mv 를 하면 됩니다. 다만, '''클러스터 노드의 폴더 측면에서 생각해야만 합니다.''' 상대 경로로 작업하는 것으로 생각하면 됩니다.


== condor_submit ==
== condor_submit ==
condor_submit
HTCondor 을 통한 작업을 진행하기 위해서는 condor_submit 를 통해 필요 사항을 전달해야합니다. 일반적으로는, condor_submit 에 맞는 [https://htcondor.readthedocs.io/en/latest/man-pages/condor_submit.html#submit-description-file-commands submit description file] 을 만들어 진행합니다. htcondor python api 를 통해 submit 하는 경우도 있습니다만, 일반적이지는 않습니다.
 
=== 사전 작업 ===
 
* 출력 폴더 생성 및 위치 파악
** Log (Condor 작업 구동 로그), Output(Condor 작업 stdout 스트림), Error(Condor 작업 stderr 스트림)
** output_destination (출력된 파일이 어디로 갈 지 경로)
* 구동할 실행파일 파악 (Executable)


=== 숫자로 병렬화한 경우 ===
=== 병렬화에 따른 queue 와 argument 구성 ===


=== 이름으로 병렬화한 경우 ===
==== 숫자로 병렬화한 경우 ====


=== ROOT 병렬화 ===
==== 이름으로 병렬화한 경우 ====
 
==== ROOT 병렬화 ====
 
=== 이외에 필요할 수 있는 설정 ===
getenv
 
stream_output
 
stream_error
 
accounting_group
 
=== 예시 ===
 
 
== 출력 파일 병합 ==


== 자동화 ==
== 자동화 ==
HTCondor 에 필요한 여러 작업을 한번에 할 수 있도록, 다음과 같이 하나의 shell script 로 자동화할 수 있습니다.<syntaxhighlight lang="shell">
#! /bin/bash
# USER DEFINED AREA
WORKDIR=$(date +%y%m%d%H%M%S)
ExeDir="/absolute/path/to/directory/executable/contained/"
Executable="myexe.exe"
NJOBQUUE=2000
#########################################
# Make Directories
mkdir -p $WORKDIR/log $WORKDIR/err $WORKDIR/out $WORKDIR/output
#########################################
# Make Merge Script
cat <<EOF > $WORKDIR/merge
#!/bin/bash
echo "MERGING FILES IN " $(pwd)/$WORKDIR/output/*.root
hadd merge.root $(pwd)/$WORKDIR/output/*.root
EOF
chmod 755 $WORKDIR/merge
chmod +x  $WORKDIR/merge
#########################################
# make condor.script
cat <<EOF > condor.script
Universe = vanilla
Executable = ${ExeDir}${Executable}
Log = ${WORKDIR}/log/\$(Cluster)_\$(ProcId).log
Output = ${WORKDIR}/out/\$(Cluster)_\$(ProcId).log
Error = ${WORKDIR}/err/\$(Cluster)_\$(ProcId).log
should_transfer_files = YES
when_to_transfer_output = ON_EXIT_OR_EVICT
JobSuccessExitCode = 0
on_exit_remove    = (ExitBySignal == False) && (ExitCode == 0)
max_retries        = 32
requirements      = Machine =!= LastRemoteHost
# Passing ProcID as argument -s for random seeding, -o for naming individial output file.
arguments= -s \$(ProcID) -o ./result_\$(ProcId).root
output_destination=file://${PWD}/${WORKDIR}/output/
getenv = true
# Watch out to use stream; It needs I/O throughput
# stream_output = true #default false
# stream_error  = true #default false
Queue $NJOBQUUE
EOF
#########################################
# Queue randseed from $INPUT_FILE
cp condor.script ${WORKDIR}/condor.script
condor_submit condor.script
</syntaxhighlight>


== 주의 사항 ==
== 주의 사항 ==