# CUDA 12.1 + Python 3.11. CPU 환경에서는 torch.cuda.is_available()==False 가 되어 자동 폴백. # Windows + Docker Desktop + WSL2 GPU 패스스루로 RTX 3070 Ti 에서 동작. FROM nvidia/cuda:12.1.1-runtime-ubuntu22.04 AS base ENV DEBIAN_FRONTEND=noninteractive \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ PYTHONPATH=/app \ TZ=Asia/Seoul RUN apt-get update && apt-get install -y --no-install-recommends \ python3.11 python3.11-venv python3-pip \ build-essential git curl ca-certificates tzdata \ libgomp1 \ && ln -sf /usr/bin/python3.11 /usr/local/bin/python \ && ln -sf /usr/bin/python3.11 /usr/local/bin/python3 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY pyproject.toml ./ # Install PyTorch (CUDA 12.1 wheels) first so the rest of deps don't downgrade it. RUN pip install --extra-index-url https://download.pytorch.org/whl/cu121 \ torch==2.3.1 torchvision==0.18.1 # Install runtime deps from pyproject.toml WITHOUT installing the project itself. # - 이전 `pip install -e .` 은 app/ 가 아직 COPY 되기 전이라 packages.find 결과가 비고, # ubuntu 22.04 기본 pip 의 PEP 660 editable hook 과 충돌해 실패했음. # - 런타임에는 PYTHONPATH=/app 으로 `app.*` 임포트가 동작하므로 프로젝트 설치 자체가 불필요. # - deps 만 별도 레이어로 캐시 → 코드 변경 시 ML 휠 재빌드 회피. RUN python -c "import tomllib; \ deps = tomllib.load(open('pyproject.toml','rb'))['project']['dependencies']; \ open('/tmp/reqs.txt','w').write('\n'.join(deps))" \ && pip install -r /tmp/reqs.txt COPY app ./app EXPOSE 8000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]