Non-interactive mode, new warning, new default config for accel

We now warn the user with a nicely formatted message if they have less than 10Gb space free and offer a 10s window to cancel operations. We now try to configure accelerate with no user input by default, but allow an override.
This commit is contained in:
JSTayco 2023-03-29 13:26:16 -07:00
parent ee1ac64034
commit 71c9459db2
3 changed files with 74 additions and 4 deletions

View File

@ -85,10 +85,11 @@ Options:
-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.
-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.
-h, --help Show this screen. -h, --help Show this screen.
``` ```
During the accelerate config screen after running the script answer "This machine", "None", "No" for the remaining questions. If you are using the interactive mode, our default values for the accelerate config screen after running the script answer "This machine", "None", "No" for the remaining questions.
These are the same answers as the Windows install. These are the same answers as the Windows install.
### Windows ### Windows

View File

@ -0,0 +1,22 @@
command_file: null
commands: null
compute_environment: LOCAL_MACHINE
deepspeed_config: {}
distributed_type: 'NO'
downcast_bf16: 'no'
dynamo_backend: 'NO'
fsdp_config: {}
gpu_ids: all
machine_rank: 0
main_process_ip: null
main_process_port: null
main_training_function: main
megatron_lm_config: {}
mixed_precision: 'no'
num_machines: 1
num_processes: 1
rdzv_backend: static
same_network: true
tpu_name: null
tpu_zone: null
use_cpu: false

View File

@ -18,6 +18,7 @@ Options:
-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.
-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.
-h, --help Show this screen. -h, --help Show this screen.
EOF EOF
} }
@ -27,8 +28,9 @@ DIR="/workspace/kohya_ss"
BRANCH="master" BRANCH="master"
GIT_REPO="https://github.com/bmaltais/kohya_ss.git" GIT_REPO="https://github.com/bmaltais/kohya_ss.git"
RUNPOD=false RUNPOD=false
INTERACTIVE=false
while getopts "b:d:g:r-:" opt; do while getopts "b:d:g:ir-:" 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
@ -39,6 +41,7 @@ while getopts "b:d:g:r-:" opt; do
b | branch) BRANCH="$OPTARG" ;; b | branch) BRANCH="$OPTARG" ;;
d | dir) DIR="$OPTARG" ;; d | dir) DIR="$OPTARG" ;;
g | git-repo) GIT_REPO="$OPTARG" ;; g | git-repo) GIT_REPO="$OPTARG" ;;
i | interactive) INTERACTIVE=true ;;
r | runpod) RUNPOD=true ;; r | runpod) RUNPOD=true ;;
h) display_help && exit 0 ;; h) display_help && exit 0 ;;
*) display_help && exit 0 ;; *) display_help && exit 0 ;;
@ -116,10 +119,29 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
fi fi
} }
# This checks for free space on the installation drive and returns that in Gb.
size_available() {
local FREESPACEINKB="$(df -Pk "$DIR" | sed 1d | grep -v used | awk '{ print $4 "\t" }')"
local FREESPACEINGB=$((FREESPACEINKB / 1024 / 1024))
echo "$FREESPACEINGB"
}
if env_var_exists RUNPOD_POD_ID || env_var_exists RUNPOD_API_KEY; then if env_var_exists RUNPOD_POD_ID || env_var_exists RUNPOD_API_KEY; then
RUNPOD=true RUNPOD=true
fi fi
# 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
if [ -d "$VENV_DIR" ]; then if [ -d "$VENV_DIR" ]; then
@ -221,6 +243,33 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
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.
# 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 ./config_files/accelerate/default_config.yaml "$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 ./config_files/accelerate/default_config.yaml "$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 ./config_files/accelerate/default_config.yaml "$HOME/.cache/huggingface/accelerate/default_config.yaml"
fi
else
echo "Could not place the accelerate configuration file. Please configure manually."
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
bash "$DIR"/gui.sh bash "$DIR"/gui.sh
@ -230,8 +279,6 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
fi fi
fi fi
accelerate config
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."
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