# Define your perturbations and BabyLM splits | |
PERTURBATIONS=("hop_control" "hop_tokens4" "hop_words4" "reverse_control" "reverse_partial" "reverse_full" "shuffle_control" | |
"shuffle_nondeterministic" "shuffle_deterministic21" "shuffle_deterministic57" "shuffle_deterministic84" "shuffle_local3" | |
"shuffle_local5" "shuffle_local10" "shuffle_even_odd") | |
# BABYLM_SPLITS=("100M" "10M" "dev" "test" "unittest") # Add more splits as needed | |
BABYLM_SPLITS=("dev") | |
# Specify the GPUs to use | |
SPECIFIED_GPUS=(1 2 3 4 5 6 7) # Set these to the GPUs you want to use | |
# Store PIDs and Gpu mapping to track running processes | |
declare -A GPU_PROCESS_MAP | |
# Iterate over all combinations of perturbations and splits | |
for perturbation in "${PERTURBATIONS[@]}"; do | |
for split in "${BABYLM_SPLITS[@]}"; do | |
# Check for a free GPU | |
while true; do | |
for gpu in "${SPECIFIED_GPUS[@]}"; do | |
# Check if there's no process associated with this GPU | |
if ! ps -p ${GPU_PROCESS_MAP[$gpu]} > /dev/null 2>&1; then | |
# Run the Python perturbation script on the available GPU | |
CUDA_VISIBLE_DEVICES=$gpu python perturb_llama.py "$perturbation" "$split" & | |
GPU_PROCESS_MAP[$gpu]=$! | |
echo "Running on GPU $gpu: Perturbation=$perturbation, Split=$split, PID=$!" | |
break 2 # Break out of the loops once a GPU is assigned | |
fi | |
done | |
sleep 1 # Wait a second before checking again | |
done | |
done | |
done | |
# Wait for all processes to finish | |
wait | |
echo "All tasks completed." |