Files
infstellar 7b5849ee96 feat(visual-search): add isolated DINOv2 embedding and scoped matching
Add the fixed DINOv2 ViT-B/14 model adapter, isolated CPU inference service, migration helper, and task-scoped local visual matching client.

引入固定的 DINOv2 ViT-B/14 模型适配器、隔离 CPU 推理服务、迁移工具和任务级本地视觉匹配客户端。
2026-08-15 15:21:39 +08:00

37 lines
1.5 KiB
Docker

# DINOv2 权重不复制进公开镜像,部署时由只读 volume 挂载到 /models。
FROM python:3.12-slim
WORKDIR /app
ARG DINOV2_SOURCE_COMMIT=7764ea0f912e53c92e82eb78a2a1631e92725fc8
# 只复制官方源码,不复制权重;源码提交固定以保证 checkpoint 架构不漂移。
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl tar \
&& mkdir -p /opt/dinov2 \
&& curl --fail --silent --show-error --location --retry 3 \
"https://github.com/facebookresearch/dinov2/archive/${DINOV2_SOURCE_COMMIT}.tar.gz" \
| tar -xzf - --strip-components=1 -C /opt/dinov2 \
&& printf '%s\n' "${DINOV2_SOURCE_COMMIT}" > /opt/dinov2/.mememeow-dinov2-source-commit \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu \
torch==2.8.0+cpu torchvision==0.23.0+cpu
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY backend ./backend
COPY visual_service.py ./visual_service.py
ENV PYTHONUNBUFFERED=1 \
MEMEMEOW_VISUAL_MODEL_REPO=/opt/dinov2 \
MEMEMEOW_VISUAL_WEIGHTS_PATH=/models/dinov2_vitb14_pretrain.pth \
MEMEMEOW_VISUAL_MODEL=dinov2_vitb14 \
MEMEMEOW_VISUAL_DIMENSIONS=768 \
MEMEMEOW_VISUAL_PREPROCESS_VERSION=dinov2_vitb14-rgb224-first-frame-v1 \
MEMEMEOW_VISUAL_CPU_THREADS=4 \
MEMEMEOW_VISUAL_CPU_INTEROP_THREADS=1
EXPOSE 8276
CMD ["uvicorn", "visual_service:app", "--host", "0.0.0.0", "--port", "8276"]