All checks were successful
Build and Push RunPod Docker Image / build-and-push (push) Successful in 14s
- Remove custom PivoineDiffRhythmRun wrapper node - Add git patch file for ComfyUI_DiffRhythm __init__.py - Patch adds LlamaConfig fix at import time - Add arty script 'fix/diffrhythm-patch' to apply patch - Revert all workflows to use original DiffRhythmRun - Remove startup_patch.py and revert start.sh This approach is cleaner and more maintainable than wrapping the node. The patch directly fixes the tensor dimension mismatch (32 vs 64) in DiffRhythm's rotary position embeddings by ensuring num_attention_heads and num_key_value_heads are properly set based on hidden_size. References: - https://github.com/billwuhao/ComfyUI_DiffRhythm/issues/44 - https://github.com/billwuhao/ComfyUI_DiffRhythm/issues/48
975 lines
32 KiB
YAML
975 lines
32 KiB
YAML
name: "RunPod AI Model Orchestrator"
|
|
version: "2.0.0"
|
|
description: "Process-based AI model orchestrator for RunPod GPU instances with ComfyUI integration"
|
|
author: "valknar@pivoine.art"
|
|
license: "MIT"
|
|
|
|
# Git repositories to clone for a fresh RunPod deployment
|
|
references:
|
|
# ComfyUI base installation
|
|
- url: https://github.com/comfyanonymous/ComfyUI.git
|
|
into: $COMFYUI_ROOT
|
|
description: "ComfyUI - Node-based interface for image/video/audio generation"
|
|
|
|
# ComfyUI Essential Custom Nodes
|
|
- url: https://github.com/ltdrdata/ComfyUI-Manager.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-Manager
|
|
description: "ComfyUI Manager - Install/manage custom nodes and models"
|
|
essential: true
|
|
|
|
- url: https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-VideoHelperSuite
|
|
description: "Video operations and processing"
|
|
essential: true
|
|
|
|
- url: https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-AnimateDiff-Evolved
|
|
description: "AnimateDiff for video generation"
|
|
essential: true
|
|
|
|
- url: https://github.com/cubiq/ComfyUI_IPAdapter_plus.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI_IPAdapter_plus
|
|
description: "IP-Adapter for style transfer"
|
|
essential: true
|
|
|
|
- url: https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-Impact-Pack
|
|
description: "Auto face enhancement and detailer"
|
|
essential: true
|
|
|
|
# ComfyUI Optional Custom Nodes
|
|
- url: https://github.com/kijai/ComfyUI-CogVideoXWrapper.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-CogVideoXWrapper
|
|
description: "CogVideoX integration for text-to-video"
|
|
essential: false
|
|
|
|
- url: https://github.com/ltdrdata/ComfyUI-Inspire-Pack.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-Inspire-Pack
|
|
description: "Additional inspiration tools"
|
|
essential: false
|
|
|
|
- url: https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-Advanced-ControlNet
|
|
description: "Advanced ControlNet features"
|
|
essential: false
|
|
|
|
- url: https://github.com/MrForExample/ComfyUI-3D-Pack.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI-3D-Pack
|
|
description: "3D asset generation"
|
|
essential: false
|
|
|
|
- url: https://github.com/MixLabPro/comfyui-sound-lab.git
|
|
into: $COMFYUI_ROOT/custom_nodes/comfyui-sound-lab
|
|
description: "MusicGen and Stable Audio integration"
|
|
essential: false
|
|
|
|
- url: https://github.com/billwuhao/ComfyUI_DiffRhythm.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI_DiffRhythm
|
|
description: "DiffRhythm - Full-length song generation (up to 4m45s) with text/audio conditioning"
|
|
essential: false
|
|
|
|
- url: https://github.com/ssitu/ComfyUI_UltimateSDUpscale.git
|
|
into: $COMFYUI_ROOT/custom_nodes/ComfyUI_UltimateSDUpscale
|
|
description: "Ultimate SD Upscale for high-quality image upscaling"
|
|
essential: false
|
|
|
|
# Environment profiles for selective repository management
|
|
envs:
|
|
# RunPod environment variables
|
|
default:
|
|
AI_ROOT: /workspace/ai
|
|
COMFYUI_ROOT: /workspace/ComfyUI
|
|
HF_CACHE: /workspace/huggingface_cache
|
|
LOGS_DIR: /workspace/logs
|
|
BIN_DIR: /workspace/bin
|
|
|
|
# Deployment scripts for RunPod instances
|
|
scripts:
|
|
#
|
|
# Supervisor Control Scripts
|
|
#
|
|
services/supervisor/start: |
|
|
set -a
|
|
source .env
|
|
set +a
|
|
supervisord -c supervisord.conf
|
|
|
|
services/supervisor/stop: |
|
|
supervisorctl -c supervisord.conf shutdown
|
|
|
|
services/supervisor/status: |
|
|
supervisorctl -c supervisord.conf status
|
|
|
|
services/supervisor/restart: |
|
|
supervisorctl -c supervisord.conf restart all
|
|
|
|
#
|
|
# System Setup Scripts
|
|
#
|
|
setup/system-packages: |
|
|
echo "========================================="
|
|
echo " Installing System Packages"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Check GPU availability
|
|
if ! nvidia-smi > /dev/null 2>&1; then
|
|
echo "❌ ERROR: nvidia-smi not found. GPU not available!"
|
|
exit 1
|
|
fi
|
|
echo "✓ GPU detected:"
|
|
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader
|
|
echo ""
|
|
|
|
# Update apt cache
|
|
echo "Updating apt cache..."
|
|
sudo apt update
|
|
|
|
# Install base system packages
|
|
echo "Installing system packages..."
|
|
sudo apt install -y \
|
|
build-essential \
|
|
python3-dev \
|
|
python3-pip \
|
|
python3-venv \
|
|
git \
|
|
curl \
|
|
wget \
|
|
vim \
|
|
htop \
|
|
tmux \
|
|
net-tools \
|
|
davfs2 \
|
|
ffmpeg \
|
|
libavcodec-dev \
|
|
libavformat-dev \
|
|
libavutil-dev \
|
|
libswscale-dev
|
|
|
|
echo ""
|
|
echo "✓ System packages installed successfully"
|
|
|
|
# Verify FFmpeg installation
|
|
if ffmpeg -version > /dev/null 2>&1; then
|
|
echo "✓ FFmpeg installed: $(ffmpeg -version | head -1 | cut -d ' ' -f3)"
|
|
else
|
|
echo "❌ WARNING: FFmpeg not found"
|
|
fi
|
|
|
|
setup/python-env: |
|
|
echo "========================================="
|
|
echo " Setting Up Python Environment"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Upgrade pip
|
|
echo "Upgrading pip to 23.3.1..."
|
|
sudo pip3 install --upgrade pip==23.3.1
|
|
|
|
# Install core Python packages
|
|
echo "Installing core Python packages..."
|
|
if [ -f "$AI_ROOT/core/requirements.txt" ]; then
|
|
sudo pip3 install -r $AI_ROOT/core/requirements.txt
|
|
else
|
|
echo "⚠ Warning: $AI_ROOT/core/requirements.txt not found"
|
|
fi
|
|
|
|
# Create virtual environments for services with isolated dependencies
|
|
echo ""
|
|
echo "Creating virtual environments for services..."
|
|
|
|
# WebDAV sync service
|
|
if [ -f "webdav-sync/requirements.txt" ]; then
|
|
echo " - webdav-sync..."
|
|
cd webdav-sync && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && deactivate && cd ..
|
|
fi
|
|
|
|
# Model orchestrator service
|
|
if [ -f "model-orchestrator/requirements.txt" ]; then
|
|
echo " - model-orchestrator..."
|
|
cd model-orchestrator && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && deactivate && cd ..
|
|
fi
|
|
|
|
# vLLM service (may require more memory)
|
|
if [ -f "vllm/requirements.txt" ]; then
|
|
echo " - vllm (this may take a while)..."
|
|
cd vllm && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && deactivate && cd ..
|
|
fi
|
|
|
|
echo ""
|
|
echo "✓ Python environment configured successfully"
|
|
echo " Virtual environments created for: webdav-sync, model-orchestrator, vllm"
|
|
|
|
setup/comfyui-base: |
|
|
echo "========================================="
|
|
echo " Installing ComfyUI Base"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Clone ComfyUI if not exists
|
|
if [ ! -d "$COMFYUI_ROOT" ]; then
|
|
echo "Cloning ComfyUI repository..."
|
|
git clone https://github.com/comfyanonymous/ComfyUI.git $COMFYUI_ROOT
|
|
else
|
|
echo "ComfyUI already exists, pulling latest changes..."
|
|
cd $COMFYUI_ROOT && git pull
|
|
fi
|
|
|
|
# Create virtual environment for ComfyUI
|
|
echo "Creating virtual environment for ComfyUI..."
|
|
cd $COMFYUI_ROOT
|
|
if [ ! -d "venv" ]; then
|
|
python3 -m venv venv
|
|
fi
|
|
source venv/bin/activate
|
|
|
|
# Install ComfyUI dependencies
|
|
echo "Installing ComfyUI dependencies..."
|
|
pip install -r requirements.txt
|
|
|
|
# Install additional ComfyUI dependencies
|
|
if [ -f "$AI_ROOT/comfyui/requirements.txt" ]; then
|
|
echo "Installing additional ComfyUI dependencies..."
|
|
pip install -r $AI_ROOT/comfyui/requirements.txt
|
|
fi
|
|
|
|
# Install common extension dependencies
|
|
echo "Installing common extension dependencies..."
|
|
pip install GitPython opencv-python-headless diffusers insightface onnxruntime
|
|
|
|
deactivate
|
|
cd $AI_ROOT
|
|
|
|
# Create model directory structure
|
|
echo "Creating ComfyUI model directories..."
|
|
mkdir -p $COMFYUI_ROOT/models/{checkpoints,unet,vae,loras,clip,clip_vision,controlnet,ipadapter,embeddings,upscale_models,video_models,animatediff_models,animatediff_motion_lora,audio_models,configs,diffusers,diffusion_models,musicgen}
|
|
|
|
# Create symlink to huggingface cache
|
|
echo "Creating symlink to HuggingFace cache..."
|
|
ln -sf $HF_CACHE $COMFYUI_ROOT/models/huggingface_cache
|
|
|
|
# Make start script executable
|
|
if [ -f "comfyui/start.sh" ]; then
|
|
chmod +x comfyui/start.sh
|
|
fi
|
|
|
|
echo ""
|
|
echo "✓ ComfyUI base installed successfully"
|
|
echo " Directory: $COMFYUI_ROOT"
|
|
echo " Port: 8188"
|
|
echo " Start: bash comfyui/start.sh"
|
|
|
|
setup/comfyui-nodes: |
|
|
echo "========================================="
|
|
echo " Installing ComfyUI Custom Nodes"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Install system dependencies
|
|
echo "Installing system dependencies..."
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y -qq espeak-ng
|
|
echo "✓ System dependencies installed (espeak-ng)"
|
|
echo ""
|
|
|
|
cd $COMFYUI_ROOT/custom_nodes
|
|
|
|
# ComfyUI Manager
|
|
echo "[1/6] Installing ComfyUI-Manager..."
|
|
if [ ! -d "ComfyUI-Manager" ]; then
|
|
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
|
|
fi
|
|
[ -f "ComfyUI-Manager/requirements.txt" ] && sudo pip3 install -r ComfyUI-Manager/requirements.txt
|
|
|
|
# VideoHelperSuite
|
|
echo "[2/6] Installing ComfyUI-VideoHelperSuite..."
|
|
if [ ! -d "ComfyUI-VideoHelperSuite" ]; then
|
|
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
|
|
fi
|
|
[ -f "ComfyUI-VideoHelperSuite/requirements.txt" ] && sudo pip3 install -r ComfyUI-VideoHelperSuite/requirements.txt
|
|
|
|
# AnimateDiff-Evolved
|
|
echo "[3/6] Installing ComfyUI-AnimateDiff-Evolved..."
|
|
if [ ! -d "ComfyUI-AnimateDiff-Evolved" ]; then
|
|
git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git
|
|
fi
|
|
[ -f "ComfyUI-AnimateDiff-Evolved/requirements.txt" ] && sudo pip3 install -r ComfyUI-AnimateDiff-Evolved/requirements.txt
|
|
|
|
# IPAdapter Plus
|
|
echo "[4/6] Installing ComfyUI_IPAdapter_plus..."
|
|
if [ ! -d "ComfyUI_IPAdapter_plus" ]; then
|
|
git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus.git
|
|
fi
|
|
[ -f "ComfyUI_IPAdapter_plus/requirements.txt" ] && sudo pip3 install -r ComfyUI_IPAdapter_plus/requirements.txt
|
|
|
|
# Impact-Pack
|
|
echo "[5/6] Installing ComfyUI-Impact-Pack..."
|
|
if [ ! -d "ComfyUI-Impact-Pack" ]; then
|
|
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
|
|
fi
|
|
[ -f "ComfyUI-Impact-Pack/requirements.txt" ] && sudo pip3 install -r ComfyUI-Impact-Pack/requirements.txt
|
|
|
|
# DiffRhythm
|
|
echo "[6/6] Installing ComfyUI_DiffRhythm..."
|
|
if [ ! -d "ComfyUI_DiffRhythm" ]; then
|
|
git clone https://github.com/billwuhao/ComfyUI_DiffRhythm.git
|
|
fi
|
|
if [ -f "ComfyUI_DiffRhythm/requirements.txt" ]; then
|
|
cd $COMFYUI_ROOT
|
|
source venv/bin/activate
|
|
pip install -r custom_nodes/ComfyUI_DiffRhythm/requirements.txt
|
|
deactivate
|
|
cd custom_nodes
|
|
fi
|
|
|
|
# Create DiffRhythm model directories
|
|
echo "Creating DiffRhythm model directories..."
|
|
mkdir -p $COMFYUI_ROOT/models/TTS/DiffRhythm/{MuQ-large-msd-iter,MuQ-MuLan-large,xlm-roberta-base,eval-model}
|
|
|
|
# Fix numpy version for vLLM compatibility
|
|
echo "Fixing numpy version..."
|
|
sudo pip3 install 'numpy<2.0.0' --force-reinstall
|
|
|
|
echo ""
|
|
echo "✓ Essential custom nodes installed successfully"
|
|
echo " - ComfyUI-Manager: Install/manage custom nodes"
|
|
echo " - VideoHelperSuite: Video operations"
|
|
echo " - AnimateDiff-Evolved: Video generation"
|
|
echo " - IPAdapter_plus: Style transfer"
|
|
echo " - Impact-Pack: Face enhancement"
|
|
echo " - DiffRhythm: Full-length song generation"
|
|
|
|
models/diffrhythm-eval: |
|
|
echo "========================================="
|
|
echo " Downloading DiffRhythm Eval Model"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Create eval-model directory
|
|
mkdir -p $COMFYUI_ROOT/models/TTS/DiffRhythm/eval-model
|
|
cd $COMFYUI_ROOT/models/TTS/DiffRhythm/eval-model
|
|
|
|
# Download eval.yaml (129 bytes)
|
|
echo "Downloading eval.yaml..."
|
|
curl -L -o eval.yaml "https://huggingface.co/spaces/ASLP-lab/DiffRhythm/resolve/main/pretrained/eval.yaml"
|
|
|
|
# Download eval.safetensors (101 MB)
|
|
echo "Downloading eval.safetensors (101 MB)..."
|
|
curl -L -o eval.safetensors "https://huggingface.co/spaces/ASLP-lab/DiffRhythm/resolve/main/pretrained/eval.safetensors"
|
|
|
|
# Verify files
|
|
if [ -f "eval.yaml" ] && [ -f "eval.safetensors" ]; then
|
|
echo ""
|
|
echo "✓ DiffRhythm eval-model files downloaded successfully"
|
|
echo " - eval.yaml: $(du -h eval.yaml | cut -f1)"
|
|
echo " - eval.safetensors: $(du -h eval.safetensors | cut -f1)"
|
|
else
|
|
echo "❌ ERROR: Failed to download eval-model files"
|
|
exit 1
|
|
fi
|
|
|
|
setup/pivoine-nodes: |
|
|
echo "========================================="
|
|
echo " Linking Pivoine Custom Nodes"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
NODES_SRC="/workspace/ai/comfyui/nodes"
|
|
NODES_DEST="/workspace/ComfyUI/custom_nodes/ComfyUI_Pivoine"
|
|
|
|
# Remove existing symlink if present
|
|
if [ -L "$NODES_DEST" ] || [ -d "$NODES_DEST" ]; then
|
|
echo "Removing existing: $NODES_DEST"
|
|
rm -rf "$NODES_DEST"
|
|
fi
|
|
|
|
# Create symlink
|
|
ln -s "$NODES_SRC" "$NODES_DEST"
|
|
|
|
echo ""
|
|
echo "✓ Pivoine custom nodes linked"
|
|
echo " Source: $NODES_SRC"
|
|
echo " Linked: $NODES_DEST"
|
|
echo ""
|
|
echo "Available Pivoine nodes:"
|
|
echo " 🌸 PivoineDiffRhythmRun - DiffRhythm with chunked disabled"
|
|
echo ""
|
|
echo "Category: 🌸Pivoine/Audio"
|
|
|
|
fix/diffrhythm-patch: |
|
|
echo "========================================="
|
|
echo " Apply DiffRhythm LlamaConfig Patch"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "Issue: Tensor dimension mismatch (32 vs 64) in rotary embeddings"
|
|
echo "Solution: Patch DiffRhythm __init__.py to fix LlamaConfig"
|
|
echo ""
|
|
echo "References:"
|
|
echo " - https://github.com/billwuhao/ComfyUI_DiffRhythm/issues/44"
|
|
echo " - https://github.com/billwuhao/ComfyUI_DiffRhythm/issues/48"
|
|
echo ""
|
|
|
|
DIFF_RHYTHM_DIR="/workspace/ComfyUI/custom_nodes/ComfyUI_DiffRhythm"
|
|
PATCH_FILE="/workspace/ai/comfyui/patches/diffrhythm-llamaconfig-fix.patch"
|
|
|
|
if [ ! -d "$DIFF_RHYTHM_DIR" ]; then
|
|
echo "✗ Error: DiffRhythm not found at $DIFF_RHYTHM_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$PATCH_FILE" ]; then
|
|
echo "✗ Error: Patch file not found at $PATCH_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
cd "$DIFF_RHYTHM_DIR"
|
|
|
|
echo "Checking if patch already applied..."
|
|
if grep -q "PatchedLlamaConfig" __init__.py; then
|
|
echo "✓ Patch already applied!"
|
|
exit 0
|
|
fi
|
|
|
|
echo "Applying patch..."
|
|
patch -p1 < "$PATCH_FILE"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
echo "✓ Patch applied successfully!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Restart ComfyUI: arty services/comfyui/restart"
|
|
echo " 2. Test DiffRhythm workflows"
|
|
else
|
|
echo ""
|
|
echo "✗ Failed to apply patch"
|
|
echo "You may need to manually apply the patch or check for conflicts"
|
|
exit 1
|
|
fi
|
|
|
|
setup/comfyui-extensions-deps: |
|
|
echo "========================================="
|
|
echo " Installing ComfyUI Extensions Dependencies"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
cd $COMFYUI_ROOT
|
|
|
|
# Activate ComfyUI venv
|
|
if [ ! -d "venv" ]; then
|
|
echo "❌ ERROR: ComfyUI venv not found. Run setup/comfyui-base first!"
|
|
exit 1
|
|
fi
|
|
|
|
source venv/bin/activate
|
|
|
|
# Install dependencies for each custom node
|
|
echo "Installing dependencies for all custom nodes..."
|
|
cd custom_nodes
|
|
|
|
installed_count=0
|
|
skipped_count=0
|
|
|
|
for dir in */; do
|
|
if [ -f "${dir}requirements.txt" ]; then
|
|
echo ""
|
|
echo "📦 Installing ${dir%/} dependencies..."
|
|
if pip install -r "${dir}requirements.txt"; then
|
|
installed_count=$((installed_count + 1))
|
|
echo " ✓ ${dir%/} dependencies installed"
|
|
else
|
|
echo " ⚠ Warning: Some dependencies for ${dir%/} may have failed"
|
|
installed_count=$((installed_count + 1))
|
|
fi
|
|
else
|
|
skipped_count=$((skipped_count + 1))
|
|
fi
|
|
done
|
|
|
|
deactivate
|
|
cd $AI_ROOT
|
|
|
|
echo ""
|
|
echo "✓ Extension dependencies installation complete"
|
|
echo " Extensions with dependencies: $installed_count"
|
|
echo " Extensions without requirements.txt: $skipped_count"
|
|
|
|
setup/tailscale: |
|
|
echo "========================================="
|
|
echo " Installing Tailscale VPN"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Check if already installed
|
|
if command -v tailscale > /dev/null 2>&1; then
|
|
echo "✓ Tailscale already installed"
|
|
tailscale version
|
|
else
|
|
echo "Installing Tailscale..."
|
|
curl -fsSL https://tailscale.com/install.sh | sh
|
|
echo "✓ Tailscale installed successfully"
|
|
fi
|
|
|
|
echo ""
|
|
echo "To connect Tailscale:"
|
|
echo " 1. Start daemon: tailscaled --tun=userspace-networking --socks5-server=localhost:1055 &"
|
|
echo " 2. Authenticate: tailscale up --advertise-tags=tag:gpu"
|
|
echo " 3. Get IP: tailscale ip -4"
|
|
echo ""
|
|
echo "Note: Authentication requires manual URL visit"
|
|
|
|
setup/supervisor: |
|
|
echo "========================================="
|
|
echo " Installing Supervisor"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Install Supervisor
|
|
echo "Installing Supervisor via pip..."
|
|
sudo pip3 install supervisor
|
|
|
|
# Create logs directory
|
|
mkdir -p $LOGS_DIR
|
|
|
|
# Copy supervisor configuration
|
|
if [ -f "$AI_ROOT/supervisord.conf" ]; then
|
|
echo "Deploying supervisord configuration..."
|
|
cp $AI_ROOT/supervisord.conf /workspace/supervisord.conf
|
|
chmod 644 /workspace/supervisord.conf
|
|
else
|
|
echo "⚠ Warning: supervisord.conf not found at $AI_ROOT/supervisord.conf"
|
|
fi
|
|
|
|
echo ""
|
|
echo "✓ Supervisor installed successfully"
|
|
echo ""
|
|
echo "Configuration: /workspace/supervisord.conf"
|
|
echo "Logs: $LOGS_DIR/"
|
|
echo ""
|
|
echo "Services configured:"
|
|
echo " - comfyui: ComfyUI server (port 8188) - autostart enabled"
|
|
echo " - orchestrator: Model orchestrator (port 9000) - autostart disabled"
|
|
echo " - webdav-sync: WebDAV output sync service - autostart enabled"
|
|
echo ""
|
|
echo "To start: supervisord -c /workspace/supervisord.conf"
|
|
echo "To manage: supervisorctl status"
|
|
echo "Web UI: http://localhost:9001 (admin/runpod2024)"
|
|
|
|
#
|
|
# Utility Scripts
|
|
#
|
|
setup/validate: |
|
|
echo "========================================="
|
|
echo " Validating Installation"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Check Python packages
|
|
echo "Installed Python packages:"
|
|
pip3 list | grep -E "(fastapi|uvicorn|torch|transformers|diffusers)" || echo " (some packages not found)"
|
|
echo ""
|
|
|
|
# Check GPU memory
|
|
echo "GPU Memory:"
|
|
nvidia-smi --query-gpu=name,memory.free,memory.total --format=csv,noheader
|
|
echo ""
|
|
|
|
# Check cache size
|
|
if [ -d "$HF_CACHE" ]; then
|
|
echo "Model cache size:"
|
|
du -sh $HF_CACHE
|
|
else
|
|
echo "⚠ Warning: $HF_CACHE not found"
|
|
fi
|
|
echo ""
|
|
|
|
# Verify service scripts
|
|
echo "Service scripts:"
|
|
for script in $AI_ROOT/scripts/*.sh; do
|
|
if [ -f "$script" ]; then
|
|
echo " ✓ $(basename $script)"
|
|
chmod +x "$script"
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
echo "✓ Validation complete"
|
|
|
|
setup/cleanup: |
|
|
echo "========================================="
|
|
echo " Cleaning Up for Template Creation"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Remove sensitive files
|
|
echo "Removing sensitive files..."
|
|
rm -f $AI_ROOT/.env
|
|
rm -f /root/.ssh/known_hosts
|
|
rm -f /root/.bash_history
|
|
rm -f /root/.python_history
|
|
|
|
# Clear system logs
|
|
echo "Clearing system logs..."
|
|
sudo find /var/log -type f -name "*.log" -delete 2>/dev/null || true
|
|
|
|
# Create template version marker
|
|
cat > /workspace/TEMPLATE_VERSION << 'EOF'
|
|
RunPod Multi-Modal AI Template (Process-Based Architecture)
|
|
Version: 2.0
|
|
|
|
Components:
|
|
- Python 3.10
|
|
- Orchestrator (process-based)
|
|
- ComfyUI with 20 production workflows
|
|
- Supervisor process manager
|
|
- Tailscale VPN
|
|
|
|
Architecture: No Docker, direct Python execution
|
|
|
|
Deployment:
|
|
1. Create .env file with HF_TOKEN
|
|
2. Run model downloads (Ansible)
|
|
3. Start services: arty run services/start
|
|
|
|
EOF
|
|
|
|
echo ""
|
|
echo "✓ Cleanup complete"
|
|
echo ""
|
|
echo "Next steps in RunPod dashboard:"
|
|
echo " 1. Stop all services"
|
|
echo " 2. My Pods → Select pod → ⋮ → Save as Template"
|
|
echo " 3. Name: multi-modal-ai-v2.0"
|
|
echo " 4. Save and test deployment"
|
|
|
|
install/full: |
|
|
echo "========================================="
|
|
echo " Full Installation"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "Installing: All components + Tailscale"
|
|
echo ""
|
|
|
|
arty run setup/system-packages && \
|
|
arty run setup/python-env && \
|
|
arty run setup/comfyui-base && \
|
|
arty run setup/comfyui-nodes && \
|
|
arty run setup/tailscale && \
|
|
arty run setup/supervisor
|
|
|
|
echo ""
|
|
echo "✓ Full installation complete"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Download models: ansible-playbook playbook.yml --tags comfyui-models-all"
|
|
echo " 2. Link models: arty run models/link-comfyui"
|
|
echo " 3. Link workflows: arty run workflows/link-comfyui"
|
|
echo " 4. Configure Tailscale (see instructions above)"
|
|
echo " 5. Start services: arty run services/start"
|
|
|
|
# Workflow linking (link production workflows with category prefixes)
|
|
workflows/link-comfyui: |
|
|
# Create ComfyUI user workflows directory
|
|
mkdir -p $COMFYUI_ROOT/user/default/workflows
|
|
cd $COMFYUI_ROOT/user/default/workflows
|
|
|
|
# Remove old symlinks from previous location
|
|
rm -f $COMFYUI_ROOT/workflows/*.json 2>/dev/null || true
|
|
|
|
# Clear existing workflow symlinks to avoid conflicts
|
|
find . -type l -name "*.json" -delete
|
|
|
|
# Absolute path to workflows from /workspace/ai
|
|
SOURCE_DIR="$AI_ROOT/comfyui/workflows"
|
|
|
|
# Text-to-Image workflows (prefix: t2i_)
|
|
for file in "$SOURCE_DIR/text-to-image"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "t2i_${basename}"
|
|
fi
|
|
done
|
|
|
|
# Image-to-Image workflows (prefix: i2i_)
|
|
for file in "$SOURCE_DIR/image-to-image"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "i2i_${basename}"
|
|
fi
|
|
done
|
|
|
|
# Image-to-Video workflows (prefix: i2v_)
|
|
for file in "$SOURCE_DIR/image-to-video"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "i2v_${basename}"
|
|
fi
|
|
done
|
|
|
|
# Text-to-Music workflows (prefix: t2m_)
|
|
for file in "$SOURCE_DIR/text-to-music"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "t2m_${basename}"
|
|
fi
|
|
done
|
|
|
|
# Upscaling workflows (prefix: upscale_)
|
|
for file in "$SOURCE_DIR/upscaling"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "upscale_${basename}"
|
|
fi
|
|
done
|
|
|
|
# Advanced workflows (prefix: adv_)
|
|
for file in "$SOURCE_DIR/advanced"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "adv_${basename}"
|
|
fi
|
|
done
|
|
|
|
# NSFW workflows (prefix: nsfw_)
|
|
for file in "$SOURCE_DIR/nsfw"/*.json; do
|
|
if [ -f "$file" ]; then
|
|
basename=$(basename "$file")
|
|
ln -sf "$file" "nsfw_${basename}"
|
|
fi
|
|
done
|
|
|
|
# Count workflows
|
|
WORKFLOW_COUNT=$(ls -1 *.json 2>/dev/null | wc -l)
|
|
|
|
echo "Production workflows linked to ComfyUI user directory"
|
|
echo " Total workflows: $WORKFLOW_COUNT"
|
|
echo " Location: $COMFYUI_ROOT/user/default/workflows/"
|
|
echo ""
|
|
echo "Categories (by prefix):"
|
|
echo " - t2i_ : 5 text-to-image workflows (FLUX, SDXL, SD3.5, LoRA Fusion)"
|
|
echo " - i2i_ : 3 image-to-image workflows (IP-Adapter)"
|
|
echo " - i2v_ : 3 image-to-video workflows (CogVideoX, SVD)"
|
|
echo " - t2m_ : 4 text-to-music workflows (MusicGen)"
|
|
echo " - upscale_: 3 upscaling workflows (Ultimate SD, Simple, Face)"
|
|
echo " - adv_ : 3 advanced workflows (ControlNet, AnimateDiff, Batch)"
|
|
echo " - nsfw_ : 4 NSFW workflows (LUSTIFY, Pony, RealVisXL, Ultimate Upscale)"
|
|
echo ""
|
|
echo "Total: 25 production workflows"
|
|
echo "Workflows will appear in ComfyUI's workflow browser, sorted by category prefix"
|
|
|
|
#
|
|
# Service Management (Supervisor-based)
|
|
#
|
|
# All services
|
|
services/start: supervisorctl -c /workspace/supervisord.conf start ai-services:*
|
|
services/stop: supervisorctl -c /workspace/supervisord.conf stop ai-services:*
|
|
services/restart: supervisorctl -c /workspace/supervisord.conf restart ai-services:*
|
|
services/status: supervisorctl -c /workspace/supervisord.conf status
|
|
|
|
# ComfyUI service
|
|
services/comfyui/start: supervisorctl -c /workspace/supervisord.conf start ai-services:comfyui
|
|
services/comfyui/stop: supervisorctl -c /workspace/supervisord.conf stop ai-services:comfyui
|
|
services/comfyui/restart: supervisorctl -c /workspace/supervisord.conf restart ai-services:comfyui
|
|
services/comfyui/status: supervisorctl -c /workspace/supervisord.conf status ai-services:comfyui
|
|
services/comfyui/logs: supervisorctl -c /workspace/supervisord.conf tail -f ai-services:comfyui
|
|
|
|
# Orchestrator service
|
|
services/orchestrator/start: supervisorctl -c /workspace/supervisord.conf start ai-services:orchestrator
|
|
services/orchestrator/stop: supervisorctl -c /workspace/supervisord.conf stop ai-services:orchestrator
|
|
services/orchestrator/restart: supervisorctl -c /workspace/supervisord.conf restart ai-services:orchestrator
|
|
services/orchestrator/status: supervisorctl -c /workspace/supervisord.conf status ai-services:orchestrator
|
|
services/orchestrator/logs: supervisorctl -c /workspace/supervisord.conf tail -f ai-services:orchestrator
|
|
|
|
# WebDAV Sync service
|
|
services/webdav-sync/start: supervisorctl -c /workspace/supervisord.conf start ai-services:webdav-sync
|
|
services/webdav-sync/stop: supervisorctl -c /workspace/supervisord.conf stop ai-services:webdav-sync
|
|
services/webdav-sync/restart: supervisorctl -c /workspace/supervisord.conf restart ai-services:webdav-sync
|
|
services/webdav-sync/status: supervisorctl -c /workspace/supervisord.conf status ai-services:webdav-sync
|
|
services/webdav-sync/logs: supervisorctl -c /workspace/supervisord.conf tail -f ai-services:webdav-sync
|
|
|
|
#
|
|
# Health Checks
|
|
#
|
|
health/orchestrator: curl http://localhost:9000/health
|
|
health/comfyui: curl http://localhost:8188
|
|
health/vllm: curl http://localhost:8000/health
|
|
|
|
#
|
|
# System Checks
|
|
#
|
|
check/gpu: nvidia-smi
|
|
check/disk: df -h /workspace
|
|
check/models: du -sh $HF_CACHE
|
|
check/cache: find $HF_CACHE -type d -name 'models--*' -maxdepth 1
|
|
|
|
# Deployment notes
|
|
notes: |
|
|
RunPod AI Model Orchestrator - Quick Start Guide
|
|
|
|
========================================
|
|
FRESH DEPLOYMENT
|
|
========================================
|
|
|
|
1. Clone Git Repositories:
|
|
arty sync --env prod
|
|
|
|
2. Run Installation:
|
|
# Minimal (System + Python + ComfyUI base + Supervisor)
|
|
arty run install/minimal
|
|
|
|
# Essential (+ Custom nodes)
|
|
arty run install/essential
|
|
|
|
# Full (+ Tailscale VPN)
|
|
arty run install/full
|
|
|
|
3. Configure Environment:
|
|
cd $AI_ROOT
|
|
cp .env.example .env
|
|
# Edit .env and set HF_TOKEN
|
|
|
|
4. Download Models (using Ansible for now):
|
|
# Essential models (~80GB)
|
|
ansible-playbook playbook.yml --tags comfyui-essential
|
|
|
|
# All models (~137GB)
|
|
ansible-playbook playbook.yml --tags comfyui-models-all
|
|
|
|
5. Link Models and Workflows:
|
|
arty run models/link-comfyui
|
|
arty run workflows/link-comfyui
|
|
|
|
6. Start Services:
|
|
arty run services/start
|
|
|
|
========================================
|
|
INSTALLATION SCRIPTS
|
|
========================================
|
|
|
|
System Setup:
|
|
- arty run setup/system-packages # Install apt packages, verify GPU
|
|
- arty run setup/python-env # Setup Python, pip, core packages
|
|
- arty run setup/comfyui-base # Install ComfyUI, create directories
|
|
- arty run setup/comfyui-nodes # Install 5 essential custom nodes
|
|
- arty run setup/supervisor # Install Supervisor process manager
|
|
- arty run setup/tailscale # Install Tailscale VPN (optional)
|
|
|
|
Utility Scripts:
|
|
- arty run setup/validate # Validate installation
|
|
- arty run setup/cleanup # Cleanup for template creation
|
|
|
|
Orchestration (run multiple steps):
|
|
- arty run install/minimal # Fast minimal setup
|
|
- arty run install/essential # Recommended for most users
|
|
- arty run install/full # Everything including Tailscale
|
|
|
|
========================================
|
|
SERVICE MANAGEMENT
|
|
========================================
|
|
|
|
All Services:
|
|
- arty services/start # Start all services
|
|
- arty services/stop # Stop all services
|
|
- arty services/restart # Restart all services
|
|
- arty services/status # Check all services status
|
|
|
|
ComfyUI Service:
|
|
- arty services/comfyui/start # Start ComfyUI
|
|
- arty services/comfyui/stop # Stop ComfyUI
|
|
- arty services/comfyui/restart # Restart ComfyUI
|
|
- arty services/comfyui/status # Check ComfyUI status
|
|
- arty services/comfyui/logs # Follow ComfyUI logs
|
|
|
|
Orchestrator Service:
|
|
- arty services/orchestrator/start # Start orchestrator
|
|
- arty services/orchestrator/stop # Stop orchestrator
|
|
- arty services/orchestrator/restart # Restart orchestrator
|
|
- arty services/orchestrator/status # Check orchestrator status
|
|
- arty services/orchestrator/logs # Follow orchestrator logs
|
|
|
|
========================================
|
|
HEALTH & MONITORING
|
|
========================================
|
|
|
|
Health Checks:
|
|
- arty run health/orchestrator # curl http://localhost:9000/health
|
|
- arty run health/comfyui # curl http://localhost:8188
|
|
- arty run health/vllm # curl http://localhost:8000/health
|
|
|
|
System Checks:
|
|
- arty run check/gpu # nvidia-smi
|
|
- arty run check/disk # Disk usage
|
|
- arty run check/models # Model cache size
|
|
- arty run check/cache # List cached models
|
|
|
|
========================================
|
|
COMFYUI WORKFLOWS
|
|
========================================
|
|
|
|
Location: $COMFYUI_ROOT/workflows/
|
|
|
|
Link workflows: arty run workflows/link-comfyui
|
|
|
|
25 Production Workflows:
|
|
- Text-to-Image: FLUX Schnell, FLUX Dev, SDXL+Refiner, SD3.5, LoRA Fusion
|
|
- Image-to-Image: IP-Adapter (style, face, composition)
|
|
- Image-to-Video: CogVideoX, SVD, SVD-XT
|
|
- Text-to-Music: MusicGen (small/medium/large/melody)
|
|
- Upscaling: Ultimate SD, Simple, Face-focused
|
|
- Advanced: ControlNet, AnimateDiff, Batch processing
|
|
- NSFW: LUSTIFY Realistic, Pony Diffusion, RealVisXL Lightning, Ultimate Upscale
|
|
|
|
Documentation: README.md, WORKFLOW_STANDARDS.md, nsfw/README.md
|
|
|
|
========================================
|
|
ENVIRONMENT PROFILES
|
|
========================================
|
|
|
|
- arty sync --env prod # Production (essential repos only)
|
|
- arty sync --env dev # Development (all repos)
|
|
- arty sync --env minimal # Minimal (orchestrator + ComfyUI)
|
|
|
|
========================================
|
|
IMPORTANT PATHS
|
|
========================================
|
|
|
|
Configuration:
|
|
- $AI_ROOT/arty.yml # This file
|
|
- $AI_ROOT/.env # Environment variables
|
|
- /workspace/supervisord.conf # Supervisor config
|
|
|
|
Code:
|
|
- $AI_ROOT/ # Project directory
|
|
- $COMFYUI_ROOT/ # ComfyUI installation
|
|
- $AI_ROOT/scripts/*.sh # Service scripts
|
|
|
|
Models:
|
|
- $HF_CACHE/ # Model cache (~401GB)
|
|
- $COMFYUI_ROOT/models/ # Symlinks to cache
|
|
|
|
Workflows:
|
|
- $AI_ROOT/comfyui/workflows/ # Source (git)
|
|
- $COMFYUI_ROOT/workflows/ # Linked workflows
|
|
|
|
Logs:
|
|
- $LOGS_DIR/ # Supervisor logs
|
|
|
|
========================================
|
|
PORTS
|
|
========================================
|
|
|
|
- 9000: Model Orchestrator
|
|
- 8188: ComfyUI
|
|
- 8000+: vLLM servers
|
|
- 9001: Supervisor web UI (admin/runpod2024)
|
|
|
|
========================================
|
|
DOCUMENTATION
|
|
========================================
|
|
|
|
- $AI_ROOT/README.md
|
|
- $AI_ROOT/CLAUDE.md
|
|
- $AI_ROOT/COMFYUI_MODELS.md
|
|
- $AI_ROOT/MODELS_LINKED.md
|
|
- $AI_ROOT/comfyui/workflows/README.md
|