종종 조건을 다르게하여 모델을 학습시켜 비교할 때에, 생각하기 귀찮아서 터미널을 일일히 열어 모든 경우의 스크립트를 실행시켰습니다. 그러다 Bash를 사용하여 조건을 조정하여 (args) 여러 스크립트를 한번에 실행해보니 훨씬 편하더군요.
가령, 아래와 같은 스크립트를 실행한다 합시다. 스크립트를 실행하기 위한 파라미터가 `fusion, feature, is_decay, device` 총 4개라고 할 때에, 각각의 조건이 ` fusion = [1, 2, 3, 4] `, ` feature = [1, 2, 3] `, ` is_decay = [0, 1] ` 그리고 ` device = [0, 1, 2, 3]`로 경우 총 경우의 수는 $4 \times 3 \times 2 = 24$ 가 됩니다 (device는 가용 gpu number임으로 제외). 총 24개의 script를 돌리는건 가능은 하지만, 그다지 신상에 좋은 방법은 아닌듯 합니다.
python3 mlp_train.py --fusion 1 --feature 1 --is_decay 0 --device 0
Bash Script
이 경우 Bash script를 만들어 실행시키면, 터미널 하나로 24개의 스크립트를 동시에 실행이 가능합니다.
#각 조건에 대한 설정
fusions=(1 2 3 4)
features=(1 2 3)
is_decays=(0 1)
for fusion in "${fusions[@]}"; do
for feature in "${features[@]}"; do
for is_decay in "${is_decays[@]}"; do
device=$((fusions - 1)) # device는 적당히 4개로 나누어 실행
python3 mlp_train.py --fusion "$fusion" --feature "$feature" --is_decay "$is_decay" --device "$device" &
done
done
done
wait
위와 같이 `run_experiments.sh`라는 파일을 만든 뒤 다음과 같이 터미널에서 한번 실행하면 됩니다.
./run_experiments.sh
Permission
서버에서 작업하다보면 아마 권한이 없어 실행 불가할 것입니다. ls -l로 확인해보면 `-rw-rw-r--`로 실행 권한이 없을 가능성이 큽니다. 그럴때는 아래와 같이 권한을 바꿔주면 됩니다.
chmod +x run_experiments.sh
여기서 +x는 실행가능(executable)하게 해준다는 의미입니다. 다시 확인해보면 `-rwxrwxr-x`로 바뀌어 있을 것입니다.
Reference
셸 스크립트 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. ipfirewall 구성을 위해 FreeBSD 셸 스크립트를 편집하고 있다. 셸 스크립트(shell script)는 셸이나 명령 줄 인터프리터에서 돌아가도록 작성되었거나 한 운영 체제를
ko.wikipedia.org
잘 정리된 Bash 기초 문법: https://velog.io/@pingping95/Bash-Shell-Script-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90
[Bash] Shell Script 기초 개념
명령의 기본적인 구조를 살펴보면 다음과 같다.제일 앞에 명령 이름이 오고 다음에 '공백' 그 다음 첫 번째 인수 '공백', ... ⇒ 명령은 공백으로 분리하여 작성한다. 를 명령으로 인식하고 를 마
velog.io
'코딩 > 노트' 카테고리의 다른 글
[Function] 순수 함수 (0) | 2025.04.07 |
---|---|
[Python] Pickle (2) | 2024.11.26 |
[Linux] rm (1) | 2024.10.30 |
[Python] Type Hint (0) | 2024.08.09 |