-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker
executable file
·72 lines (64 loc) · 1.84 KB
/
docker
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
#!/usr/bin/env bash
#####################################
SSH_PORT=${3:-10210} # OpenSSH
TB_PORT=${4:-16610} # TensorBoard
PROJECT_NAME="opencompass"
#####################################
CMD=${1:-start}
CONTAINER_NAME=${2:-"$(basename "$(pwd)")_$(whoami)"} # Container Name
echo CMD=${CMD}
echo CONTAINER_NAME=${CONTAINER_NAME}
#####################################
IMAGE=${PROJECT_NAME}
echo IMAGE="${IMAGE}"
if nvidia-smi; then
GPU_OPT="--gpus all"
else
GPU_OPT=""
fi
echo GPU_OPT=${GPU_OPT}
MEMORY_LIMIT="$(($(free -g | grep -oP "Mem:\s+\K\d+")-1))g"
MEMORY_SWAP_LIMIT="-1"
echo MEMORY_LIMIT=${MEMORY_LIMIT}
echo MEMORY_SWAP_LIMIT=${MEMORY_SWAP_LIMIT}
build () {
sudo docker build . -t ${IMAGE}
}
start () {
sudo docker run -dit --name ${CONTAINER_NAME} --restart=unless-stopped --ipc="host" \
-v "$(realpath .)":/${PROJECT_NAME} \
-v /mnt/mfs/opsgpt/:/mnt/mfs/opsgpt \
-v "$(realpath .cache)":/root/.cache \
-v "$(realpath .ssh)":/root/.ssh \
--hostname "${PROJECT_NAME}-$(hostname)" \
${GPU_OPT} \
--memory ${MEMORY_LIMIT} \
-v /tmp:/tmp \
-w /${PROJECT_NAME} \
--env http_proxy="" --env https_proxy="" \
-p ${SSH_PORT}:22 -p ${TB_PORT}:6006 \
${IMAGE} \
/bin/bash;
sudo docker logs --tail 100 ${CONTAINER_NAME};
sudo docker exec ${CONTAINER_NAME} bash -c "cd /${PROJECT_NAME} && direnv allow .";
sudo docker exec ${CONTAINER_NAME} bash -c "sudo killall sshd; sudo mkdir /run/sshd || echo exists; sudo /usr/sbin/sshd";
}
stop () {
sudo docker stop ${CONTAINER_NAME};
sudo docker rm ${CONTAINER_NAME};
}
shell () {
sudo docker exec -it ${CONTAINER_NAME} bash
}
if [ ${CMD} == "start" ]; then
start
elif [ ${CMD} == "stop" ]; then
stop
elif [ ${CMD} == "restart" ]; then
stop;
start;
elif [ ${CMD} == "build" ]; then
build;
elif [ ${CMD} == "shell" ]; then
shell;
fi