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 | |
from config import update_device_func | |
from parse_code import parse_base_code | |
# title | |
st.title("Exp Command Generator") | |
# experiment mode | |
# exp_mode = st.sidebar.selectbox("Select Experiment Mode", ["OneExpOnecard", "MultipleExpOnecard"],key="MultipleExpOnecard") | |
## 检查框 | |
debug = st.sidebar.checkbox("Debug: 选择则会串行地执行命令", value=True) | |
# st.sidebar.write(f"checkbox的值是{res}") | |
# setup = st.sidebar.text_area("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), [0,1,2,3,4,]) | |
# print(gpu_list) | |
allow_gpu_memory_threshold_default=5000 | |
gpu_threshold_default=90 | |
total_gpu_memory = st.sidebar.number_input("单卡总容量", value=24564, min_value=0, max_value=30000, step=1000) | |
max_gpu_memory_gap = st.sidebar.number_input("最小单卡剩余容量", value=allow_gpu_memory_threshold_default, min_value=0, max_value=total_gpu_memory, step=500) | |
max_gpu_utilization = 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=10, min_value=0,step=5) | |
# all_full_sleep_time = st.sidebar.number_input("全满之后等待秒数", value=20, min_value=0,step=5) | |
username = st.sidebar.text_input("用户名", value="yila22") | |
cpu_max_utility = st.sidebar.number_input("cpu最大利用率", value=77, min_value=0, max_value=100, step=1) | |
memory_max_utility = st.sidebar.number_input("内存最大利用率", value=80, min_value=0, max_value=100, step=1) | |
constrain_total = st.sidebar.checkbox("限制总资源", value=True) | |
constrain_mine = st.sidebar.checkbox("限制我的资源", value=False) | |
constrain_rate = st.sidebar.number_input("限制率", value=2, min_value=1, max_value=10, step=1) | |
# username_mine=root | |
# max_gpu_utilization=90 | |
# total_gpu_memory=24564 | |
# max_gpu_memory_gap=5000 | |
# available_devices=( 0 1 2 3 4 5 6 7 8 9 ) | |
# current_device_idx=-1 | |
# sleeptime=30 | |
# cpu_mean_max=77 | |
# memory_rate_max=80 | |
# constrain_total=true | |
# constrain_mine=false | |
# constrain_rate=2 | |
gpu_list = " ".join([str(i) for i in gpu_list]) | |
setup_for_gpu_utility = f""" | |
username={username} | |
max_gpu_utilization={max_gpu_utilization} | |
total_gpu_memory={total_gpu_memory} | |
max_gpu_memory_gap={max_gpu_memory_gap} | |
available_devices=( {gpu_list} ) | |
current_device_idx=-1 | |
sleeptime={sleep_time_after_loading_task} | |
cpu_mean_max={cpu_max_utility} | |
memory_rate_max={memory_max_utility} | |
constrain_total={constrain_total} | |
constrain_mine={constrain_mine} | |
constrain_rate={constrain_rate} | |
""" | |
base_code = st.text_area("Base Code", """##### setup | |
export CUDA_VISIBLE_DEVICES=2 | |
source activate /data/yixin/anaconda/mib | |
exp_name="single_user" | |
##### | |
##### loop | |
for poison_method in char_basic word_basic sent_basic; do | |
for dataset_idx in 0 1 2; do | |
##### | |
##### main | |
python single_user.py --dataset_idx $dataset_idx --trigger_size 1 --target 0 \ | |
--loc 0 --batch_size 16 --num_epochs 2 --poison_method $poison_method --lr 5e-5 --pattern 0 --exp_name $exp_name \ | |
--log_wb | |
##### | |
##### | |
done;done; | |
#####""", height=400) | |
g = st.button("Generate") | |
if g: | |
st.success("Finished") | |
contents = base_code | |
gpu_utility = "" | |
gpu_utility = setup_for_gpu_utility + "\n\n" + update_device_func | |
new_code = parse_base_code(contents, debug=debug) | |
# create file for download | |
timestr = time.strftime("%Y%m%d-%Hh%Mm%Ss") | |
import os | |
os.makedirs(f"./res/{timestr}", exist_ok=True) | |
filename_script = f"./res/{timestr}/script.sh" | |
with open(filename_script, "w") as f: | |
f.write(new_code) | |
filename_config = f"./res/{timestr}/gpu_utility.sh" | |
with open(filename_config, "w") as f: | |
f.write(gpu_utility) | |
# zip them into one file | |
# import shutil | |
# shutil.make_archive(f"./res/{timestr}", 'zip', f"./res/{timestr}") | |
# st.download_button( | |
# label="Download zip", | |
# data=f"./res/{timestr}.zip", | |
# file_name=f"{timestr}.zip", | |
# mime="application/zip", | |
# ) | |
st.download_button( | |
label="Download script", | |
data=new_code, | |
file_name=filename_script, | |
mime="text/plain", | |
) | |
# after clicking i don't want the website to refresh | |
st.download_button( | |
label="Download gpu_utility.sh", | |
data=gpu_utility, | |
file_name=filename_config, | |
mime="text/plain", | |
) | |
# st.markdown(f"### [Download script](./{filename_script})") | |
# st.markdown(f"### [Download gpu_utility.sh](P{filename_config})") | |
st.markdown("## script.sh") | |
st.code(new_code, language="shell") | |
st.markdown("## gpu_utility.sh") | |
st.code(gpu_utility, language="shell") | |