From 0ce77443244272816924a86f97c326d1daa8665f Mon Sep 17 00:00:00 2001 From: Adam Ladachowski Date: Sun, 15 Feb 2026 17:50:28 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=AC=20Commit=20message:=20Update=20202?= =?UTF-8?q?6-02-15=2017:50:28,=206=20files,=20110=20lines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 📁 Files changed: 6 📝 Lines changed: 110 • deploy.md • Dockerfile • Dockerfile.rocm • README.md • deploy.sh • cli.py --- .claude/commands/deploy.md | 2 +- Dockerfile | 4 +- Dockerfile.rocm | 106 ++++++++++++++++++++++++++++--------- README.md | 8 +-- scripts/deploy.sh | 2 +- tensors/cli.py | 2 +- 6 files changed, 89 insertions(+), 35 deletions(-) diff --git a/.claude/commands/deploy.md b/.claude/commands/deploy.md index abc41b3..00c213d 100644 --- a/.claude/commands/deploy.md +++ b/.claude/commands/deploy.md @@ -23,7 +23,7 @@ Run the deploy script: | Install path | `/opt/tensors/app` | | Venv | `/opt/tensors/venv` | | Service | `tensors.service` | -| Port | 8081 | +| Port | 51200 | ## API Endpoints diff --git a/Dockerfile b/Dockerfile index 3ee5c36..0414557 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,11 +44,11 @@ done echo "ComfyUI ready" # Start tensors API (exposed) -exec tsr serve --host 0.0.0.0 --port 8080 +exec tsr serve --host 0.0.0.0 --port 51200 EOF RUN chmod +x /workspace/start.sh # Only expose tensors API -EXPOSE 8080 +EXPOSE 51200 CMD ["/workspace/start.sh"] diff --git a/Dockerfile.rocm b/Dockerfile.rocm index 767f06d..1087a34 100644 --- a/Dockerfile.rocm +++ b/Dockerfile.rocm @@ -1,28 +1,78 @@ -# Tensors + ComfyUI for AMD ROCm (local testing) -# tensors API exposed, ComfyUI internal only +# Tensors + ComfyUI for AMD ROCm (gfx1030 only - slimmed) +# Multi-stage build, strips unused GPU architectures + +# ============================================================================ +# STAGE 1: Builder - install everything +# ============================================================================ +FROM saiden/sd-rocm AS builder + +WORKDIR /workspace + +# Install build deps +RUN apt-get update && apt-get install -y --no-install-recommends git curl && \ + rm -rf /var/lib/apt/lists/* + +# Install ComfyUI (skip torch - use base image's ROCm torch) +# Filter out torch ecosystem, install deps without pulling CUDA +RUN git clone --depth 1 https://github.com/comfyanonymous/ComfyUI.git && \ + cd ComfyUI && \ + grep -v "^torch" requirements.txt | \ + grep -v "^torchvision" | \ + grep -v "^torchaudio" | \ + grep -v "^torchsde" | \ + grep -v "^nvidia" | \ + grep -v "^triton" > requirements-no-torch.txt && \ + pip install --break-system-packages --no-cache-dir -r requirements-no-torch.txt && \ + pip install --break-system-packages --no-cache-dir --no-deps torchsde && \ + pip install --break-system-packages --no-cache-dir trampoline scipy && \ + # Remove any nvidia packages that snuck in + pip uninstall -y nvidia-cublas-cu12 nvidia-cuda-runtime-cu12 nvidia-cudnn-cu12 \ + nvidia-cufft-cu12 nvidia-curand-cu12 nvidia-cusolver-cu12 nvidia-cusparse-cu12 \ + nvidia-nccl-cu12 nvidia-nvjitlink-cu12 nvidia-nvtx-cu12 nvidia-nvshmem-cu12 \ + triton 2>/dev/null || true && \ + rm -rf .git .github tests* notebooks *.md + +# Install ComfyUI Manager +RUN cd /workspace/ComfyUI/custom_nodes && \ + git clone --depth 1 https://github.com/ltdrdata/ComfyUI-Manager.git && \ + cd ComfyUI-Manager && \ + pip install --break-system-packages --no-cache-dir -r requirements.txt && \ + rm -rf .git .github tests *.md + +# Install tensors +COPY . /tmp/tensors +RUN pip install --break-system-packages --no-cache-dir /tmp/tensors'[server]' && \ + rm -rf /tmp/tensors + +# ============================================================================ +# STAGE 2: Runtime - slim ROCm for gfx1030 only +# ============================================================================ FROM saiden/sd-rocm WORKDIR /workspace -# Install git and curl -RUN apt-get update && apt-get install -y --no-install-recommends git curl && \ - rm -rf /var/lib/apt/lists/* +# Strip unused GPU architectures (keep only gfx1030) +# hipblaslt has NO gfx1030 support - remove entirely (saves 11GB) +# rocblas - keep only gfx1030 kernels (saves 3.5GB) +RUN rm -rf /opt/rocm*/lib/hipblaslt/library/* && \ + find /opt/rocm*/lib/rocblas/library/ -type f \ + ! -name '*gfx1030*' \ + ! -name 'TensileLibrary.dat' \ + ! -name 'TensileLibrary_lazy_gfx1030.dat' \ + -delete && \ + rm -rf /opt/rocm*/share/doc /opt/rocm*/share/html -# Install ComfyUI -RUN git clone https://github.com/comfyanonymous/ComfyUI.git && \ - cd ComfyUI && \ - pip install --break-system-packages -r requirements.txt +# Install only runtime deps +RUN apt-get update && apt-get install -y --no-install-recommends curl && \ + rm -rf /var/lib/apt/lists/* && \ + apt-get clean -# Install ComfyUI Manager -RUN cd /workspace/ComfyUI/custom_nodes && \ - git clone https://github.com/ltdrdata/ComfyUI-Manager.git && \ - cd ComfyUI-Manager && \ - pip install --break-system-packages -r requirements.txt +# Copy Python packages from builder +COPY --from=builder /usr/local/lib/python3.12/dist-packages /usr/local/lib/python3.12/dist-packages +COPY --from=builder /usr/local/bin/tsr /usr/local/bin/tsr -# Install tensors with server dependencies -COPY . /tmp/tensors -RUN pip install --break-system-packages /tmp/tensors'[server]' && \ - rm -rf /tmp/tensors +# Copy ComfyUI +COPY --from=builder /workspace/ComfyUI /workspace/ComfyUI # Configure tensors RUN mkdir -p /root/.config/tensors && \ @@ -38,13 +88,15 @@ embeddings = "/workspace/ComfyUI/models/embeddings" url = "http://127.0.0.1:8188" EOF -# Startup script: ComfyUI internal + tensors API exposed +# Startup script RUN cat > /workspace/start.sh << 'EOF' #!/bin/bash -# Start ComfyUI in background (internal only, localhost) -python /workspace/ComfyUI/main.py --listen 127.0.0.1 --port 8188 & +export HSA_OVERRIDE_GFX_VERSION=10.3.0 -# Wait for ComfyUI to be ready +# Start ComfyUI in background (internal only) +python3 /workspace/ComfyUI/main.py --listen 127.0.0.1 --port 8188 & + +# Wait for ComfyUI echo "Waiting for ComfyUI..." until curl -s http://127.0.0.1:8188/system_stats > /dev/null 2>&1; do sleep 1 @@ -52,11 +104,13 @@ done echo "ComfyUI ready" # Start tensors API (exposed) -exec tsr serve --host 0.0.0.0 --port 8080 +exec tsr serve --host 0.0.0.0 --port 51200 EOF RUN chmod +x /workspace/start.sh -# Only expose tensors API -EXPOSE 8080 +ENV HSA_OVERRIDE_GFX_VERSION=10.3.0 -CMD ["/workspace/start.sh"] +EXPOSE 51200 + +ENTRYPOINT [] +CMD ["/bin/bash", "/workspace/start.sh"] diff --git a/README.md b/README.md index e543401..34547bc 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ Manage sd-server process via a REST API. Requires `pip install tensors[server]`. tsr serve --model /path/to/model.safetensors # Custom host and port -tsr serve --model /path/to/model.safetensors --host 0.0.0.0 --port 8080 +tsr serve --model /path/to/model.safetensors --host 0.0.0.0 --port 51200 # Check server status tsr status @@ -196,7 +196,7 @@ Control a remote tsr server instead of local operations. ```bash # Configure a remote server -tsr remote add junkpile http://junkpile:8080 +tsr remote add junkpile http://junkpile:51200 # Set default remote tsr remote default junkpile @@ -233,8 +233,8 @@ Config file: `~/.config/tensors/config.toml` civitai_key = "your-api-key" [remotes] -junkpile = "http://junkpile:8080" -local = "http://localhost:8080" +junkpile = "http://junkpile:51200" +local = "http://localhost:51200" # Optional: set default remote for all commands default_remote = "junkpile" diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 0dc5951..7ce7e35 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -46,4 +46,4 @@ fi echo "" echo "==> Deploy complete!" -echo " API: http://junkpile:8081" +echo " API: http://junkpile:51200" diff --git a/tensors/cli.py b/tensors/cli.py index 09a1f86..5f52f6d 100644 --- a/tensors/cli.py +++ b/tensors/cli.py @@ -401,7 +401,7 @@ def config( @app.command() def serve( host: Annotated[str, typer.Option(help="Listen address.")] = "127.0.0.1", - port: Annotated[int, typer.Option(help="Listen port.")] = 8080, + port: Annotated[int, typer.Option(help="Listen port.")] = 51200, log_level: Annotated[str, typer.Option(help="Log level.")] = "info", ) -> None: """Start the tensors server (gallery and CivitAI management)."""