File size: 1,724 Bytes
9344f01 | 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 | # 멀티아키 backend 이미지 — llama-cpp-python 임베드 단일 프로세스.
# 외부 추론 데몬·서비스 의존 없음.
#
# 빌드:
# docker buildx build --platform linux/amd64,linux/arm64 -t kpaa-backend .
# 또는 docker-compose가 알아서 (build: .)
FROM python:3.11-slim AS base
# Build deps for native wheels (lxml, llama-cpp-python sdist fallback).
# llama-cpp-python은 보통 manylinux wheel을 받지만, arm64에서 빌드가 필요할 수 있어
# build-essential + cmake 포함.
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
ca-certificates \
curl \
&& rm -rf /var/lib/apt/lists/*
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
PYTHONUTF8=1 \
KPAA_HOST=0.0.0.0 \
KPAA_PORT=8000
# GPU offload 는 컨테이너 *런타임* 의 llama-cpp 빌드에 따라 자동 결정.
# CPU 빌드 컨테이너: 자동 0. GPU 빌드 컨테이너: 자동 -1.
# 강제 override 가 필요하면 docker-compose 의 environment 에 KPAA_N_GPU_LAYERS=... 추가.
WORKDIR /app
# 의존성 먼저 설치 (캐시 효율)
COPY pyproject.toml README.md LICENSE NOTICE ./
COPY src/ ./src/
RUN pip install --upgrade pip \
&& pip install '.[llm]'
# 데이터 자산 (상담사례 스냅샷 동봉)
COPY data/ ./data/
# 모델·법제처 캐시는 named volume으로 마운트 (도커가 처리)
VOLUME ["/root/.cache/kpaa"]
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD curl -fsS http://127.0.0.1:8000/healthz || exit 1
CMD ["python", "-m", "kpaa", "serve", "--host", "0.0.0.0", "--port", "8000"]
|