MonsterMMORPG
commited on
Commit
•
fb4437c
1
Parent(s):
ee1fa15
Create webui_colab.sh
Browse files- webui_colab.sh +223 -0
webui_colab.sh
ADDED
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env bash
|
2 |
+
#################################################
|
3 |
+
# Please do not make any changes to this file, #
|
4 |
+
# change the variables in webui-user.sh instead #
|
5 |
+
#################################################
|
6 |
+
|
7 |
+
|
8 |
+
use_venv=1
|
9 |
+
if [[ $venv_dir == "-" ]]; then
|
10 |
+
use_venv=0
|
11 |
+
fi
|
12 |
+
|
13 |
+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
14 |
+
|
15 |
+
|
16 |
+
# If run from macOS, load defaults from webui-macos-env.sh
|
17 |
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
18 |
+
if [[ -f "$SCRIPT_DIR"/webui-macos-env.sh ]]
|
19 |
+
then
|
20 |
+
source "$SCRIPT_DIR"/webui-macos-env.sh
|
21 |
+
fi
|
22 |
+
fi
|
23 |
+
|
24 |
+
# Read variables from webui-user.sh
|
25 |
+
# shellcheck source=/dev/null
|
26 |
+
if [[ -f "$SCRIPT_DIR"/webui-user.sh ]]
|
27 |
+
then
|
28 |
+
source "$SCRIPT_DIR"/webui-user.sh
|
29 |
+
fi
|
30 |
+
|
31 |
+
# Set defaults
|
32 |
+
# Install directory without trailing slash
|
33 |
+
if [[ -z "${install_dir}" ]]
|
34 |
+
then
|
35 |
+
install_dir="$SCRIPT_DIR"
|
36 |
+
fi
|
37 |
+
|
38 |
+
# Name of the subdirectory (defaults to stable-diffusion-webui)
|
39 |
+
if [[ -z "${clone_dir}" ]]
|
40 |
+
then
|
41 |
+
clone_dir="stable-diffusion-webui"
|
42 |
+
fi
|
43 |
+
|
44 |
+
# python3 executable
|
45 |
+
if [[ -z "${python_cmd}" ]]
|
46 |
+
then
|
47 |
+
python_cmd="python3"
|
48 |
+
fi
|
49 |
+
|
50 |
+
# git executable
|
51 |
+
if [[ -z "${GIT}" ]]
|
52 |
+
then
|
53 |
+
export GIT="git"
|
54 |
+
fi
|
55 |
+
|
56 |
+
if [[ -z "${LAUNCH_SCRIPT}" ]]
|
57 |
+
then
|
58 |
+
LAUNCH_SCRIPT="launch.py"
|
59 |
+
fi
|
60 |
+
|
61 |
+
# this script cannot be run as root by default
|
62 |
+
can_run_as_root=0
|
63 |
+
|
64 |
+
# read any command line flags to the webui.sh script
|
65 |
+
while getopts "f" flag > /dev/null 2>&1
|
66 |
+
do
|
67 |
+
case ${flag} in
|
68 |
+
f) can_run_as_root=1;;
|
69 |
+
*) break;;
|
70 |
+
esac
|
71 |
+
done
|
72 |
+
|
73 |
+
# Disable sentry logging
|
74 |
+
export ERROR_REPORTING=FALSE
|
75 |
+
|
76 |
+
# Do not reinstall existing pip packages on Debian/Ubuntu
|
77 |
+
export PIP_IGNORE_INSTALLED=0
|
78 |
+
|
79 |
+
# Pretty print
|
80 |
+
delimiter="################################################################"
|
81 |
+
|
82 |
+
printf "\n%s\n" "${delimiter}"
|
83 |
+
printf "\e[1m\e[32mInstall script for stable-diffusion + Web UI\n"
|
84 |
+
printf "\e[1m\e[34mTested on Debian 11 (Bullseye)\e[0m"
|
85 |
+
printf "\n%s\n" "${delimiter}"
|
86 |
+
|
87 |
+
# Do not run as root
|
88 |
+
if [[ $(id -u) -eq 0 && can_run_as_root -eq 0 ]]
|
89 |
+
then
|
90 |
+
printf "\n%s\n" "${delimiter}"
|
91 |
+
printf "\e[1m\e[31mERROR: This script must not be launched as root, aborting...\e[0m"
|
92 |
+
printf "\n%s\n" "${delimiter}"
|
93 |
+
exit 1
|
94 |
+
else
|
95 |
+
printf "\n%s\n" "${delimiter}"
|
96 |
+
printf "Running on \e[1m\e[32m%s\e[0m user" "$(whoami)"
|
97 |
+
printf "\n%s\n" "${delimiter}"
|
98 |
+
fi
|
99 |
+
|
100 |
+
if [[ $(getconf LONG_BIT) = 32 ]]
|
101 |
+
then
|
102 |
+
printf "\n%s\n" "${delimiter}"
|
103 |
+
printf "\e[1m\e[31mERROR: Unsupported Running on a 32bit OS\e[0m"
|
104 |
+
printf "\n%s\n" "${delimiter}"
|
105 |
+
exit 1
|
106 |
+
fi
|
107 |
+
|
108 |
+
if [[ -d .git ]]
|
109 |
+
then
|
110 |
+
printf "\n%s\n" "${delimiter}"
|
111 |
+
printf "Repo already cloned, using it as install directory"
|
112 |
+
printf "\n%s\n" "${delimiter}"
|
113 |
+
install_dir="${PWD}/../"
|
114 |
+
clone_dir="${PWD##*/}"
|
115 |
+
fi
|
116 |
+
|
117 |
+
# Check prerequisites
|
118 |
+
gpu_info=$(lspci 2>/dev/null | grep -E "VGA|Display")
|
119 |
+
case "$gpu_info" in
|
120 |
+
*"Navi 1"*)
|
121 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
122 |
+
if [[ -z "${TORCH_COMMAND}" ]]
|
123 |
+
then
|
124 |
+
pyv="$(${python_cmd} -c 'import sys; print(".".join(map(str, sys.version_info[0:2])))')"
|
125 |
+
if [[ $(bc <<< "$pyv <= 3.10") -eq 1 ]]
|
126 |
+
then
|
127 |
+
# Navi users will still use torch 1.13 because 2.0 does not seem to work.
|
128 |
+
export TORCH_COMMAND="pip install torch==1.13.1+rocm5.2 torchvision==0.14.1+rocm5.2 --index-url https://download.pytorch.org/whl/rocm5.2"
|
129 |
+
else
|
130 |
+
printf "\e[1m\e[31mERROR: RX 5000 series GPUs must be using at max python 3.10, aborting...\e[0m"
|
131 |
+
exit 1
|
132 |
+
fi
|
133 |
+
fi
|
134 |
+
;;
|
135 |
+
*"Navi 2"*) export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
136 |
+
;;
|
137 |
+
*"Navi 3"*) [[ -z "${TORCH_COMMAND}" ]] && \
|
138 |
+
export TORCH_COMMAND="pip install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/rocm5.6"
|
139 |
+
# Navi 3 needs at least 5.5 which is only on the nightly chain, previous versions are no longer online (torch==2.1.0.dev-20230614+rocm5.5 torchvision==0.16.0.dev-20230614+rocm5.5 torchaudio==2.1.0.dev-20230614+rocm5.5)
|
140 |
+
# so switch to nightly rocm5.6 without explicit versions this time
|
141 |
+
;;
|
142 |
+
*"Renoir"*) export HSA_OVERRIDE_GFX_VERSION=9.0.0
|
143 |
+
printf "\n%s\n" "${delimiter}"
|
144 |
+
printf "Experimental support for Renoir: make sure to have at least 4GB of VRAM and 10GB of RAM or enable cpu mode: --use-cpu all --no-half"
|
145 |
+
printf "\n%s\n" "${delimiter}"
|
146 |
+
;;
|
147 |
+
*)
|
148 |
+
;;
|
149 |
+
esac
|
150 |
+
if ! echo "$gpu_info" | grep -q "NVIDIA";
|
151 |
+
then
|
152 |
+
if echo "$gpu_info" | grep -q "AMD" && [[ -z "${TORCH_COMMAND}" ]]
|
153 |
+
then
|
154 |
+
export TORCH_COMMAND="pip install torch==2.0.1+rocm5.4.2 torchvision==0.15.2+rocm5.4.2 --index-url https://download.pytorch.org/whl/rocm5.4.2"
|
155 |
+
fi
|
156 |
+
fi
|
157 |
+
|
158 |
+
for preq in "${GIT}" "${python_cmd}"
|
159 |
+
do
|
160 |
+
if ! hash "${preq}" &>/dev/null
|
161 |
+
then
|
162 |
+
printf "\n%s\n" "${delimiter}"
|
163 |
+
printf "\e[1m\e[31mERROR: %s is not installed, aborting...\e[0m" "${preq}"
|
164 |
+
printf "\n%s\n" "${delimiter}"
|
165 |
+
exit 1
|
166 |
+
fi
|
167 |
+
done
|
168 |
+
|
169 |
+
if [[ $use_venv -eq 1 ]] && ! "${python_cmd}" -c "import venv" &>/dev/null
|
170 |
+
then
|
171 |
+
printf "\n%s\n" "${delimiter}"
|
172 |
+
printf "\e[1m\e[31mERROR: python3-venv is not installed, aborting...\e[0m"
|
173 |
+
printf "\n%s\n" "${delimiter}"
|
174 |
+
exit 1
|
175 |
+
fi
|
176 |
+
|
177 |
+
cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; }
|
178 |
+
if [[ -d "${clone_dir}" ]]
|
179 |
+
then
|
180 |
+
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
181 |
+
else
|
182 |
+
printf "\n%s\n" "${delimiter}"
|
183 |
+
printf "Clone stable-diffusion-webui"
|
184 |
+
printf "\n%s\n" "${delimiter}"
|
185 |
+
"${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}"
|
186 |
+
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
187 |
+
fi
|
188 |
+
|
189 |
+
|
190 |
+
# Try using TCMalloc on Linux
|
191 |
+
prepare_tcmalloc() {
|
192 |
+
if [[ "${OSTYPE}" == "linux"* ]] && [[ -z "${NO_TCMALLOC}" ]] && [[ -z "${LD_PRELOAD}" ]]; then
|
193 |
+
TCMALLOC="$(PATH=/usr/sbin:$PATH ldconfig -p | grep -Po "libtcmalloc(_minimal|)\.so\.\d" | head -n 1)"
|
194 |
+
if [[ ! -z "${TCMALLOC}" ]]; then
|
195 |
+
echo "Using TCMalloc: ${TCMALLOC}"
|
196 |
+
export LD_PRELOAD="${TCMALLOC}"
|
197 |
+
else
|
198 |
+
printf "\e[1m\e[31mCannot locate TCMalloc (improves CPU memory usage)\e[0m\n"
|
199 |
+
fi
|
200 |
+
fi
|
201 |
+
}
|
202 |
+
|
203 |
+
KEEP_GOING=1
|
204 |
+
export SD_WEBUI_RESTART=tmp/restart
|
205 |
+
while [[ "$KEEP_GOING" -eq "1" ]]; do
|
206 |
+
if [[ ! -z "${ACCELERATE}" ]] && [ ${ACCELERATE}="True" ] && [ -x "$(command -v accelerate)" ]; then
|
207 |
+
printf "\n%s\n" "${delimiter}"
|
208 |
+
printf "Accelerating launch.py..."
|
209 |
+
printf "\n%s\n" "${delimiter}"
|
210 |
+
prepare_tcmalloc
|
211 |
+
accelerate launch --num_cpu_threads_per_process=6 "${LAUNCH_SCRIPT}" "$@"
|
212 |
+
else
|
213 |
+
printf "\n%s\n" "${delimiter}"
|
214 |
+
printf "Launching launch.py..."
|
215 |
+
printf "\n%s\n" "${delimiter}"
|
216 |
+
prepare_tcmalloc
|
217 |
+
"${python_cmd}" -u "${LAUNCH_SCRIPT}" "$@"
|
218 |
+
fi
|
219 |
+
|
220 |
+
if [[ ! -f tmp/restart ]]; then
|
221 |
+
KEEP_GOING=0
|
222 |
+
fi
|
223 |
+
done
|