#!/usr/bin/env bash # Launch one keys-2k H3 container on HEAD and WORKER (dual-Spark parallel arms). # Tony dual-serve order: start DS4 first if co-tenanting; then this script for H3. set -euo pipefail IMAGE="${IMAGE:-ghcr.io/drowzeys/keys-2k-minimax-h3-parallel-two-dgx-sparks:0.31.1-pp20260811}" HEAD="${HEAD:-10.100.10.1}" WORKER="${WORKER:-10.100.10.5}" MODELS_DIR="${MODELS_DIR:-$HOME/keys-2k-minimax-h3-parallel/models}" OUT_DIR="${OUT_DIR:-$HOME/Videos/h3-out}" NAME="${CONTAINER_NAME:-keys-2k-h3}" PORT="${H3_PORT:-8188}" launch() { local host="$1" echo "--> H3 on $host" ssh -o BatchMode=yes "keyspark@${host}" "bash -s" </dev/null || true docker pull '$IMAGE' 2>/dev/null || true docker run -d --name '$NAME' --gpus all --restart unless-stopped \ --network host \ -e H3_PORT=$PORT \ -e H3_RESERVE_VRAM=\${H3_RESERVE_VRAM:-48} \ -e H3_VRAM_HEADROOM=\${H3_VRAM_HEADROOM:-10} \ -v '$MODELS_DIR:/opt/powerpack-h3/ComfyUI/models' \ -v '$OUT_DIR:/opt/powerpack-h3/ComfyUI/output' \ '$IMAGE' echo " container \$NAME on $host" REMOTE } launch "$HEAD" launch "$WORKER" echo "waiting for system_stats..." for ip in "$HEAD" "$WORKER"; do ok=0 for _ in $(seq 1 60); do if curl -sf -m 3 "http://${ip}:${PORT}/system_stats" >/dev/null; then ok=1; break; fi sleep 3 done if [[ "$ok" == "1" ]]; then echo " OK http://${ip}:${PORT}"; else echo " DOWN http://${ip}:${PORT}"; fi done echo echo "Parallel 2K bench:" echo " HEAD=$HEAD WORKER=$WORKER bash $(dirname "$0")/run_anime_2k_bench.sh"