Qwen-ImageForFlo-Advanced / install_runpod.sh
Gerchegg's picture
Upload install_runpod.sh with huggingface_hub
30400f9 verified
#!/bin/bash
#
# 🛠️ ADVANCED INSTALLATION - Qwen-Soloband на RunPod
# Расширенный скрипт установки с дополнительными опциями
#
set -e # Exit on error
# =================================================================
# ЦВЕТА ДЛЯ ВЫВОДА
# =================================================================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# =================================================================
# ПАРАМЕТРЫ
# =================================================================
WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
PROJECT_DIR="${PROJECT_DIR:-$WORKSPACE_DIR/Qwen-ImageForFlo-Advanced}"
LORA_DIR="${LORA_DIR:-$WORKSPACE_DIR/loras}"
MODEL_REPO="${MODEL_REPO:-Gerchegg/Qwen-Soloband-Diffusers}"
SPACE_REPO="${SPACE_REPO:-Gerchegg/Qwen-ImageForFlo-Advanced}"
# =================================================================
# ФУНКЦИИ
# =================================================================
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[OK]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_header() {
echo ""
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ $1"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
}
check_gpu() {
if command -v nvidia-smi &> /dev/null; then
log_info "Проверка GPU..."
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader
log_success "GPU обнаружен"
else
log_warning "nvidia-smi не найден, пропускаем проверку GPU"
fi
}
# =================================================================
# MAIN
# =================================================================
print_header "🛠️ ADVANCED INSTALLATION - Qwen-Soloband"
log_info "Параметры установки:"
echo " WORKSPACE_DIR: $WORKSPACE_DIR"
echo " PROJECT_DIR: $PROJECT_DIR"
echo " LORA_DIR: $LORA_DIR"
echo " MODEL_REPO: $MODEL_REPO"
echo " SPACE_REPO: $SPACE_REPO"
echo ""
# =================================================================
# ПРОВЕРКА HF_TOKEN
# =================================================================
if [ -z "$HF_TOKEN" ]; then
log_error "HF_TOKEN not set!"
echo ""
echo "Установите HF_TOKEN перед запуском:"
echo " export HF_TOKEN='your_token_here'"
echo ""
echo "Или:"
echo " HF_TOKEN='your_token_here' ./install_runpod.sh"
echo ""
echo "Получить токен: https://huggingface.co/settings/tokens"
exit 1
fi
log_success "HF_TOKEN найден"
# =================================================================
# ПРОВЕРКА СИСТЕМЫ
# =================================================================
log_info "Проверка системы..."
echo " Python: $(python --version 2>&1)"
echo " Pip: $(pip --version 2>&1)"
check_gpu
# =================================================================
# УСТАНОВКА HUGGING FACE CLI
# =================================================================
print_header "📦 Установка Hugging Face CLI"
export HF_HUB_ENABLE_HF_TRANSFER=0
pip install -q --upgrade huggingface_hub[cli]
log_info "Авторизация в Hugging Face..."
hf auth login --token "$HF_TOKEN"
hf auth whoami
# =================================================================
# СОЗДАНИЕ СТРУКТУРЫ ПАПОК
# =================================================================
print_header "📁 Создание структуры папок"
mkdir -p "$WORKSPACE_DIR"
mkdir -p "$LORA_DIR"
log_success "Папки созданы"
# =================================================================
# СКАЧИВАНИЕ ПРОЕКТА
# =================================================================
print_header "⬇️ Скачивание проекта"
cd "$WORKSPACE_DIR"
if [ -d "$PROJECT_DIR" ]; then
log_warning "Проект уже существует: $PROJECT_DIR"
read -p "Перезаписать? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "Обновление проекта..."
cd "$PROJECT_DIR"
hf download "$SPACE_REPO" --repo-type space --local-dir .
else
log_info "Пропускаем скачивание"
cd "$PROJECT_DIR"
fi
else
log_info "Скачивание $SPACE_REPO..."
hf download "$SPACE_REPO" --repo-type space --local-dir "$(basename $PROJECT_DIR)"
cd "$PROJECT_DIR"
fi
log_success "Проект готов: $PROJECT_DIR"
# =================================================================
# УСТАНОВКА PYTHON ЗАВИСИМОСТЕЙ
# =================================================================
print_header "🐍 Установка Python зависимостей"
if [ -f "requirements.txt" ]; then
log_info "Устанавливаем из requirements.txt..."
pip install -r requirements.txt
log_success "Зависимости установлены"
else
log_error "requirements.txt не найден!"
exit 1
fi
# =================================================================
# ПРОВЕРКА УСТАНОВКИ
# =================================================================
print_header "✅ Проверка установки"
log_info "Проверка импортов..."
python -c "import torch; print(f' PyTorch: {torch.__version__}')"
python -c "import gradio; print(f' Gradio: {gradio.__version__}')"
python -c "from diffusers import DiffusionPipeline; print(' Diffusers: OK')"
log_success "Все импорты работают"
# =================================================================
# ИНФОРМАЦИЯ О LORA
# =================================================================
print_header "🎭 LoRA папка"
echo " Локальные LoRA будут загружены из: $LORA_DIR"
echo ""
echo " Положите ваши .safetensors файлы туда для автоматической загрузки"
echo " Пример:"
echo " $LORA_DIR/my_style.safetensors"
echo ""
if [ -d "$LORA_DIR" ] && [ "$(ls -A $LORA_DIR/*.safetensors 2>/dev/null | wc -l)" -gt 0 ]; then
log_info "Найденные LoRA файлы:"
ls -lh "$LORA_DIR"/*.safetensors
else
log_info "LoRA файлы не найдены (это нормально)"
fi
# =================================================================
# ЗАВЕРШЕНИЕ
# =================================================================
print_header "🎉 УСТАНОВКА ЗАВЕРШЕНА!"
echo "🚀 Для запуска приложения:"
echo ""
echo " cd $PROJECT_DIR"
echo " python app.py"
echo ""
echo "🎨 С кастомной моделью:"
echo ""
echo " MODEL_REPO='username/custom-model' python app.py"
echo ""
echo "📝 Доступные schedulers:"
echo " - DPM++ 2M Karras (по умолчанию)"
echo " - DPM++ SDE Karras"
echo " - DPM++ 3M SDE Karras"
echo " - Euler, Euler Ancestral"
echo " - И другие (см. документацию)"
echo ""
echo "🎭 LoRA папка: $LORA_DIR"
echo ""
echo "📺 После запуска:"
echo " RunPod Dashboard → Connect → HTTP Service [Port 7860]"
echo ""
echo "📚 Документация:"
echo " README.md - Основная документация"
echo " RUNPOD_DEPLOYMENT.md - Инструкции по развертыванию"
echo ""
log_success "Готово к работе! 🎨"