145 lines
4.8 KiB
Python
145 lines
4.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Fix startup: use proper subprocess instead of exec, set threads via sitecustomize."""
|
|
import paramiko
|
|
import time
|
|
|
|
ssh = paramiko.SSHClient()
|
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
ssh.connect('192.168.178.150', username='fabian', key_filename=r'C:\Users\fabia\.ssh\id_ed25519')
|
|
|
|
def run(cmd, timeout=120, desc=""):
|
|
if desc:
|
|
print(f"\n{'='*60}")
|
|
print(f" {desc}")
|
|
print(f"{'='*60}")
|
|
print(f"$ {cmd[:300]}")
|
|
_, stdout, stderr = ssh.exec_command(cmd, timeout=timeout)
|
|
out = stdout.read().decode()
|
|
err = stderr.read().decode()
|
|
rc = stdout.channel.recv_exit_status()
|
|
if out.strip():
|
|
lines = out.strip().split('\n')
|
|
if len(lines) > 40:
|
|
print(f" ... ({len(lines)} lines, showing last 40)")
|
|
print('\n'.join(lines[-40:]))
|
|
else:
|
|
print(out.strip())
|
|
if err.strip():
|
|
lines = err.strip().split('\n')
|
|
show = lines[-15:] if len(lines) > 15 else lines
|
|
print(f"STDERR: {chr(10).join(show)}")
|
|
print(f" Exit code: {rc}")
|
|
return rc, out, err
|
|
|
|
# 1. Create a sitecustomize.py in the venv to set threads on import
|
|
sitecustomize = '''# Auto-set PyTorch threading to use all 12 CPU cores on BC-250
|
|
import os
|
|
os.environ.setdefault("OMP_NUM_THREADS", "12")
|
|
os.environ.setdefault("MKL_NUM_THREADS", "12")
|
|
os.environ.setdefault("OPENBLAS_NUM_THREADS", "12")
|
|
|
|
try:
|
|
import torch
|
|
torch.set_num_threads(12)
|
|
torch.set_num_interop_threads(12)
|
|
except Exception:
|
|
pass
|
|
'''
|
|
|
|
# Find the venv site-packages path
|
|
rc, out, _ = run("bash -c 'source ~/comfyui-env/bin/activate && python3 -c \"import site; print(site.getsitepackages()[0])\"'",
|
|
desc="Find venv site-packages")
|
|
site_packages = out.strip()
|
|
print(f" Site-packages: {site_packages}")
|
|
|
|
# Write sitecustomize.py
|
|
sftp = ssh.open_sftp()
|
|
sitecust_path = f"{site_packages}/sitecustomize.py"
|
|
# Check if it exists first
|
|
try:
|
|
sftp.stat(sitecust_path)
|
|
print(f" sitecustomize.py already exists, backing up")
|
|
sftp.rename(sitecust_path, f"{sitecust_path}.bak")
|
|
except FileNotFoundError:
|
|
pass
|
|
with sftp.open(sitecust_path, 'w') as f:
|
|
f.write(sitecustomize)
|
|
sftp.close()
|
|
print(f" Written: {sitecust_path}")
|
|
|
|
# 2. Update startup script — simple, using exec python main.py directly
|
|
startup_script = r'''#!/bin/bash
|
|
# ComfyUI Startup Script for AsRock BC-250 (AMD Cyan Skillfish / ROCm 7.2)
|
|
# All 12 CPU cores + lowvram for 7.6GB shared VRAM
|
|
set -euo pipefail
|
|
|
|
# ═══════════════ BC-250 GPU ═══════════════
|
|
export HSA_OVERRIDE_GFX_VERSION=10.1.0
|
|
export HIP_VISIBLE_DEVICES=0
|
|
export HSA_ENABLE_SDMA=0
|
|
export HSA_TOOLS_LIB=""
|
|
export HSA_TOOLS_REPORT_LOAD_FAILURE=0
|
|
|
|
# ═══════════════ ALL 12 CORES ═══════════════
|
|
export OMP_NUM_THREADS=12
|
|
export MKL_NUM_THREADS=12
|
|
export OPENBLAS_NUM_THREADS=12
|
|
export VECLIB_MAXIMUM_THREADS=12
|
|
export NUMEXPR_NUM_THREADS=12
|
|
|
|
# ═══════════════ Memory tuning ═══════════════
|
|
export PYTORCH_HIP_ALLOC_CONF="expandable_segments:False"
|
|
export TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
|
|
|
|
# ═══════════════ Activate venv ═══════════════
|
|
source "$HOME/comfyui-env/bin/activate"
|
|
cd "$HOME/ComfyUI"
|
|
|
|
echo "=========================================="
|
|
echo " ComfyUI on BC-250 (ROCm 7.2)"
|
|
echo " GPU: AMD Cyan Skillfish (gfx1010)"
|
|
echo " PyTorch: $(python3 -c 'import torch; print(torch.__version__)')"
|
|
echo " Threads: $(python3 -c 'import torch; print(f"intra={torch.get_num_threads()} inter={torch.get_num_interop_threads()}")')"
|
|
echo " CPU: $(nproc) cores"
|
|
echo " VRAM: 7.6GB shared — lowvram mode"
|
|
echo "=========================================="
|
|
|
|
# Default args: listen on all, lowvram for tight VRAM
|
|
ARGS="--listen 0.0.0.0 --port 8188 --lowvram"
|
|
if [ $# -gt 0 ]; then
|
|
ARGS="$@"
|
|
fi
|
|
|
|
echo "Starting: python main.py $ARGS"
|
|
echo "Access: http://192.168.178.150:8188"
|
|
echo ""
|
|
|
|
exec python3 main.py $ARGS
|
|
'''
|
|
|
|
sftp = ssh.open_sftp()
|
|
with sftp.open('/home/fabian/start_comfyui.sh', 'w') as f:
|
|
f.write(startup_script)
|
|
sftp.close()
|
|
|
|
run("chmod +x /home/fabian/start_comfyui.sh", desc="Make executable")
|
|
|
|
# 3. Launch
|
|
run("bash -c 'rm -f /home/fabian/comfyui.log'", desc="Clean log")
|
|
run("bash -c 'nohup bash /home/fabian/start_comfyui.sh > /home/fabian/comfyui.log 2>&1 & echo PID=$!'",
|
|
desc="Launch ComfyUI (12 cores + lowvram)")
|
|
|
|
time.sleep(20)
|
|
run("bash -c 'tail -40 /home/fabian/comfyui.log 2>/dev/null'",
|
|
desc="Startup log")
|
|
|
|
time.sleep(10)
|
|
run("bash -c 'ss -tlnp | grep 8188 || echo PORT_NOT_LISTENING'",
|
|
desc="Check port 8188")
|
|
|
|
run("bash -c 'tail -50 /home/fabian/comfyui.log 2>/dev/null'",
|
|
desc="Full log")
|
|
|
|
ssh.close()
|
|
print("\nDone.")
|