Yixin Liu
upload
768ece9
# 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}
# available_devices=( 0 1 2 3 4 )
# available_devices=( 5 6 7 8 9 )
# available_devices=( 0 1 2 3 4 5 6 7 8 9 )
available_devices=( {gpu_list} )
max_gpu_utilization={max_gpu_utilization}
total_gpu_memory={total_gpu_memory}
max_gpu_memory_gap={max_gpu_memory_gap}
current_device_idx=-1
sleeptime={sleep_time_after_loading_task}
cpu_mean_max={cpu_max_utility}
memory_rate_max={memory_max_utility}
constrain_total={"true" if constrain_total else "false"}
constrain_mine={"true" if constrain_mine else "false"}
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")