-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdocker.sh
117 lines (106 loc) · 3.41 KB
/
docker.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
#!/bin/bash
# usage ----------------------------------------------
# bash docker.sh build # build image
# bash docker.sh build:no-cache # build image (no-cache)
# bash docker.sh shell # run container as user
# bash docker.sh shell:root # run container as root
# ----------------------------------------------------
DATASET_DIRS=./dataset
DATA_DIRS=./data
if [ ! -d $DATA_DIRS ]; then
mkdir -p $DATA_DIRS
fi
if [ ! -d $DATASET_DIRS ]; then
mkdir -p $DATASET_DIRS
fi
SHM_SIZE="32g"
EXP_NAME="acmap"
DOCKERFILE_NAME="Dockerfile.cu117"
TORCH_VERSION="torch-2.0.1"
VOLUME_NAME=$EXP_NAME-$TORCH_VERSION
build()
{
docker volume inspect $VOLUME_NAME > /dev/null 2>&1 || docker volume create $VOLUME_NAME
DOCKER_BUILDKIT=1 docker build . -f docker/$DOCKERFILE_NAME \
--target $TORCH_VERSION \
--build-arg USER_UID=`(id -u)` \
--build-arg USER_GID=`(id -g)` \
--build-arg PYTHON_VERSION=`(cat .python-version)`\
-t $TORCH_VERSION:$EXP_NAME
}
build:no-cache()
{
volume && DOCKER_BUILDKIT=1 docker build . -f docker/$DOCKERFILE_NAME \
--no-cache \
--target $TORCH_VERSION \
--build-arg USER_UID=`(id -u)` \
--build-arg USER_GID=`(id -g)` \
--build-arg PYTHON_VERSION=`(cat .python-version)`\
-t $TORCH_VERSION:$EXP_NAME
}
shell()
{
docker run --name $EXP_NAME \
--user $(id -u):$(id -g) \
--rm -it \
--gpus all \
--shm-size=$SHM_SIZE \
-v $(pwd):/app \
-v $DATASET_DIRS:/dataset \
-v $DATA_DIRS:/data \
-v $VOLUME_NAME:/app/.venv \
$TORCH_VERSION:$EXP_NAME /bin/bash
}
shell:root()
{
docker run --name $EXP_NAME \
--user 0:0 \
--rm -it \
--gpus all \
--shm-size=$SHM_SIZE \
-v $(pwd):/app \
-v $DATASET_DIRS:/dataset \
-v $DATA_DIRS:/data \
-v $VOLUME_NAME:/app/.venv \
$TORCH_VERSION:$EXP_NAME /bin/bash
}
volume()
{
docker volume inspect $VOLUME_NAME > /dev/null 2>&1 && echo "remove volume" && docker volume rm $VOLUME_NAME
echo "create volume" && docker volume create $VOLUME_NAME
}
exec()
{
docker run --name $EXP_NAME-$(date +%Y%m%d-%H%M%S) \
--user $(id -u):$(id -g) \
--rm -i \
--gpus all \
--shm-size=$SHM_SIZE \
--env-file ./.env \
-v $(pwd):/app \
-v $DATASET_DIRS:/dataset \
-v $DATA_DIRS:/data \
-v $VOLUME_NAME:/app/.venv \
$TORCH_VERSION:$EXP_NAME "/bin/bash" "-c" "$1"
}
help()
{
echo "usage: bash docker.sh [build|build:no-cache|shell|shell:root|volume|exec|help]"
}
if [[ $1 == "build" ]]; then
build
elif [[ $1 == "build:no-cache" ]]; then
build:no-cache
elif [[ $1 == "shell" ]]; then
shell
elif [[ $1 == "shell:root" ]]; then
shell:root
elif [[ $1 == "volume" ]]; then
volume
elif [[ $1 == "exec" ]]; then
exec "$2"
elif [[ $1 == "help" ]]; then
help
else
help
fi