bb929f88d0
marker-service(Surya, ~10GB) 대체 후보. MinerU2.5-Pro-2605-1.2B VLM(vllm-async-engine, ~5.9GB 고정). marker /convert 계약 복제(file_path·start/end·md+base64 images) → 워커는 MARKER_ENDPOINT env 플립만으로 전환. 단일카드(16GB) 검색스택 공존, 40p 윈도우 무변. - services/mineru: Dockerfile(vllm/vllm-openai:v0.21.0 + mineru[core]) + async server.py (NFC/NFD 한글경로 resolver, PyMuPDF page 슬라이스, gpu_memory_utilization 캡) - docker-compose: mineru-service profile-gated(기본 미기동=marker 무영향) + mineru_models vol - marker_worker: MARKER_ENDPOINT 하드코딩 → env(기본 marker, 무변) 격리 PoC A/B 8/8 게이트 PASS (한국어/표/수식LaTeX/heading/figure/40p VRAM). 컷오버(env 플립+marker 제거)는 별 단계(읽기뷰 회귀 0 게이트). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
2.4 KiB
Docker
46 lines
2.4 KiB
Docker
# mineru-service — MinerU 2.5 VLM 기반 PDF→markdown 추출기. marker-service 대체.
|
|
# 단일카드(RTX 4070 Ti S 16GB→PRO 4000 24GB) markdown VRAM ~10GB(marker)→~5GB(MinerU VLM).
|
|
#
|
|
# 공식 opendatalab/MinerU global Dockerfile 기반:
|
|
# FROM vllm/vllm-openai:v0.21.0 (CUDA 13.0). GPU 호스트 드라이버 595.71.05 / CUDA 13.2 가
|
|
# 13.0 런타임 지원 → cu129 폴백 불필요. vLLM 은 base 이미지가 제공하므로 mineru 는 [core] 만.
|
|
#
|
|
# 모델은 이미지에 굽지 않고 런타임 warmup 시 HF cache 볼륨으로 lazy 다운로드 (marker/ocr 선례 =
|
|
# 서버 .cache 볼륨). 이미지 슬림 유지 + server.py 반복 빌드 빠름 + 모델 볼륨 영속.
|
|
FROM vllm/vllm-openai:v0.21.0
|
|
|
|
# base 이미지의 ENTRYPOINT(vLLM OpenAI 서버)를 제거 — 우리는 uvicorn 으로 자체 FastAPI 기동.
|
|
ENTRYPOINT []
|
|
|
|
# opencv(libgl) + CJK 폰트(레이아웃/렌더 안전) + curl(healthcheck). 공식 Dockerfile 동일.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
fonts-noto-core fonts-noto-cjk fontconfig libgl1 curl \
|
|
&& fc-cache -fv \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
# mineru[core] — 공식 설치 라인. vLLM(vlm-engine 백엔드)은 base 가 이미 제공.
|
|
RUN python3 -m pip install -U 'mineru[core]>=3.2.1' --break-system-packages \
|
|
&& python3 -m pip cache purge
|
|
|
|
# 서비스 wrapper 의존성. base(vllm-openai)+mineru 가 fastapi/uvicorn/pillow 를 이미 제공 →
|
|
# pymupdf 만 추가(나머지 명시 핀은 base 의 pillow 12.x 를 불필요하게 다운그레이드해서 제거).
|
|
RUN python3 -m pip install --no-cache-dir --break-system-packages \
|
|
'pymupdf>=1.24.0,<2.0.0'
|
|
|
|
# MINERU_MODEL_SOURCE=huggingface = warmup 시 lazy 다운로드 (HF cache 볼륨에 영속).
|
|
# PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True = 단편화 완화(연구 권고, 거대 입력 OOM 완충).
|
|
ENV MINERU_MODEL_SOURCE=huggingface \
|
|
HF_HOME=/root/.cache/huggingface \
|
|
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
|
|
|
|
WORKDIR /app
|
|
# server.py = 무거운 pip 레이어 뒤에 COPY → 반복 빌드 시 캐시 적중(빠른 재빌드).
|
|
COPY server.py /app/server.py
|
|
|
|
EXPOSE 3301
|
|
# VLM 모델 lazy 다운로드(~2.4GB)+엔진 로드 여유로 start-period 길게.
|
|
HEALTHCHECK --start-period=900s --interval=30s --timeout=10s --retries=3 \
|
|
CMD curl -f http://localhost:3301/ready || exit 1
|
|
|
|
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "3301"]
|