studio / Dockerfile
burtenshaw's picture
burtenshaw HF Staff
Deploy Unsloth Studio Docker Space
d14041c verified
FROM node:22-bookworm-slim AS frontend-builder
WORKDIR /app/studio/frontend
# Install dependencies first for better layer caching.
COPY studio/frontend/package.json studio/frontend/bun.lock ./
RUN npm install -g npm@latest && npm install
COPY studio/frontend/ ./
RUN npm run build
FROM python:3.12-slim AS runtime
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
HF_HOME=/data/.huggingface \
PORT=7860
WORKDIR /app
# Build/runtime dependencies needed by the Unsloth stack.
RUN apt-get update && apt-get install -y --no-install-recommends \
bash \
build-essential \
cmake \
curl \
ffmpeg \
git \
libsndfile1 \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies in the same order as setup.sh.
COPY studio/backend/requirements /app/studio/backend/requirements
RUN set -eux; \
REQ_ROOT=/app/studio/backend/requirements; \
SINGLE_ENV_CONSTRAINTS="$REQ_ROOT/single-env/constraints.txt"; \
pip install --upgrade pip; \
pip install --no-cache-dir -c "$SINGLE_ENV_CONSTRAINTS" -r "$REQ_ROOT/base.txt"; \
pip install --no-cache-dir -c "$SINGLE_ENV_CONSTRAINTS" -r "$REQ_ROOT/extras.txt"; \
pip install --force-reinstall --no-cache-dir -c "$SINGLE_ENV_CONSTRAINTS" -r "$REQ_ROOT/overrides.txt"; \
pip install --no-deps --no-cache-dir -r "$REQ_ROOT/triton-kernels.txt"; \
LLAMA_CPP_DST="$(pip show unsloth-zoo | awk '/^Location:/{print $2}')/unsloth_zoo/llama_cpp.py"; \
curl -fsSL "https://raw.githubusercontent.com/unslothai/unsloth-zoo/refs/heads/main/unsloth_zoo/llama_cpp.py" -o "$LLAMA_CPP_DST"; \
VISION_DST="$(pip show unsloth | awk '/^Location:/{print $2}')/unsloth/models/vision.py"; \
curl -fsSL "https://raw.githubusercontent.com/unslothai/unsloth/80e0108a684c882965a02a8ed851e3473c1145ab/unsloth/models/vision.py" -o "$VISION_DST"; \
pip install --no-cache-dir -c "$SINGLE_ENV_CONSTRAINTS" -r "$REQ_ROOT/studio.txt"; \
pip install --no-cache-dir -c "$SINGLE_ENV_CONSTRAINTS" -r "$REQ_ROOT/single-env/data-designer-deps.txt"; \
pip install --no-cache-dir --no-deps -c "$SINGLE_ENV_CONSTRAINTS" -r "$REQ_ROOT/single-env/data-designer.txt"; \
python "$REQ_ROOT/single-env/patch_metadata.py"; \
pip check
COPY . /app
COPY --from=frontend-builder /app/studio/frontend/dist /app/studio/frontend/dist
RUN chmod +x /app/docker/start.sh
EXPOSE 7860
CMD ["/app/docker/start.sh"]