mirror of
https://github.com/NVIDIA/dgx-spark-playbooks.git
synced 2026-06-19 12:59:34 +00:00
78 lines
3.5 KiB
Docker
78 lines
3.5 KiB
Docker
FROM nvcr.io/nvidia/pytorch:26.02-py3
|
|
|
|
WORKDIR /opt/ComfyUI
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ffmpeg \
|
|
libgl1 \
|
|
libglib2.0-0 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Clone ComfyUI
|
|
RUN git clone https://github.com/comfyanonymous/ComfyUI.git .
|
|
|
|
# Install ComfyUI dependencies WITHOUT overwriting NGC-optimized PyTorch.
|
|
# Strip torch/torchvision/torchaudio lines from ComfyUI requirements (pip must not replace NGC wheels).
|
|
RUN sed -i '/^torch\b/d; /^torchvision\b/d; /^torchaudio\b/d; /^nvidia/d' requirements.txt && \
|
|
pip install --no-cache-dir -r requirements.txt
|
|
|
|
# Provide an import-only torchaudio stub. NGC PyTorch 26.02 exports custom
|
|
# ABI symbols (e.g. torch_dtype_float4_e2m1fn_x2) that PyPI's torchaudio
|
|
# wheel does not export, so `pip install torchaudio` produces an
|
|
# unloadable libtorchaudio.abi3.so. ComfyUI's comfy/sd.py unconditionally
|
|
# imports comfy.ldm.lightricks.vae.audio_vae which imports torchaudio,
|
|
# so the import has to succeed even though we don't use audio VAE.
|
|
# Lightricks audio VAE is not exercised by any workflow in this playbook.
|
|
RUN SITE=$(python -c "import site; print(site.getsitepackages()[0])") && \
|
|
mkdir -p "$SITE/torchaudio" && \
|
|
printf '%s\n' \
|
|
'# Audio VAE stub for NGC PyTorch images. See assets/Dockerfile for context.' \
|
|
'__version__ = "0.0.0+ngc-stub"' \
|
|
'' \
|
|
'class _Unavailable:' \
|
|
' def __getattr__(self, name):' \
|
|
' raise RuntimeError(' \
|
|
' "torchaudio is stubbed in this NGC image; audio workflows are not supported."' \
|
|
' )' \
|
|
'' \
|
|
'functional = _Unavailable()' \
|
|
'transforms = _Unavailable()' \
|
|
> "$SITE/torchaudio/__init__.py" && \
|
|
python -c "import torchaudio; assert torchaudio.__version__.endswith('ngc-stub')"
|
|
|
|
# Install custom nodes
|
|
RUN cd custom_nodes && \
|
|
git clone https://github.com/Comfy-Org/ComfyUI-Manager.git && \
|
|
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git && \
|
|
git clone https://github.com/kijai/ComfyUI-KJNodes.git && \
|
|
git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git && \
|
|
git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus.git && \
|
|
git clone https://github.com/lum3on/comfyui_HiDream-Sampler.git && \
|
|
git clone https://github.com/Fannovel16/ComfyUI-Frame-Interpolation.git
|
|
|
|
# Install custom node dependencies.
|
|
#
|
|
# Two pre-processing fixes before the install loop:
|
|
# 1. onnxruntime-gpu has no aarch64 wheel on PyPI; on Grace (arm64)
|
|
# the install fails and pip skips the package. controlnet_aux
|
|
# preprocessors then crash at runtime with "No module named
|
|
# onnxruntime". Swap it for the plain `onnxruntime` (CPU) wheel,
|
|
# which IS published for aarch64 — preprocessors then run on CPU.
|
|
# 2. Some custom nodes pin packages that conflict with the NGC torch
|
|
# constraint set; we drop torch/torchvision/torchaudio lines in
|
|
# each custom-node requirements.txt for the same reason as the
|
|
# ComfyUI requirements step above.
|
|
RUN for req in custom_nodes/*/requirements.txt; do \
|
|
[ -f "$req" ] || continue; \
|
|
sed -i 's/^onnxruntime-gpu\b/onnxruntime/' "$req"; \
|
|
sed -i '/^torch\b/d; /^torchvision\b/d; /^torchaudio\b/d' "$req"; \
|
|
done && \
|
|
for req in custom_nodes/*/requirements.txt; do \
|
|
[ -f "$req" ] && pip install --no-cache-dir -r "$req" || true; \
|
|
done
|
|
|
|
EXPOSE 8188
|
|
|
|
CMD ["python", "main.py", "--listen", "0.0.0.0", "--port", "8188"]
|