Spaces:
Runtime error
Runtime error
# import imp | |
from email.policy import default | |
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import time | |
# import matplotlib.pyplot as plt | |
# import seaborn as sns | |
# import plotly.figure_factory as ff | |
# import altair as alt | |
# from PIL import Image | |
# import base64 | |
# import tarfile | |
# import os | |
# import requests | |
# title | |
st.title("Exp Command Generator") | |
# experiment mode | |
exp_mode = st.sidebar.selectbox("Select Experiment Mode", ["MultipleExpOnecard","OneExpOnecard"],key="MultipleExpOnecard") | |
## 检查框 | |
debug = st.sidebar.checkbox("Debug:选择则会串行地执行命令", value=True) | |
# st.sidebar.write(f"checkbox的值是{res}") | |
setup = st.sidebar.text_area("Hyperparameters or some setup of env at beginning.", """cd $(dirname $(dirname $0)) | |
source activate xai | |
export PYTHONPATH=${PYTHONPATH}:/Users/apple/Desktop/workspace/research_project/attention:/mnt/yixin/:/home/yila22/prj""") | |
# exp_hyper = st.sidebar.text_area("Hyperparameters", """exp_name="debug-adv-training-emotion" | |
# dataset=emotion | |
# n_epoch=3 | |
# K=3 | |
# encoder=bert | |
# lambda_1=1 | |
# lambda_2=1 | |
# x_pgd_radius=0.01 | |
# pgd_radius=0.001 | |
# seed=2 | |
# bsize=8 | |
# lr=5e-5""") | |
## gpu 相关参数 | |
gpu_list = st.sidebar.multiselect("multi select", range(10), [5, 6, 7, 8, 9]) | |
# print(gpu_list) | |
if exp_mode == "OneExpOnecard": | |
allow_gpu_memory_threshold_default = 20000 | |
gpu_threshold_default = 1 | |
elif exp_mode == "MultipleExpOnecard": | |
allow_gpu_memory_threshold_default = 3000 | |
gpu_threshold_default = 70 | |
allow_gpu_memory_threshold = st.sidebar.number_input("最小单卡剩余容量", value=allow_gpu_memory_threshold_default, min_value=0, max_value=30000, step=1000) | |
gpu_threshold = st.sidebar.number_input("最大单卡利用率", value=gpu_threshold_default, min_value=0, max_value=100, step=10) | |
sleep_time_after_loading_task= st.sidebar.number_input("加载任务后等待秒数", value=20, min_value=0,step=5) | |
all_full_sleep_time = st.sidebar.number_input("全满之后等待秒数", value=20, min_value=0,step=5) | |
gpu_list_str = ' '.join([str(i) for i in gpu_list]) | |
gpu_hyper = f"gpu=({gpu_list_str})\n" | |
gpu_hyper+=f"allow_gpu_memory_threshold={allow_gpu_memory_threshold}\n" | |
gpu_hyper+=f"gpu_threshold={gpu_threshold}\n" | |
gpu_hyper+=f"sleep_time_after_loading_task={sleep_time_after_loading_task}s\n" | |
gpu_hyper+=f"all_full_sleep_time={all_full_sleep_time}s\n" | |
gpu_hyper+="gpunum=${#gpu[@]}\n" | |
gpu_hyper+="i=0\n" | |
main_loop = st.text_area("Main loop", """for lambda_1 in 1 3;do | |
for lambda_2 in 1 10;do | |
for n_epoch in 3;do | |
for x_pgd_radius in 0.005 0.01;do | |
for pgd_radius in 0.0005 0.001 0.002;do | |
python train.py --dataset $dataset --data_dir . --output_dir ./outputs/ --attention tanh \ | |
--encoder $encoder \ | |
--exp_name $exp_name --lambda_1 $lambda_1 --lambda_2 $lambda_2 --pgd_radius $pgd_radius --x_pgd_radius $x_pgd_radius \ | |
--K $K --seed $seed --train_mode adv_train --bsize $bsize --n_epoch $n_epoch --lr $lr \ | |
--eval_baseline | |
done;done;done;done;done;""") | |
if 'python' in main_loop: | |
hyper_loop = main_loop.split("python")[0] | |
python_cmd = main_loop[main_loop.index('python'):].split('done;')[0] | |
elif 'bash' in main_loop: | |
hyper_loop = main_loop.split("bash")[0] | |
python_cmd = main_loop[main_loop.index('bash'):].split('done;')[0] | |
print(hyper_loop) | |
print(python_cmd) | |
end_loop = "done;"*hyper_loop.count("for") | |
print(end_loop) | |
g = st.button("Generate") | |
if g: | |
s = "" | |
s += setup + "\n\n" | |
# s += exp_hyper + "\n\n" | |
s += gpu_hyper + "\n\n" | |
s += hyper_loop + "\n\n" | |
s += """ | |
while true; do | |
gpu_id=${gpu[$i]} | |
# nvidia-smi --query-gpu=utilization.gpu --format=csv -i 2 | grep -Eo "[0-9]+" | |
gpu_u=$(nvidia-smi --query-gpu=utilization.gpu --format=csv -i $gpu_id | grep -Eo "[0-9]+") | |
free_mem=$(nvidia-smi --query-gpu=memory.free --format=csv -i $gpu_id | grep -Eo "[0-9]+") | |
if [[ $free_mem -lt $allow_gpu_memory_threshold || $gpu_u -ge ${gpu_threshold} ]]; then | |
i=`expr $i + 1` | |
i=`expr $i % $gpunum` | |
echo "gpu id ${gpu[$i]} is full loaded, skip" | |
if [ "$i" == "0" ]; then | |
sleep ${all_full_sleep_time} | |
echo "all the gpus are full, sleep 1m" | |
fi | |
else | |
break | |
fi | |
done | |
gpu_id=${gpu[$i]} | |
# search from the next gpu | |
i=`expr $i + 1` | |
i=`expr $i % $gpunum` | |
free_mem=$(nvidia-smi --query-gpu=memory.free --format=csv -i $gpu_id | grep -Eo "[0-9]+") | |
gpu_u=$(nvidia-smi --query-gpu=utilization.gpu --format=csv -i $gpu_id | grep -Eo "[0-9]+") | |
export CUDA_VISIBLE_DEVICES=$gpu_id | |
echo "use gpu id is ${gpu[$i]}, free memory is $free_mem, it utilization is ${gpu_u}%" | |
""" | |
s += f"""com="{python_cmd}"\n""" | |
s += "echo $com\n" | |
s += "echo ==========================================================================================\n" | |
if debug: | |
s += "$com\n" | |
s += "# mkdir -p ./logs/\n" | |
s += "# nohup $com > ./logs/$exp_name-$RANDOM.log 2>&1 &\n" | |
else: | |
s += "# $com\n" | |
s += "mkdir -p ./logs/\n" | |
import time | |
from datetime import datetime | |
current_timestamp = int(time.time()) | |
human_readable_timestamp = datetime.utcfromtimestamp(current_timestamp).strftime('%Y-%m-%d-%H') | |
s += f"date_time={human_readable_timestamp}\n" | |
s += "mkdir -p ./logs/$date_time\n" | |
s += "nohup $com > ./logs/$date_time/$exp_name-$RANDOM.log 2>&1 &\n" | |
s += """echo "sleep for $sleep_time_after_loading_task to wait the task loaded" | |
sleep $sleep_time_after_loading_task\n""" | |
s += end_loop | |
st.success("Finished") | |
st.code(s, language="shell") | |