C.W.K.
Stream
Lesson 08 of 12 · published

ML 용 Docker

~11 min · docker, ml, cuda

Level 0Apprentice
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

ML 환경 재현성

Python ML 환경은 악명 높게 깨지기 쉬움 — CUDA 버전, 드라이버 버전, PyTorch wheel build, cuDNN 버전, 다 맞물림. Docker 가 전체 stack 을 image 하나로 동결. CI 가 매 run 에 재현 시도 대신 그 image 에 대해 build / test.

Cache hit 위해 layer 순서

안정성 순으로 Dockerfile layer 정렬 — 위에 가장 안정, 아래에 가장 변동:

  1. Base image (예: nvidia/cuda:12.4-cudnn-runtime-ubuntu22.04).
  2. System 패키지 (apt-get).
  3. Python deps (requirements.txt / pyproject.toml).
  4. 소스 코드 (마지막 — 가장 자주 변경).

처음 3 layer 는 몇 주 cache; 마지막은 매 commit rebuild. CI build 시간이 일반 PR 에서 10 분에서 30 초로 떨어짐.

슬림 runtime 위한 multi-stage

Build stage 가 빌드 도구 설치 + deps 컴파일; runtime stage 가 컴파일된 deps + 소스만 복사. 최종 image 가 종종 5-10× 축소.

CI 주기

  • 'ML deps' base image 일일 rebuild — cache 신선 유지.
  • PR 별 build 가 일일 image 재사용; 소스 layer 만 변경.

Code

ML 서비스용 multi-stage Dockerfile·dockerfile
# syntax=docker/dockerfile:1
FROM nvidia/cuda:12.4-cudnn-runtime-ubuntu22.04 AS base
RUN apt-get update && apt-get install -y --no-install-recommends \
      python3.12 python3-pip git \
    && rm -rf /var/lib/apt/lists/*
ENV PIP_NO_CACHE_DIR=1

FROM base AS builder
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen --no-install-project

FROM base AS runtime
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
ENV PATH=/app/.venv/bin:$PATH
COPY src/ ./src/
CMD ["python", "-m", "src.app"]

External links

Exercise

ML 서비스 Dockerfile 있으면 layer 순서 audit. 안정한 거 위에, 변동 거 아래. Build 시간 전후 비교 — 차이가 cache discipline ROI.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.