Big update: Verbosity, space check skip,

Huge reorg to account for macOS and other non-Linux OSs. Verbosity levels 1-3 added (used by FDs 3-5). Simplified code by creating more shared functions.
This commit is contained in:
JSTayco 2023-03-30 18:20:42 -07:00
parent a062dabe86
commit 6e7e25cba9

291
setup.sh
View File

@ -6,21 +6,26 @@ display_help() {
cat <<EOF cat <<EOF
Kohya_SS Installation Script for POSIX operating systems. Kohya_SS Installation Script for POSIX operating systems.
The following options are useful in a runpod environment,
but will not affect a local machine install.
Usage: Usage:
# Specifies custom branch, install directory, and git repo
setup.sh -b dev -d /workspace/kohya_ss -g https://mycustom.repo.tld/custom_fork.git setup.sh -b dev -d /workspace/kohya_ss -g https://mycustom.repo.tld/custom_fork.git
# Same as example 1, but uses long options
setup.sh --branch=dev --dir=/workspace/kohya_ss --git-repo=https://mycustom.repo.tld/custom_fork.git setup.sh --branch=dev --dir=/workspace/kohya_ss --git-repo=https://mycustom.repo.tld/custom_fork.git
# Maximum verbosity, fully automated install in a runpod environment skipping the runpod env checks
setup.sh -vvv --skip-space-check --runpod
Options: Options:
-b BRANCH, --branch=BRANCH Select which branch of kohya to checkout on new installs. -b BRANCH, --branch=BRANCH Select which branch of kohya to checkout on new installs.
-d DIR, --dir=DIR The full path you want kohya_ss installed to. -d DIR, --dir=DIR The full path you want kohya_ss installed to.
-g, --git_repo You can optionally provide a git repo to checkout for runpod installation. Useful for custom forks. -g, --git_repo You can optionally provide a git repo to checkout for runpod installation. Useful for custom forks.
-h, --help Show this screen.
-i, --interactive Interactively configure accelerate instead of using default config file.
-p, --public Expose public URL in runpod mode. Won't have an effect in other modes. -p, --public Expose public URL in runpod mode. Won't have an effect in other modes.
-r, --runpod Forces a runpod installation. Useful if detection fails for any reason. -r, --runpod Forces a runpod installation. Useful if detection fails for any reason.
-i, --interactive Interactively configure accelerate instead of using default config file. -s, --skip-space-check Skip the 10Gb minimum storage space check.
-h, --help Show this screen. -v, --verbose Increase verbosity levels up to 3.
EOF EOF
} }
@ -62,12 +67,16 @@ else
fi fi
fi fi
VERBOSITY=2 #Start counting at 2 so that any increase to this will result in a minimum of file descriptor 3. You should leave this alone.
MAXVERBOSITY=6 #The highest verbosity we use / allow to be displayed. Feel free to adjust.
BRANCH="master" BRANCH="master"
GIT_REPO="https://github.com/bmaltais/kohya_ss.git" GIT_REPO="https://github.com/bmaltais/kohya_ss.git"
INTERACTIVE=false INTERACTIVE=false
PUBLIC=false PUBLIC=false
SKIP_SPACE_CHECK=false
while getopts "b:d:g:ipr-:" opt; do while getopts ":vb:d:g:iprs-:" opt; do
# support long options: https://stackoverflow.com/a/28466267/519360 # support long options: https://stackoverflow.com/a/28466267/519360
if [ "$opt" = "-" ]; then # long option: reformulate OPT and OPTARG if [ "$opt" = "-" ]; then # long option: reformulate OPT and OPTARG
opt="${OPTARG%%=*}" # extract long option name opt="${OPTARG%%=*}" # extract long option name
@ -81,16 +90,143 @@ while getopts "b:d:g:ipr-:" opt; do
i | interactive) INTERACTIVE=true ;; i | interactive) INTERACTIVE=true ;;
p | public) PUBLIC=true ;; p | public) PUBLIC=true ;;
r | runpod) RUNPOD=true ;; r | runpod) RUNPOD=true ;;
s | skip-space-check) SKIP_SPACE_CHECK=true ;;
v) ((VERBOSITY = VERBOSITY + 1)) ;;
h) display_help && exit 0 ;; h) display_help && exit 0 ;;
*) display_help && exit 0 ;; *) display_help && exit 0 ;;
esac esac
done done
shift $((OPTIND - 1)) shift $((OPTIND - 1))
for v in $( #Start counting from 3 since 1 and 2 are standards (stdout/stderr).
seq 3 $VERBOSITY
); do
(("$v" <= "$MAXVERBOSITY")) && eval exec "$v>&2" #Don't change anything higher than the maximum verbosity allowed.
done
for v in $( #From the verbosity level one higher than requested, through the maximum;
seq $((VERBOSITY + 1)) $MAXVERBOSITY
); do
(("$v" > "2")) && eval exec "$v>/dev/null" #Redirect these to bitbucket, provided that they don't match stdout and stderr.
done
# Example of how to use the verbosity levels.
# printf "%s\n" "This message is seen at verbosity level 1 and above." >&3
# printf "%s\n" "This message is seen at verbosity level 2 and above." >&4
# printf "%s\n" "This message is seen at verbosity level 3 and above." >&5
# Debug variable dump at max verbosity
echo "BRANCH: $BRANCH
DIR: $DIR
GIT_REPO: $GIT_REPO
INTERACTIVE: $INTERACTIVE
PUBLIC: $PUBLIC
RUNPOD: $RUNPOD
SKIP_SPACE_CHECK: $SKIP_SPACE_CHECK
VERBOSITY: $VERBOSITY" >&5
# This must be set after the getopts loop to account for $DIR changes. # This must be set after the getopts loop to account for $DIR changes.
PARENT_DIR="$(dirname "${DIR}")" PARENT_DIR="$(dirname "${DIR}")"
VENV_DIR="$DIR/venv" VENV_DIR="$DIR/venv"
# Shared functions
# This checks for free space on the installation drive and returns that in Gb.
size_available() {
local folder
if [ -d "$DIR" ]; then
folder="$DIR"
elif [ -d "$PARENT_DIR" ]; then
folder="$PARENT_DIR"
elif [ -d "$(echo "$DIR" | cut -d "/" -f2)" ]; then
folder="$(echo "$DIR" | cut -d "/" -f2)"
else
echo "We are assuming a root drive install for space-checking purposes."
folder='/'
fi
local FREESPACEINKB="$(df -Pk "$folder" | sed 1d | grep -v used | awk '{ print $4 "\t" }')"
echo "Detected available space in Kb: $FREESPACEINKB" >&5
local FREESPACEINGB=$((FREESPACEINKB / 1024 / 1024))
echo "$FREESPACEINGB"
}
# The expected usage is create_symlinks $symlink $target_file
create_symlinks() {
echo "Checking symlinks now."
# Next line checks for valid symlink
if [ -L "$1" ]; then
# Check if the linked file exists and points to the expected file
if [ -e "$1" ] && [ "$(readlink "$1")" == "$2" ]; then
echo "$(basename "$1") symlink looks fine. Skipping."
else
if [ -f "$2" ]; then
echo "Broken symlink detected. Recreating $(basename "$1")."
rm "$1" &&
ln -s "$2" "$1"
else
echo "$2 does not exist. Nothing to link."
fi
fi
else
echo "Linking $(basename "$1")."
ln -s "$2" "$1"
fi
}
# Attempt to non-interactively install a default accelerate config file unless specified otherwise.
# Documentation for order of precedence locations for configuration file for automated installation:
# https://huggingface.co/docs/accelerate/basic_tutorials/launch#custom-configurations
configure_accelerate() {
echo "Source accelerate config location: $DIR/config_files/accelerate/default_config.yaml" >&3
if [ "$INTERACTIVE" = true ]; then
accelerate config
else
if env_var_exists HF_HOME; then
if [ ! -f "$HF_HOME/accelerate/default_config.yaml" ]; then
mkdir -p "$HF_HOME/accelerate/" &&
echo "Target accelerate config location: $HF_HOME/accelerate/default_config.yaml" >&3
cp "$DIR/config_files/accelerate/default_config.yaml" "$HF_HOME/accelerate/default_config.yaml" &&
echo "Copied accelerate config file to: $HF_HOME/accelerate/default_config.yaml"
fi
elif env_var_exists XDG_CACHE_HOME; then
if [ ! -f "$XDG_CACHE_HOME/huggingface/accelerate" ]; then
mkdir -p "$XDG_CACHE_HOME/huggingface/accelerate" &&
echo "Target accelerate config location: $XDG_CACHE_HOME/accelerate/default_config.yaml" >&3
cp "$DIR/config_files/accelerate/default_config.yaml" "$XDG_CACHE_HOME/huggingface/accelerate/default_config.yaml" &&
echo "Copied accelerate config file to: $XDG_CACHE_HOME/huggingface/accelerate/default_config.yaml"
fi
elif env_var_exists HOME; then
if [ ! -f "$HOME/.cache/huggingface/accelerate" ]; then
mkdir -p "$HOME/.cache/huggingface/accelerate" &&
echo "Target accelerate config location: $HOME/accelerate/default_config.yaml" >&3
cp "$DIR/config_files/accelerate/default_config.yaml" "$HOME/.cache/huggingface/accelerate/default_config.yaml" &&
echo "Copying accelerate config file to: $HOME/.cache/huggingface/accelerate/default_config.yaml"
fi
else
echo "Could not place the accelerate configuration file. Please configure manually."
sleep 2
accelerate config
fi
fi
}
# Offer a warning and opportunity to cancel the installation if < 10Gb of Free Space detected
check_storage_space() {
if [ "$SKIP_SPACE_CHECK" = false ]; then
if [ "$(size_available)" -lt 10 ]; then
echo "You have less than 10Gb of free space. This installation may fail."
MSGTIMEOUT=10 # In seconds
MESSAGE="Continuing in..."
echo "Press control-c to cancel the installation."
for ((i = $MSGTIMEOUT; i >= 0; i--)); do
printf "\r${MESSAGE} %ss. " "${i}"
sleep 1
done
fi
fi
}
# Start OS-specific detection and work
if [[ "$OSTYPE" == "linux-gnu"* ]]; then if [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Check if root or sudo # Check if root or sudo
root=false root=false
@ -108,6 +244,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
# We search for the line starting with ID= # We search for the line starting with ID=
# Then we remove the ID= prefix to get the name itself # Then we remove the ID= prefix to get the name itself
line="$(grep -Ei '^ID=' /etc/os-release)" line="$(grep -Ei '^ID=' /etc/os-release)"
echo "Raw detected os-release distro line: $line" >&5
line=${line##*=} line=${line##*=}
echo "$line" echo "$line"
return 0 return 0
@ -134,6 +271,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
# This is the "type" of distro. For example, Ubuntu returns "debian". # This is the "type" of distro. For example, Ubuntu returns "debian".
if grep -Eiq '^ID_LIKE=' /etc/os-release >/dev/null; then if grep -Eiq '^ID_LIKE=' /etc/os-release >/dev/null; then
line="$(grep -Ei '^ID_LIKE=' /etc/os-release)" line="$(grep -Ei '^ID_LIKE=' /etc/os-release)"
echo "Raw detected os-release distro family line: $line" >&5
line=${line##*=} line=${line##*=}
echo "$line" echo "$line"
return 0 return 0
@ -149,36 +287,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
fi fi
} }
# This checks for free space on the installation drive and returns that in Gb. check_storage_space
size_available() {
local folder
if [ -d "$DIR" ]; then
folder="$DIR"
elif [ -d "$PARENT_DIR" ]; then
folder="$PARENT_DIR"
elif [ -d "$(echo "$DIR" | cut -d "/" -f2)" ]; then
folder="$(echo "$DIR" | cut -d "/" -f2)"
else
echo "We are assuming a root drive install for space-checking purposes."
folder='/'
fi
local FREESPACEINKB="$(df -Pk "$folder" | sed 1d | grep -v used | awk '{ print $4 "\t" }')"
local FREESPACEINGB=$((FREESPACEINKB / 1024 / 1024))
echo "$FREESPACEINGB"
}
# Offer a warning and opportunity to cancel the installation if < 10Gb of Free Space detected
if [ "$(size_available)" -lt 10 ]; then
echo "You have less than 10Gb of free space. This installation may fail."
MSGTIMEOUT=10 # In seconds
MESSAGE="Continuing in..."
echo "Press control-c to cancel the installation."
for ((i = $MSGTIMEOUT; i >= 0; i--)); do
printf "\r${MESSAGE} %ss. " "${i}"
sleep 1
done
fi
# This is the pre-install work for a kohya installation on a runpod # This is the pre-install work for a kohya installation on a runpod
if [ "$RUNPOD" = true ]; then if [ "$RUNPOD" = true ]; then
@ -192,28 +301,29 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
cd "$PARENT_DIR" || exit 1 cd "$PARENT_DIR" || exit 1
if [ ! -d "$DIR/.git" ]; then if [ ! -d "$DIR/.git" ]; then
echo "Cloning $GIT_REPO." echo "Cloning $GIT_REPO."
git clone "$GIT_REPO" git clone "$GIT_REPO" >&3
cd "$DIR" || exit 1 cd "$DIR" || exit 1
git checkout "$BRANCH" git checkout "$BRANCH" >&3
else else
cd "$DIR" || exit 1 cd "$DIR" || exit 1
echo "git repo detected. Attempting tp update repo instead." echo "git repo detected. Attempting tp update repo instead."
echo "Updating: $GIT_REPO" echo "Updating: $GIT_REPO"
git pull "$GIT_REPO" git pull "$GIT_REPO" >&3
fi fi
fi fi
fi fi
distro=get_distro_name distro=get_distro_name
family=get_distro_family family=get_distro_family
echo "Raw detected distro string: $distro" >&4
echo "Raw detected distro family string: $family" >&4
echo "Installing Python TK if not found on the system." echo "Installing Python TK if not found on the system."
if "$distro" | grep -qi "Ubuntu" || "$family" | grep -qi "Ubuntu"; then if "$distro" | grep -qi "Ubuntu" || "$family" | grep -qi "Ubuntu"; then
echo "Ubuntu detected." echo "Ubuntu detected."
if [ $(dpkg-query -W -f='${Status}' python3-tk 2>/dev/null | grep -c "ok installed") = 0 ]; then if [ $(dpkg-query -W -f='${Status}' python3-tk 2>/dev/null | grep -c "ok installed") = 0 ]; then
if [ "$root" = true ]; then if [ "$root" = true ]; then
apt update -y && apt install -y python3-tk apt update -y >&3 && apt install -y python3-tk >&3
else else
echo "This script needs to be run as root or via sudo to install packages." echo "This script needs to be run as root or via sudo to install packages."
exit 1 exit 1
@ -225,7 +335,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "Redhat or Redhat base detected." echo "Redhat or Redhat base detected."
if ! rpm -qa | grep -qi python3-tkinter; then if ! rpm -qa | grep -qi python3-tkinter; then
if [ "$root" = true ]; then if [ "$root" = true ]; then
dnf install python3-tkinter -y dnf install python3-tkinter -y >&3
else else
echo "This script needs to be run as root or via sudo to install packages." echo "This script needs to be run as root or via sudo to install packages."
exit 1 exit 1
@ -235,7 +345,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "Arch Linux or Arch base detected." echo "Arch Linux or Arch base detected."
if ! pacman -Qi tk >/dev/null; then if ! pacman -Qi tk >/dev/null; then
if [ "$root" = true ]; then if [ "$root" = true ]; then
pacman --noconfirm -S tk pacman --noconfirm -S tk >&3
else else
echo "This script needs to be run as root or via sudo to install packages." echo "This script needs to be run as root or via sudo to install packages."
exit 1 exit 1
@ -245,7 +355,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "OpenSUSE detected." echo "OpenSUSE detected."
if ! rpm -qa | grep -qi python-tk; then if ! rpm -qa | grep -qi python-tk; then
if [ "$root" = true ]; then if [ "$root" = true ]; then
zypper install -y python-tk zypper install -y python-tk >&3
else else
echo "This script needs to be run as root or via sudo to install packages." echo "This script needs to be run as root or via sudo to install packages."
exit 1 exit 1
@ -263,53 +373,40 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
python3 -m venv venv python3 -m venv venv
source venv/bin/activate source venv/bin/activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --use-pep517 --upgrade -r requirements.txt # Updating pip if there is one
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/linux/xformers-0.0.14.dev0-cp310-cp310-linux_x86_64.whl echo "Checking for pip updates before Python operations."
python3 -m pip install --upgrade pip >&3
echo "Installing python dependencies. This could take a few minutes as it downloads files."
echo "If this operation ever runs too long, you can rerun this script in verbose mode to check."
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116 >&3
pip install --use-pep517 --upgrade -r requirements.txt >&3
pip install -U -I --no-deps \
https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/linux/xformers-0.0.14.dev0-cp310-cp310-linux_x86_64.whl >&3
# We need this extra package and setup if we are running in a runpod # We need this extra package and setup if we are running in a runpod
if [ "$RUNPOD" = true ]; then if [ "$RUNPOD" = true ]; then
pip install tensorrt pip install tensorrt
ln -s "$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer_plugin.so.8" \ # Symlink paths
"$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer_plugin.so.7" libnvinfer_plugin_symlink="$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer_plugin.so.7"
ln -s "$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer.so.8" \ libnvinfer_symlink="$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer.so.7"
"$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer.so.7" libcudart_symlink="$VENV_DIR/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/libcudart.so.11.0"
ln -s "$VENV_DIR/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/libcudart.so.12" \
"$VENV_DIR/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/libcudart.so.11.0" #Target file paths
libnvinfer_plugin_target="$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer_plugin.so.8"
libnvinfer_target="$VENV_DIR/lib/python3.10/site-packages/tensorrt/libnvinfer.so.8"
libcudart_target="$VENV_DIR/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/libcudart.so.12"
echo "Checking symlinks now."
create_symlinks "$libnvinfer_plugin_symlink" "$libnvinfer_plugin_target"
create_symlinks "$libnvinfer_symlink" "$libnvinfer_target"
create_symlinks "$libcudart_symlink" "$libcudart_target"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VENV_DIR/lib/python3.10/site-packages/tensorrt/" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VENV_DIR/lib/python3.10/site-packages/tensorrt/"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VENV_DIR/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VENV_DIR/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/"
# Attempt to non-interactively install a default accelerate config file unless specified otherwise. configure_accelerate
# Documentation for order of precedence locations for configuration file for automated installation:
# https://huggingface.co/docs/accelerate/basic_tutorials/launch#custom-configurations
if [ "$INTERACTIVE" = true ]; then
accelerate config
else
if env_var_exists HF_HOME; then
if [ ! -f "$HF_HOME/accelerate/default_config.yaml" ]; then
mkdir -p "$HF_HOME/accelerate/" &&
cp "$DIR/config_files/accelerate/default_config.yaml" "$HF_HOME/accelerate/default_config.yaml" &&
echo "Copied accelerate config file to: $HF_HOME/accelerate/default_config.yaml"
fi
elif env_var_exists XDG_CACHE_HOME; then
if [ ! -f "$XDG_CACHE_HOME/huggingface/accelerate" ]; then
mkdir -p "$XDG_CACHE_HOME/huggingface/accelerate" &&
cp "$DIR/config_files/accelerate/default_config.yaml" "$XDG_CACHE_HOME/huggingface/accelerate/default_config.yaml" &&
echo "Copied accelerate config file to: $XDG_CACHE_HOME/huggingface/accelerate/default_config.yaml"
fi
elif env_var_exists HOME; then
if [ ! -f "$HOME/.cache/huggingface/accelerate" ]; then
mkdir -p "$HOME/.cache/huggingface/accelerate" &&
cp "$DIR/config_files/accelerate/default_config.yaml" "$HOME/.cache/huggingface/accelerate/default_config.yaml" &&
echo "Copying accelerate config file to: $HOME/.cache/huggingface/accelerate/default_config.yaml"
fi
else
echo "Could not place the accelerate configuration file. Please configure manually."
sleep 2
accelerate config
fi
fi
# This is a non-interactive environment, so just directly call gui.sh after all setup steps are complete. # This is a non-interactive environment, so just directly call gui.sh after all setup steps are complete.
if command -v bash >/dev/null; then if command -v bash >/dev/null; then
@ -329,6 +426,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
fi fi
echo -e "Setup finished! Run \e[0;92m./gui.sh\e[0m to start." echo -e "Setup finished! Run \e[0;92m./gui.sh\e[0m to start."
echo "Please note if you'd like to expose your public server you need to run ./gui.sh --share"
elif [[ "$OSTYPE" == "darwin"* ]]; then elif [[ "$OSTYPE" == "darwin"* ]]; then
# The initial setup script to prep the environment on macOS # The initial setup script to prep the environment on macOS
# xformers has been omitted as that is for Nvidia GPUs only # xformers has been omitted as that is for Nvidia GPUs only
@ -341,16 +439,20 @@ elif [[ "$OSTYPE" == "darwin"* ]]; then
exit 1 exit 1
fi fi
check_storage_space
# Install base python packages # Install base python packages
echo "Installing Python 3.10 if not found." echo "Installing Python 3.10 if not found."
if ! brew ls --versions python@3.10 >/dev/null; then if ! brew ls --versions python@3.10 >/dev/null; then
brew install python@3.10 echo "Installing Python 3.10."
brew install python@3.10 >&3
else else
echo "Python 3.10 found!" echo "Python 3.10 found!"
fi fi
echo "Installing Python-TK 3.10 if not found." echo "Installing Python-TK 3.10 if not found."
if ! brew ls --versions python-tk@3.10 >/dev/null; then if ! brew ls --versions python-tk@3.10 >/dev/null; then
brew install python-tk@3.10 echo "Installing Python TK 3.10."
brew install python-tk@3.10 >&3
else else
echo "Python Tkinter 3.10 found!" echo "Python Tkinter 3.10 found!"
fi fi
@ -362,15 +464,24 @@ elif [[ "$OSTYPE" == "darwin"* ]]; then
# DEBUG ONLY # DEBUG ONLY
#pip install pydevd-pycharm~=223.8836.43 #pip install pydevd-pycharm~=223.8836.43
# Updating pip if there is one
echo "Checking for pip updates before Python operations."
python3 -m pip install --upgrade pip >&3
# Tensorflow installation # Tensorflow installation
if wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl /tmp; then echo "Downloading and installing macOS Tensorflow."
python -m pip install tensorflow==0.1a3 -f https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl if wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl /tmp &>3; then
python -m pip install tensorflow==0.1a3 \
-f https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl >&3
rm -f /tmp/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl rm -f /tmp/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl
fi fi
pip install torch==2.0.0 torchvision==0.15.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html echo "Installing python dependencies. This could take a few minutes as it downloads files."
python -m pip install --use-pep517 --upgrade -r requirements.txt echo "If this operation ever runs too long, you can rerun this script in verbose mode to check."
accelerate config pip install torch==2.0.0 torchvision==0.15.1 \
-f https://download.pytorch.org/whl/cpu/torch_stable.html >&3
python -m pip install --use-pep517 --upgrade -r requirements.txt >&3
configure_accelerate
echo -e "Setup finished! Run ./gui.sh to start." echo -e "Setup finished! Run ./gui.sh to start."
else else
echo "Python not found. Please ensure you install Python." echo "Python not found. Please ensure you install Python."