|
#!/bin/bash |
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" |
|
|
|
cd "$SCRIPT_DIR" || exit 1 |
|
|
|
set -e |
|
|
|
if ! command -v conda &>/dev/null; then |
|
echo "Conda Not Found" |
|
exit 1 |
|
fi |
|
|
|
trap 'echo "Error Occured at \"$BASH_COMMAND\" with exit code $?"; exit 1' ERR |
|
|
|
is_HF=false |
|
is_HF_MIRROR=false |
|
is_MODELSCOPE=false |
|
DOWNLOAD_UVR5=false |
|
|
|
print_help() { |
|
echo "Usage: bash install.sh [OPTIONS]" |
|
echo "" |
|
echo "Options:" |
|
echo " --source HF|HF-Mirror|ModelScope Specify the model source (REQUIRED)" |
|
echo " --download-uvr5 Enable downloading the UVR5 model" |
|
echo " -h, --help Show this help message and exit" |
|
echo "" |
|
echo "Examples:" |
|
echo " bash install.sh --source HF --download-uvr5" |
|
echo " bash install.sh --source ModelScope" |
|
} |
|
|
|
|
|
if [[ $# -eq 0 ]]; then |
|
print_help |
|
exit 0 |
|
fi |
|
|
|
|
|
while [[ $# -gt 0 ]]; do |
|
case "$1" in |
|
--source) |
|
case "$2" in |
|
HF) |
|
is_HF=true |
|
;; |
|
HF-Mirror) |
|
is_HF_MIRROR=true |
|
;; |
|
ModelScope) |
|
is_MODELSCOPE=true |
|
;; |
|
*) |
|
echo "Error: Invalid Download Source: $2" |
|
echo "Choose From: [HF, HF-Mirror, ModelScope]" |
|
exit 1 |
|
;; |
|
esac |
|
shift 2 |
|
;; |
|
--download-uvr5) |
|
DOWNLOAD_UVR5=true |
|
shift |
|
;; |
|
-h|--help) |
|
print_help |
|
exit 0 |
|
;; |
|
*) |
|
echo "Unknown Argument: $1" |
|
echo "Use -h or --help to see available options." |
|
exit 1 |
|
;; |
|
esac |
|
done |
|
|
|
if ! $is_HF && ! $is_HF_MIRROR && ! $is_MODELSCOPE; then |
|
echo "Error: Download Source is REQUIRED" |
|
echo "" |
|
print_help |
|
exit 1 |
|
fi |
|
|
|
if [ "$is_HF" = "true" ]; then |
|
echo "Download Model From HuggingFace" |
|
PRETRINED_URL="https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/pretrained_models.zip" |
|
G2PW_URL="https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/G2PWModel.zip" |
|
UVR5_URL="https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/uvr5_weights.zip" |
|
elif [ "$is_HF_MIRROR" = "true" ]; then |
|
echo "Download Model From HuggingFace-Mirror" |
|
PRETRINED_URL="https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/pretrained_models.zip" |
|
G2PW_URL="https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/G2PWModel.zip" |
|
UVR5_URL="https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/uvr5_weights.zip" |
|
elif [ "$is_MODELSCOPE" = "true" ]; then |
|
echo "Download Model From ModelScope" |
|
PRETRINED_URL="https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/pretrained_models.zip" |
|
G2PW_URL="https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/G2PWModel.zip" |
|
UVR5_URL="https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/uvr5_weights.zip" |
|
fi |
|
|
|
if find "GPT_SoVITS/pretrained_models" -mindepth 1 ! -name '.gitignore' | grep -q .; then |
|
echo "Pretrained Model Exists" |
|
else |
|
echo "Download Pretrained Models" |
|
wget --tries=25 --wait=5 --read-timeout=40 --retry-on-http-error=404 "$PRETRINED_URL" |
|
|
|
unzip pretrained_models.zip |
|
rm -rf pretrained_models.zip |
|
mv pretrained_models/* GPT_SoVITS/pretrained_models |
|
rm -rf pretrained_models |
|
fi |
|
|
|
if [ ! -d "GPT_SoVITS/text/G2PWModel" ]; then |
|
echo "Download G2PWModel" |
|
wget --tries=25 --wait=5 --read-timeout=40 --retry-on-http-error=404 "$G2PW_URL" |
|
|
|
unzip G2PWModel.zip |
|
rm -rf G2PWModel.zip |
|
mv G2PWModel GPT_SoVITS/text/G2PWModel |
|
else |
|
echo "G2PWModel Exists" |
|
fi |
|
|
|
if [ "$DOWNLOAD_UVR5" = "true" ];then |
|
if find "tools/uvr5/uvr5_weights" -mindepth 1 ! -name '.gitignore' | grep -q .; then |
|
echo "UVR5 Model Exists" |
|
else |
|
echo "Download UVR5 Model" |
|
wget --tries=25 --wait=5 --read-timeout=40 --retry-on-http-error=404 "$UVR5_URL" |
|
|
|
unzip uvr5_weights.zip |
|
rm -rf uvr5_weights.zip |
|
mv uvr5_weights/* tools/uvr5/uvr5_weights |
|
rm -rf uvr5_weights |
|
fi |
|
fi |
|
|
|
|
|
|
|
echo "Installing GCC..." |
|
conda install -c conda-forge gcc=14 -y |
|
|
|
echo "Installing G++..." |
|
conda install -c conda-forge gxx -y |
|
|
|
echo "Installing ffmpeg and cmake..." |
|
conda install ffmpeg cmake -y |
|
|
|
echo "Installing git-lfs and zip..." |
|
conda install git-lfs -y |
|
conda install zip -y |
|
|
|
git-lfs install |
|
|
|
echo "Checking for CUDA installation..." |
|
if command -v nvidia-smi &>/dev/null; then |
|
USE_CUDA=true |
|
echo "CUDA found." |
|
else |
|
echo "CUDA not found." |
|
USE_CUDA=false |
|
fi |
|
|
|
if [ "$USE_CUDA" = false ]; then |
|
echo "Checking for ROCm installation..." |
|
if [ -d "/opt/rocm" ]; then |
|
USE_ROCM=true |
|
echo "ROCm found." |
|
if grep -qi "microsoft" /proc/version; then |
|
echo "You are running WSL." |
|
IS_WSL=true |
|
else |
|
echo "You are NOT running WSL." |
|
IS_WSL=false |
|
fi |
|
else |
|
echo "ROCm not found." |
|
USE_ROCM=false |
|
fi |
|
fi |
|
|
|
if [ "$USE_CUDA" = true ]; then |
|
echo "Installing PyTorch with CUDA support..." |
|
pip install torch==2.5.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124 |
|
elif [ "$USE_ROCM" = true ]; then |
|
echo "Installing PyTorch with ROCm support..." |
|
pip install torch==2.5.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/rocm6.2 |
|
else |
|
echo "Installing PyTorch for CPU..." |
|
pip install torch==2.5.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cpu |
|
fi |
|
|
|
echo "Installing Python dependencies from requirements.txt..." |
|
|
|
|
|
|
|
hash -r |
|
|
|
pip install -r extra-req.txt --no-deps |
|
|
|
pip install -r requirements.txt |
|
|
|
if [ "$USE_ROCM" = true ] && [ "$IS_WSL" = true ]; then |
|
echo "Update to WSL compatible runtime lib..." |
|
location=$(pip show torch | grep Location | awk -F ": " '{print $2}') |
|
cd "${location}"/torch/lib/ || exit |
|
rm libhsa-runtime64.so* |
|
cp /opt/rocm/lib/libhsa-runtime64.so.1.2 libhsa-runtime64.so |
|
fi |
|
|
|
echo "Installation completed successfully!" |
|
|