Wire GPU-aware image gen into setup: auto-install, precision, ComfyUI
Previously display-only: IMG_TIER/IMG_MODELS were detected but never used. Now they drive actual behavior: - Both setup scripts call setup-image-models.sh --auto after model pulls, installing the right SD/SDXL/Flux model for the detected GPU - INVOKEAI_PRECISION is now GPU-aware: bfloat16 for Ampere+ (compute 8.0+), float16 for Pascal+, auto fallback for older cards. Was hardcoded to float16. - local-ai-setup.sh now includes ComfyUI service + Open WebUI integration (ENABLE_IMAGE_GENERATION=true, COMFYUI_BASE_URL) — was completely missing, only laptop_full_setup.sh had it - Added ComfyUI port 8188 to UFW firewall rules in local-ai-setup.sh - Added comfyui-data/comfyui-output directories to mkdir loop - Updated start.sh and final output to show ComfyUI URL https://claude.ai/code/session_01PtYTPherSJaxDEVPgF6Nxu
This commit is contained in:
+29
-1
@@ -105,6 +105,19 @@ else
|
||||
IMG_DEFAULT=""
|
||||
fi
|
||||
|
||||
# ── InvokeAI precision (GPU-aware) ───────────────────────────────────────────
|
||||
# Ampere+ (compute 8.0+) supports bfloat16 natively for better precision.
|
||||
# All modern NVIDIA GPUs support float16. Fall back to auto if unsure.
|
||||
GPU_COMPUTE=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader 2>/dev/null \
|
||||
| head -1 | tr -d '.' || echo "0")
|
||||
if [[ "$GPU_COMPUTE" -ge 80 ]]; then
|
||||
INVOKEAI_PRECISION="bfloat16" # Ampere+ (RTX 30xx/40xx/50xx, A-series, H100)
|
||||
elif [[ "$GPU_COMPUTE" -ge 60 ]]; then
|
||||
INVOKEAI_PRECISION="float16" # Pascal+ (GTX 10xx, RTX 20xx, Tesla P40/V100)
|
||||
else
|
||||
INVOKEAI_PRECISION="auto" # Let InvokeAI decide
|
||||
fi
|
||||
|
||||
# ── new vs update ─────────────────────────────────────────────────────────────
|
||||
IS_UPDATE=false
|
||||
[[ -f "$BASE/docker-compose.yml" ]] && IS_UPDATE=true
|
||||
@@ -1179,7 +1192,7 @@ IMGENV
|
||||
environment:
|
||||
- INVOKEAI_HOST=0.0.0.0
|
||||
- INVOKEAI_PORT=9090
|
||||
- INVOKEAI_PRECISION=float16
|
||||
- INVOKEAI_PRECISION=$INVOKEAI_PRECISION
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
@@ -1470,6 +1483,21 @@ elif $INSTALL_AI; then
|
||||
info "Skipping model pull — run later: bash $BASE/pull-models.sh"
|
||||
fi
|
||||
|
||||
# ── Install image generation base model (GPU-aware) ──────────────────────────
|
||||
if $INSTALL_AI && ($SVC_INVOKEAI || $SVC_COMFYUI) && $PULL_MODELS; then
|
||||
section "Image Generation Models"
|
||||
info "GPU: ${TOTAL_VRAM}GB VRAM → $IMG_TIER"
|
||||
if [[ -n "$IMG_DEFAULT" ]]; then
|
||||
info "Auto-installing recommended model: $IMG_DEFAULT"
|
||||
info "Supported on your GPU: $IMG_MODELS"
|
||||
bash "$SCRIPT_DIR/setup-image-models.sh" --auto
|
||||
else
|
||||
warn "Not enough VRAM for image generation models (need at least 4GB)"
|
||||
fi
|
||||
elif $INSTALL_AI && ($SVC_INVOKEAI || $SVC_COMFYUI); then
|
||||
info "Skipping image model install — run later: bash $SCRIPT_DIR/setup-image-models.sh"
|
||||
fi
|
||||
|
||||
# ── Start ZIM downloads (answer was captured upfront) ────────────────────────
|
||||
if $SVC_KIWIX && [[ "$ZIM_CHOICE" != "3" ]]; then
|
||||
section "Starting ZIM Downloads"
|
||||
|
||||
+50
-5
@@ -80,6 +80,17 @@ else
|
||||
IMG_DEFAULT=""
|
||||
fi
|
||||
|
||||
# ── InvokeAI precision (GPU-aware) ───────────────────────────────────────────
|
||||
GPU_COMPUTE=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader 2>/dev/null \
|
||||
| head -1 | tr -d '.' || echo "0")
|
||||
if [[ "$GPU_COMPUTE" -ge 80 ]]; then
|
||||
INVOKEAI_PRECISION="bfloat16" # Ampere+ (RTX 30xx/40xx/50xx, A-series)
|
||||
elif [[ "$GPU_COMPUTE" -ge 60 ]]; then
|
||||
INVOKEAI_PRECISION="float16" # Pascal+ (GTX 10xx, RTX 20xx, Tesla P40/V100)
|
||||
else
|
||||
INVOKEAI_PRECISION="auto" # Let InvokeAI decide
|
||||
fi
|
||||
|
||||
section "Local AI Stack — $($IS_UPDATE && echo UPDATE || echo NEW INSTALL)"
|
||||
info "Base : $BASE"
|
||||
info "IP : $LOCAL_IP"
|
||||
@@ -124,7 +135,7 @@ fi
|
||||
|
||||
# ── directories ───────────────────────────────────────────────────────────────
|
||||
section "Directories"
|
||||
for d in papers repos workspace index invokeai-data invokeai-outputs kiwix gitea portainer-data logs; do
|
||||
for d in papers repos workspace index invokeai-data invokeai-outputs comfyui-data comfyui-output kiwix gitea portainer-data logs; do
|
||||
mkdir -p "$BASE/$d"
|
||||
done
|
||||
ok "Ready under $BASE"
|
||||
@@ -602,6 +613,9 @@ services:
|
||||
- WEBUI_AUTH=true
|
||||
- ENABLE_RAG_WEB_SEARCH=true
|
||||
- RAG_WEB_SEARCH_ENGINE=duckduckgo
|
||||
- ENABLE_IMAGE_GENERATION=true
|
||||
- IMAGE_GENERATION_ENGINE=comfyui
|
||||
- COMFYUI_BASE_URL=http://comfyui:8188
|
||||
depends_on:
|
||||
ollama: {condition: service_healthy}
|
||||
|
||||
@@ -726,7 +740,26 @@ services:
|
||||
environment:
|
||||
- INVOKEAI_HOST=0.0.0.0
|
||||
- INVOKEAI_PORT=9090
|
||||
- INVOKEAI_PRECISION=float16
|
||||
- INVOKEAI_PRECISION=$INVOKEAI_PRECISION
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: all
|
||||
capabilities: [gpu]
|
||||
|
||||
comfyui:
|
||||
image: ghcr.io/ai-dock/comfyui:latest
|
||||
container_name: comfyui
|
||||
restart: unless-stopped
|
||||
ports: ["0.0.0.0:8188:8188"]
|
||||
volumes:
|
||||
- comfyui-models:/opt/ComfyUI/models
|
||||
- $BASE/comfyui-output:/opt/ComfyUI/output
|
||||
- $BASE/comfyui-data:/opt/ComfyUI/custom_nodes
|
||||
environment:
|
||||
- CLI_ARGS=--listen 0.0.0.0
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
@@ -748,6 +781,7 @@ volumes:
|
||||
ollama-models:
|
||||
open-webui-data:
|
||||
invokeai-models:
|
||||
comfyui-models:
|
||||
COMPOSE
|
||||
ok "docker-compose.yml"
|
||||
|
||||
@@ -759,7 +793,7 @@ if command -v ufw &>/dev/null && [[ ! -f "$BASE/.ufw-done" ]] || $FORCE; then
|
||||
[[ "$LAN" =~ /[0-9]+$ ]] || LAN="${LAN}/24"
|
||||
for pc in "3000:Open WebUI" "11434:Ollama" "8001:RAG" "8002:MCP" \
|
||||
"8000:ChromaDB" "8080:Aider" "8181:Kiwix" \
|
||||
"3001:Gitea" "2222:Gitea SSH" "9090:InvokeAI" \
|
||||
"3001:Gitea" "2222:Gitea SSH" "9090:InvokeAI" "8188:ComfyUI" \
|
||||
"9000:Portainer" "9443:Portainer S"; do
|
||||
sudo ufw allow from "$LAN" to any port "${pc%%:*}" proto tcp comment "${pc##*:}" >/dev/null
|
||||
done
|
||||
@@ -777,7 +811,8 @@ docker compose up -d
|
||||
echo ""
|
||||
echo " Open WebUI → http://$LOCAL_IP:3000"
|
||||
echo " Aider UI → http://$LOCAL_IP:8080 (Claude Code-like editor)"
|
||||
echo " InvokeAI → http://$LOCAL_IP:9090"
|
||||
echo " InvokeAI → http://$LOCAL_IP:9090 (inpainting, img2img)"
|
||||
echo " ComfyUI → http://$LOCAL_IP:8188 (chat-integrated image gen)"
|
||||
echo " Kiwix → http://$LOCAL_IP:8181 (run kiwix_download.sh first)"
|
||||
echo " Gitea → http://$LOCAL_IP:3001"
|
||||
echo " RAG → http://$LOCAL_IP:8001/health"
|
||||
@@ -900,6 +935,15 @@ if ! $IS_UPDATE && ! $NO_PULL; then
|
||||
echo ""
|
||||
read -rp "Pull Ollama models now? (~15-30 min) [Y/n]: " DO_PULL
|
||||
[[ "${DO_PULL,,}" != "n" ]] && bash "$BASE/pull-models.sh"
|
||||
|
||||
# Install image generation base model (GPU-aware)
|
||||
if [[ -n "$IMG_DEFAULT" ]] && [[ -x "$SCRIPT_DIR/setup-image-models.sh" ]]; then
|
||||
echo ""
|
||||
section "Image Generation Models"
|
||||
info "GPU: ${TOTAL_VRAM}GB VRAM → $IMG_TIER"
|
||||
info "Auto-installing recommended model: $IMG_DEFAULT"
|
||||
bash "$SCRIPT_DIR/setup-image-models.sh" --auto
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
@@ -911,7 +955,8 @@ echo -e "${GREEN}${BOLD}━━━━━━━━━━━━━━━━━━
|
||||
echo ""
|
||||
echo -e " ${CYAN}Open WebUI${NC} → http://$LOCAL_IP:3000"
|
||||
echo -e " ${CYAN}Aider UI${NC} → http://$LOCAL_IP:8080 (browser coding assistant)"
|
||||
echo -e " ${CYAN}InvokeAI${NC} → http://$LOCAL_IP:9090"
|
||||
echo -e " ${CYAN}InvokeAI${NC} → http://$LOCAL_IP:9090 (inpainting, img2img)"
|
||||
echo -e " ${CYAN}ComfyUI${NC} → http://$LOCAL_IP:8188 (chat-integrated image gen)"
|
||||
echo -e " ${CYAN}Kiwix${NC} → http://$LOCAL_IP:8181"
|
||||
echo -e " ${CYAN}Gitea${NC} → http://$LOCAL_IP:3001"
|
||||
echo -e " ${CYAN}RAG${NC} → http://$LOCAL_IP:8001/health"
|
||||
|
||||
Reference in New Issue
Block a user