training1.sh는 다음과 같이 생김
SNAPSHOTS=snapshots/moco/imagenet100/cast_small
mkdir -p ${SNAPSHOTS}
mkdir -p ${SNAPSHOTS}/lincls
export PYTHONPATH=moco-v3/:$PYTHONPATH
python -u -W ignore moco-v3/main_moco_suppix.py \
-a castv2_small -b 256 --workers 0 \
--optimizer=adamw --lr=1.5e-4 --weight-decay=.1 \
--epochs=200 --warmup-epochs=20 \
--stop-grad-conv1 --moco-m-cos --moco-t=.2 \
--dist-url 'tcp://localhost:10001' \
--multiprocessing-distributed --world-size 1 --rank 0 \
/u/bwoo/Img_100
mv checkpoint_0199.pth.tar ${SNAPSHOTS}
python -u -W ignore moco-v3/main_lincls_suppix.py \
-a castv2_small --lr 0.8 -b 256 --workers 0 \
--dist-url 'tcp://localhost:10001' \
--multiprocessing-distributed --world-size 1 --rank 0 \
--pretrained ${SNAPSHOTS}/checkpoint_0199.pth.tar \
/u/bwoo/Img_100/ &> lincls_log
mv checkpoint.pth.tar model_best.pth.tar lincls_log ${SNAPSHOTS}/lincls
나는 실험을 다음과 같이 돌림
bash job_cript.sh
현재의 GPU를 1개쓰는 job_script.sh는 다음과 같음
#!/bin/bash
#SBATCH --job-name=CAST-SEG
#SBATCH --partition=gpuA100x4
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=32
#SBATCH --mem=80G
#SBATCH --time=12:00:00
#SBATCH --output=/u/bwoo/logs/output.log
#SBATCH --error=/u/bwoo/logs/error.log
cd ./CASTv2
conda activate cast
bash training1.sh
GPU를 2개 쓰는 job_script.sh는 다음과 같음
#!/bin/bash
#SBATCH --job-name=CAST-SEG
#SBATCH --partition=gpuA100x4
#SBATCH --nodes=1
#SBATCH --gres=gpu:2
#SBATCH --ntasks-per-node=2
#SBATCH --cpus-per-task=32
#SBATCH --mem=80G
#SBATCH --time=12:00:00
#SBATCH --output=/u/bwoo/logs/output.log
#SBATCH --error=/u/bwoo/logs/error.log
cd ./CASTv2
conda activate cast
bash training1.sh
여기서, 실험 2개를 노드 1개에서 동시에 돌리고 싶을때 (아래 명령어는 순차적인데, 동시에 돌리고 싶음!) :
bash training1.sh
bash training2.sh
기존 실험보다 더 무거운 실험 돌릴거라 GPU 2개가 필요한데,
첫 번째 실험에는 0,1 번 GPU, 두 번째 실험에는 2,3 번 GPU를 할당하고 싶고,
각 실험당 CPU를 32씩 할당하고 싶음.
노드에는 A100이 총 4개가 달려있고, CPU코어는 최대 64개까지 사용 가능함
task가 무엇인지? gpus 개수랑 똑같이 해야 에러 안생기던데.
https://stackoverflow.com/questions/39186698/what-does-the-ntasks-or-n-tasks-does-in-slurm