Spaces:
Paused
Paused
File size: 5,535 Bytes
f70477a 159b8b1 f70477a 159b8b1 f70477a 159b8b1 f70477a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# thecollabagepatch/magenta:latest
FROM nvidia/cuda:12.6.2-cudnn-runtime-ubuntu22.04
# CUDA libs present + on loader path
RUN apt-get update && apt-get install -y --no-install-recommends \
cuda-libraries-12-4 && rm -rf /var/lib/apt/lists/*
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-12.4/lib64:/usr/local/cuda-12.4/compat:/usr/local/cuda/targets/x86_64-linux/lib:${LD_LIBRARY_PATH}
RUN ln -sf /usr/local/cuda/targets/x86_64-linux/lib /usr/local/cuda/lib64 || true
# Ensure the NVIDIA repo key is present (non-interactive) and install cuDNN 9.8
RUN set -eux; \
apt-get update && apt-get install -y --no-install-recommends gnupg ca-certificates curl; \
install -d -m 0755 /usr/share/keyrings; \
# Refresh the *same* keyring the base source uses (no second source file)
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub \
| gpg --batch --yes --dearmor -o /usr/share/keyrings/cuda-archive-keyring.gpg; \
apt-get update; \
# If libcudnn is "held", unhold it so we can move to 9.8
apt-mark unhold libcudnn9-cuda-12 || true; \
# Install cuDNN 9.8 for CUDA 12 (correct dev package name!)
apt-get install -y --no-install-recommends \
'libcudnn9-cuda-12=9.8.*' \
'libcudnn9-dev-cuda-12=9.8.*' \
--allow-downgrades --allow-change-held-packages; \
apt-mark hold libcudnn9-cuda-12 || true; \
ldconfig; \
rm -rf /var/lib/apt/lists/*
# (optional) preload workaround if still needed
ENV LD_PRELOAD=/usr/local/cuda/lib64/libcusparse.so.12:/usr/local/cuda/lib64/libcublas.so.12:/usr/local/cuda/lib64/libcublasLt.so.12:/usr/local/cuda/lib64/libcufft.so.11:/usr/local/cuda/lib64/libcusolver.so.11
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
TF_FORCE_GPU_ALLOW_GROWTH=true \
XLA_PYTHON_CLIENT_PREALLOCATE=false
ENV JAX_PLATFORMS=""
# --- OS deps ---
RUN apt-get update && apt-get install -y --no-install-recommends \
software-properties-common curl ca-certificates git \
libsndfile1 ffmpeg \
build-essential pkg-config \
&& add-apt-repository ppa:deadsnakes/ppa -y \
&& apt-get update && apt-get install -y --no-install-recommends \
python3.11 python3.11-venv python3.11-distutils python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Make python3 => 3.11 for convenience
RUN ln -sf /usr/bin/python3.11 /usr/bin/python && python -m pip install --upgrade pip
# --- Python deps (pin order matters!) ---
# 1) JAX CUDA pins
RUN python -m pip install "jax[cuda12]==0.6.2" "jaxlib==0.6.2"
# 2) Lock seqio early to avoid backtracking madness
RUN python -m pip install "seqio==0.0.11"
# 3) Install Magenta RT *without* deps so we control pins
RUN python -m pip install --no-deps 'git+https://github.com/magenta/magenta-realtime#egg=magenta_rt[gpu]'
# 4) TF nightlies (MATCH DATES!)
RUN python -m pip install \
"tf_nightly==2.20.0.dev20250619" \
"tensorflow-text-nightly==2.20.0.dev20250316" \
"tf-hub-nightly"
# 5) tf2jax pinned alongside tf_nightly so pip doesn’t drag stable TF
RUN python -m pip install tf2jax "tf_nightly==2.20.0.dev20250619"
# 6) The rest of MRT deps + API runtime deps
RUN python -m pip install \
gin-config librosa resampy soundfile \
google-auth google-auth-oauthlib google-auth-httplib2 \
google-api-core googleapis-common-protos google-resumable-media \
google-cloud-storage requests tqdm typing-extensions numpy==2.1.3 \
fastapi uvicorn[standard] python-multipart pyloudnorm
# 7) Exact commits for T5X/Flaxformer as in pyproject
RUN python -m pip install \
"t5x @ git+https://github.com/google-research/t5x.git@92c5b46" \
"flaxformer @ git+https://github.com/google/flaxformer@399ea3a"
# ---- FINAL: enforce TF nightlies and clean any stable TF ----
RUN python - <<'PY'
import sys, sysconfig, glob, os, shutil
# Find a writable site dir (site-packages OR dist-packages)
cands = [sysconfig.get_paths().get('purelib'), sysconfig.get_paths().get('platlib')]
cands += [p for p in sys.path if p and p.endswith(('site-packages','dist-packages'))]
site = next(p for p in cands if p and os.path.isdir(p))
patterns = [
"tensorflow", "tensorflow-*.dist-info", "tensorflow-*.egg-info",
"tf-nightly-*.dist-info", "tf_nightly-*.dist-info",
"tensorflow_text", "tensorflow_text-*.dist-info",
"tf-hub-nightly-*.dist-info", "tf_hub_nightly-*.dist-info",
"tf_keras-nightly-*.dist-info", "tf_keras_nightly-*.dist-info",
"tensorboard*", "tb-nightly-*.dist-info",
"keras*", # remove stray keras
"tensorflow_hub*", "tensorflow_io*",
]
for pat in patterns:
for path in glob.glob(os.path.join(site, pat)):
if os.path.isdir(path): shutil.rmtree(path, ignore_errors=True)
else:
try: os.remove(path)
except FileNotFoundError: pass
print("TF/Hub/Text cleared in:", site)
PY
# Reinstall pinned nightlies in ONE transaction
RUN python -m pip install --no-cache-dir --force-reinstall \
"tf-nightly==2.20.0.dev20250619" \
"tensorflow-text-nightly==2.20.0.dev20250316" \
"tf-hub-nightly"
RUN python -m pip install huggingface_hub
RUN python -m pip install --no-cache-dir --force-reinstall "protobuf==4.25.3"
# Switch to Spaces’ preferred user
# Switch to Spaces’ preferred user
RUN useradd -m -u 1000 appuser
WORKDIR /home/appuser/app
# Copy from *build context* into image, owned by appuser
COPY --chown=appuser:appuser app.py /home/appuser/app/app.py
USER appuser
EXPOSE 7860
CMD ["bash", "-lc", "python -m uvicorn app:app --host 0.0.0.0 --port ${PORT:-7860}"]
|