| #!/bin/bash |
| |
| |
|
|
| set -e |
|
|
| echo "==============================================" |
| echo "Flux Identity LoRA Training Environment Setup" |
| echo "==============================================" |
|
|
| |
| RED='\033[0;31m' |
| GREEN='\033[0;32m' |
| YELLOW='\033[1;33m' |
| NC='\033[0m' |
|
|
| log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } |
| log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } |
| log_error() { echo -e "${RED}[ERROR]${NC} $1"; } |
|
|
| |
| |
| |
| 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 . |
|
|
| |
| |
| |
| 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}" |
|
|
| |
| |
| |
| 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 |
|
|
| |
| |
| |
| 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 |
|
|
| |
| |
| |
| 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 |
|
|
| |
| |
| |
| 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 |
|
|
| |
| |
| |
| 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!') |
| " |
|
|
| |
| |
| |
| 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 |
|
|
| |
| cd custom_nodes |
| if [ ! -d "ComfyUI-Manager" ]; then |
| git clone https://github.com/ltdrdata/ComfyUI-Manager.git |
| fi |
|
|
| |
| 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" |
|
|
| |
| |
| |
| 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 |
|
|
| |
| 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" |
|
|
| |
| |
| |
| echo "" |
| log_info "Phase 10: Setting Up Project Scripts" |
| echo "--------------------------------------------" |
|
|
| |
| chmod +x ${PROJECT_DIR}/scripts/*.sh 2>/dev/null || true |
| chmod +x ${PROJECT_DIR}/scripts/*.py 2>/dev/null || true |
|
|
| |
| |
| |
| 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 "" |
|
|