From f69e11d0dbb368469480b406e4b0b6715221978b Mon Sep 17 00:00:00 2001 From: ruby0322 Date: Tue, 28 Jul 2026 18:01:14 +0800 Subject: [PATCH 1/2] fix(backend): use CPU-only PyTorch to shrink Docker image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Install torch from the CPU wheel index in Docker and CI so the backend image drops from ~9 GB to ~2–3 GB, reducing ImagePullBackOff failures on K8s dev rollouts. Co-authored-by: Cursor --- .github/workflows/ci.yml | 5 +++-- apps/backend/Dockerfile | 7 +++++-- apps/backend/README.md | 4 ++++ apps/backend/requirements-core.txt | 15 +++++++++++++++ apps/backend/requirements-dev.txt | 3 +-- apps/backend/requirements.txt | 22 ++++------------------ 6 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 apps/backend/requirements-core.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ea3590..c9a2607 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: python-version: "3.11" cache: pip cache-dependency-path: | - apps/backend/requirements.txt + apps/backend/requirements-core.txt apps/backend/requirements-dev.txt - name: Install dependencies @@ -62,13 +62,14 @@ jobs: python-version: "3.11" cache: pip cache-dependency-path: | - apps/backend/requirements.txt + apps/backend/requirements-core.txt apps/backend/requirements-dev.txt - name: Install backend dependencies run: | python -m pip install --upgrade pip python -m pip install torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/cpu + python -m pip install -r apps/backend/requirements-core.txt python -m pip install -r apps/backend/requirements-dev.txt - name: Run backend tests diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile index c7fd65b..cdfc2f5 100644 --- a/apps/backend/Dockerfile +++ b/apps/backend/Dockerfile @@ -14,8 +14,11 @@ RUN useradd --create-home --shell /bin/bash appuser WORKDIR ${APP_HOME} -COPY requirements.txt ./requirements.txt -RUN python -m pip install --upgrade pip && python -m pip install -r requirements.txt +COPY requirements-core.txt ./requirements-core.txt +RUN python -m pip install --upgrade pip && \ + python -m pip install torch==2.9.1 torchvision==0.24.1 \ + --index-url https://download.pytorch.org/whl/cpu && \ + python -m pip install -r requirements-core.txt COPY app ./app COPY migrations ./migrations diff --git a/apps/backend/README.md b/apps/backend/README.md index 4ab3838..a0672cd 100644 --- a/apps/backend/README.md +++ b/apps/backend/README.md @@ -45,6 +45,7 @@ app/ tests/ sql/manual/ optional manual seeds (calendar demo); not executed automatically requirements.txt +requirements-core.txt requirements-dev.txt Dockerfile ``` @@ -55,6 +56,7 @@ Dockerfile python3 -m venv .venv source .venv/bin/activate python3 -m pip install --upgrade pip +python3 -m pip install torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/cpu python3 -m pip install -r requirements-dev.txt cp .env.example .env set -a @@ -119,6 +121,8 @@ Important settings: ## Docker +The production image installs CPU-only PyTorch wheels (not the default CUDA build from PyPI), keeping the image around **2–3 GB** instead of ~9 GB. Inference remains CPU-only (`DEVICE=cpu`). + ### Build ```bash diff --git a/apps/backend/requirements-core.txt b/apps/backend/requirements-core.txt new file mode 100644 index 0000000..0d47cf3 --- /dev/null +++ b/apps/backend/requirements-core.txt @@ -0,0 +1,15 @@ +fastapi +python-multipart +Pillow +requests +sqlalchemy +alembic +psycopg[binary] +boto3 +numpy +joblib +scikit-learn +huggingface_hub +transformers +uvicorn[standard] +prometheus-fastapi-instrumentator diff --git a/apps/backend/requirements-dev.txt b/apps/backend/requirements-dev.txt index b027f8d..0455f9f 100644 --- a/apps/backend/requirements-dev.txt +++ b/apps/backend/requirements-dev.txt @@ -1,5 +1,4 @@ --r requirements.txt +-r requirements-core.txt httpx pytest - diff --git a/apps/backend/requirements.txt b/apps/backend/requirements.txt index 3d5c2b0..81299c3 100644 --- a/apps/backend/requirements.txt +++ b/apps/backend/requirements.txt @@ -1,18 +1,4 @@ -fastapi -python-multipart -Pillow -requests -sqlalchemy -alembic -psycopg[binary] -boto3 -numpy -joblib -scikit-learn -huggingface_hub -transformers -torch==2.9.1 -torchvision==0.24.1 -uvicorn[standard] -prometheus-fastapi-instrumentator - +# PyTorch is installed separately from the CPU wheel index. +# Docker: see Dockerfile +# Local / CI: pip install torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/cpu +-r requirements-core.txt From b25fc2e74f538a0b916520eaf7b398a75861b4fa Mon Sep 17 00:00:00 2001 From: ruby0322 Date: Tue, 28 Jul 2026 18:19:31 +0800 Subject: [PATCH 2/2] docs(backend): align CPU torch install notes in READMEs Document the CPU wheel pre-install in the root README and add a header comment in requirements-core.txt so editors know torch is installed separately. Co-authored-by: Cursor --- README.md | 1 + apps/backend/requirements-core.txt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/README.md b/README.md index e8e5076..faffec4 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,7 @@ cd apps/backend python3 -m venv .venv source .venv/bin/activate python3 -m pip install --upgrade pip +python3 -m pip install torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/cpu python3 -m pip install -r requirements-dev.txt cp .env.example .env set -a diff --git a/apps/backend/requirements-core.txt b/apps/backend/requirements-core.txt index 0d47cf3..7117afa 100644 --- a/apps/backend/requirements-core.txt +++ b/apps/backend/requirements-core.txt @@ -1,3 +1,5 @@ +# Install CPU torch first — see Dockerfile and apps/backend/README.md +# pip install torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/cpu fastapi python-multipart Pillow