-
Notifications
You must be signed in to change notification settings - Fork 3
/
robustar.sh
159 lines (142 loc) · 5.29 KB
/
robustar.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/bin/bash
######################################################################
# CLI for running Robustar docker image
######################################################################
#Set Script Name variable
SCRIPT=robustar
#Initialize variables to default values.
OPT_PORT=8000
OPT_IMAGE_TAG=latest
OPT_NAME=robustar
RUN_MODE='HELP'
TRAIN_FOLDER='./'
TEST_FOLDER='./'
INFLU_FOLDER='./'
CHECK_FOLDER='./'
CONFIG_FILE='configs.json'
CUDA_VERSION=''
# Discover platform and set default IP depending on it.
if [[ "$OSTYPE" == "linux-gnu" ]]; then
IP=localhost
elif [[ "$OSTYPE" == "darwin"* ]]; then
# Mac OSX
IP=`docker-machine ip default` # for Mac
elif [[ "$OSTYPE" == "cygwin" ]]; then
# POSIX compatibility layer and Linux environment emulation for Windows
IP="" # Docker IP for Windows
else
echo "Running on unrecognized platform"
fi
#Set fonts for Help.
NORM=`tput sgr0`
BOLD=`tput bold`
REV=`tput smso`
#Help function
function HELP {
echo -e \\n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\\n
echo -e "${REV}Basic usage:${NORM} ${BOLD}${SCRIPT} -m [command]${NORM} [options]"\\n
echo -e "[command] can be one of the following: setup, run."\\n
echo -e "${BOLD}setup${NORM} will prepare and pull the docker image, and create a new container for it."\\n
echo -e "${BOLD}run${NORM} will start to run the system."\\n
# echo -e "${BOLD}gulp${NORM} will start gulp (which should not be expected to return). ${BOLD}gulp${NORM} can only be run if a container is already running (most likely from running robustar run)."\\n
echo "Command line switches [options] are optional. The following switches are recognized."
echo "${REV}-p${NORM} --Sets the value for the ${BOLD}port docker forwards to${NORM}. Default is ${BOLD}${OPT_PORT}${NORM}."
echo "${REV}-a${NORM} --Sets the value for the ${BOLD}tag of the image${NORM}. Default is ${BOLD}${OPT_IMAGE_TAG}${NORM}."
echo "${REV}-n${NORM} --Sets the value for the ${BOLD}name of the docker container${NORM}. Default is ${BOLD}${OPT_NAME}${NORM}."
echo "${REV}-t${NORM} --Sets the path of ${BOLD}training images folder${NORM}. Currently only supports the PyTorch DataLoader folder structure as following"
echo $'\t\t images/\n \t\t\t dogs/\n \t\t\t\t 1.png\n \t\t\t\t 2.png\n \t\t\t cats/\n \t\t\t\t adc.png\n \t\t\t\t eqx.png'
echo "${REV}-e${NORM} --Sets the path of ${BOLD}testing images folder${NORM}. Currently only supports the PyTorch DataLoader folder structure"
echo "${REV}-i${NORM} --Sets the path of ${BOLD}the calculation result of the influence function${NORM}."
echo "${REV}-c${NORM} --Sets the path of ${BOLD}model check points folder${NORM}."
echo "${REV}-o${NORM} --Sets the path of ${BOLD}configuration file${NORM}. Default is ${BOLD}${CONFIG_FILE}${NORM}."
echo -e "${REV}-h${NORM} --Displays this help message. No further functions are performed."\\n
# echo -e "Example: ${BOLD}$SCRIPT -p 8000 -t tag1 -n foo run${NORM}"\\n
}
function SETUP {
# bash --login '/Applications/Docker/Docker Quickstart Terminal.app/Contents/Resources/Scripts/start.sh'
docker pull $IMAGE_NAME
}
function RUN {
docker run --name ${OPT_NAME} -it -d \
-p 127.0.0.1:${OPT_PORT}:80 \
-p 127.0.0.1:6848:8000 \
-p 127.0.0.1:6006:6006 \
--mount type=bind,source=${TRAIN_FOLDER},target=/Robustar2/dataset/train \
--mount type=bind,source=${TEST_FOLDER},target=/Robustar2/dataset/test \
--mount type=bind,source=${INFLU_FOLDER},target=/Robustar2/influence_images \
--mount type=bind,source=${CHECK_FOLDER},target=/Robustar2/checkpoint_images \
-v $CONFIG_FILE:/Robustar2/configs.json \
--gpus all \
$IMAGE_NAME && echo "Robustar is available at http://localhost:$OPT_PORT "
# /bin/bash /run.sh && xdg-open "http://${IP}:${OPT_PORT}" \
# docker cp ${CONFIG_FILE} ${OPT_NAME}:/Robustar2/configs.json
}
### Start getopts code ###
#Parse command line flags
#If an option should be followed by an argument, it should be followed by a ":".
#Notice there is no ":" after "h". The leading ":" suppresses error messages from
#getopts. This is required to get my unrecognized option code to work.
while getopts :m:p:a:n:t:e:i:c:o:h FLAG; do
case $FLAG in
m)
RUN_MODE=$OPTARG
;;
p)
OPT_PORT=$OPTARG
;;
a)
OPT_IMAGE_TAG=$OPTARG
;;
n)
OPT_NAME=$OPTARG
;;
t)
TRAIN_FOLDER=$OPTARG
;;
e)
TEST_FOLDER=$OPTARG
;;
i)
INFLU_FOLDER=$OPTARG
;;
c)
CHECK_FOLDER=$OPTARG
;;
o)
CONFIG_FILE=$OPTARG
;;
h)
HELP
exit 0
;;
\?) #unrecognized option - show help
echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed."
# HELP
#If you just want to display a simple error message instead of the full
#help, remove the 2 lines above and uncomment the 2 lines below.
echo -e "Use ${BOLD}$SCRIPT -h${NORM} to see the help documentation."\\n
exit 2
;;
esac
done
### End getopts code ###
#Check the number of arguments. If none are passed, print help and exit.
NUMARGS=$#
if [ $NUMARGS -eq 0 ]; then
HELP
exit 1
fi
### Main loop to process command ###
IMAGE_NAME="paulcccccch/robustar:${OPT_IMAGE_TAG}"
if [ "$RUN_MODE" == "setup" ]; then
SETUP
exit 0
elif [ "$RUN_MODE" == "run" ]; then
RUN
exit 0
else
HELP
exit 1
fi
### End main loop ###
exit 0