MYai / scripts /setup_environment.sh
montignyp's picture
Initial commit: Flux Identity LoRA Training Environment
1a3a976
#!/bin/bash
# Flux Identity LoRA Training Environment - Complete Setup Script
# Target: RunPod with NVIDIA A100 80GB
set -e
echo "=============================================="
echo "Flux Identity LoRA Training Environment Setup"
echo "=============================================="
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# ============================================
# Phase 1: System Inspection
# ============================================
echo ""
log_info "Phase 1: System Inspection"
echo "--------------------------------------------"
echo "GPU Information:"
nvidia-smi --query-gpu=name,memory.total,memory.free,driver_version --format=csv || log_warn "nvidia-smi not available"
echo ""
echo "CUDA Version:"
nvcc --version 2>/dev/null || log_warn "nvcc not available"
echo ""
echo "CPU Information:"
cat /proc/cpuinfo | grep "model name" | head -1 || echo "CPU info not available"
echo "CPU Cores: $(nproc)"
echo ""
echo "Memory:"
free -h
echo ""
echo "Disk Space:"
df -h /workspace 2>/dev/null || df -h .
# ============================================
# Phase 2: Project Structure
# ============================================
echo ""
log_info "Phase 2: Creating Project Structure"
echo "--------------------------------------------"
PROJECT_DIR="/workspace/flux-project"
mkdir -p ${PROJECT_DIR}/{models/{flux,lora,vae,clip,controlnet,ip-adapter},datasets/identity/{images,processed},output,scripts,logs,configs}
log_info "Project structure created at ${PROJECT_DIR}"
# ============================================
# Phase 3: System Dependencies
# ============================================
echo ""
log_info "Phase 3: Installing System Dependencies"
echo "--------------------------------------------"
apt-get update && apt-get install -y \
git git-lfs wget curl \
libgl1-mesa-glx libglib2.0-0 \
python3.10 python3.10-venv python3-pip \
aria2 ffmpeg
git lfs install
# ============================================
# Phase 4: Python Virtual Environment
# ============================================
echo ""
log_info "Phase 4: Setting Up Python Virtual Environment"
echo "--------------------------------------------"
VENV_PATH="/workspace/venv"
python3.10 -m venv ${VENV_PATH}
source ${VENV_PATH}/bin/activate
pip install --upgrade pip wheel setuptools
# ============================================
# Phase 5: Core ML Packages
# ============================================
echo ""
log_info "Phase 5: Installing Core ML Packages"
echo "--------------------------------------------"
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install xformers
# ============================================
# Phase 6: Training Dependencies
# ============================================
echo ""
log_info "Phase 6: Installing Training Dependencies"
echo "--------------------------------------------"
pip install accelerate transformers diffusers safetensors
pip install bitsandbytes scipy tensorboard
pip install lion-pytorch prodigyopt dadaptation
pip install opencv-python pillow numpy
pip install toml pyyaml tqdm rich
pip install imagehash
pip install huggingface_hub
# ============================================
# Phase 7: CUDA Verification
# ============================================
echo ""
log_info "Phase 7: Verifying CUDA Installation"
echo "--------------------------------------------"
python -c "
import torch
print(f'PyTorch version: {torch.__version__}')
print(f'CUDA available: {torch.cuda.is_available()}')
if torch.cuda.is_available():
print(f'CUDA version: {torch.version.cuda}')
print(f'GPU: {torch.cuda.get_device_name(0)}')
print(f'VRAM: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB')
else:
print('WARNING: CUDA not available!')
"
# ============================================
# Phase 8: ComfyUI Installation
# ============================================
echo ""
log_info "Phase 8: Installing ComfyUI"
echo "--------------------------------------------"
cd /workspace
if [ ! -d "ComfyUI" ]; then
git clone https://github.com/comfyanonymous/ComfyUI.git
fi
cd ComfyUI
pip install -r requirements.txt
# Install ComfyUI Manager
cd custom_nodes
if [ ! -d "ComfyUI-Manager" ]; then
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
fi
# Create model symlinks
log_info "Creating model symlinks..."
ln -sf ${PROJECT_DIR}/models/flux /workspace/ComfyUI/models/unet
ln -sf ${PROJECT_DIR}/models/lora /workspace/ComfyUI/models/loras
ln -sf ${PROJECT_DIR}/models/vae /workspace/ComfyUI/models/vae
ln -sf ${PROJECT_DIR}/models/clip /workspace/ComfyUI/models/clip
ln -sf ${PROJECT_DIR}/models/controlnet /workspace/ComfyUI/models/controlnet
log_info "ComfyUI installed successfully"
# ============================================
# Phase 9: kohya_ss/sd-scripts Installation
# ============================================
echo ""
log_info "Phase 9: Installing kohya_ss/sd-scripts"
echo "--------------------------------------------"
cd /workspace
if [ ! -d "sd-scripts" ]; then
git clone https://github.com/kohya-ss/sd-scripts.git
fi
cd sd-scripts
pip install -r requirements.txt
# Verify installation
python -c "from library import flux_train_utils; print('sd-scripts Flux support verified')" || log_warn "sd-scripts Flux verification failed"
log_info "sd-scripts installed successfully"
# ============================================
# Phase 10: Copy Scripts to Project
# ============================================
echo ""
log_info "Phase 10: Setting Up Project Scripts"
echo "--------------------------------------------"
# Make scripts executable
chmod +x ${PROJECT_DIR}/scripts/*.sh 2>/dev/null || true
chmod +x ${PROJECT_DIR}/scripts/*.py 2>/dev/null || true
# ============================================
# Final Verification
# ============================================
echo ""
log_info "Running Final Verification"
echo "--------------------------------------------"
echo "1. CUDA Check:"
python -c "import torch; print(f' CUDA: {torch.cuda.is_available()}')"
echo "2. sd-scripts Check:"
python -c "from library import flux_train_utils; print(' sd-scripts: OK')" 2>/dev/null || echo " sd-scripts: FAILED"
echo "3. Directory Structure:"
ls -la ${PROJECT_DIR}/
echo ""
echo "=============================================="
log_info "Setup Complete!"
echo "=============================================="
echo ""
echo "Next Steps:"
echo "1. Download FLUX.1 Dev model:"
echo " huggingface-cli login"
echo " huggingface-cli download black-forest-labs/FLUX.1-dev --local-dir ${PROJECT_DIR}/models/flux"
echo ""
echo "2. Download text encoders:"
echo " huggingface-cli download openai/clip-vit-large-patch14 --local-dir ${PROJECT_DIR}/models/clip/clip-l"
echo " huggingface-cli download google/t5-v1_1-xxl --local-dir ${PROJECT_DIR}/models/clip/t5-xxl"
echo ""
echo "3. Place your training images in:"
echo " ${PROJECT_DIR}/datasets/identity/images/"
echo ""
echo "4. Start ComfyUI:"
echo " ${PROJECT_DIR}/scripts/start_comfyui.sh"
echo ""
echo "5. Start Training:"
echo " ${PROJECT_DIR}/scripts/start_training.sh"
echo ""