ML 환경 재현성
Python ML 환경은 악명 높게 깨지기 쉬움 — CUDA 버전, 드라이버 버전, PyTorch wheel build, cuDNN 버전, 다 맞물림. Docker 가 전체 stack 을 image 하나로 동결. CI 가 매 run 에 재현 시도 대신 그 image 에 대해 build / test.
Cache hit 위해 layer 순서
안정성 순으로 Dockerfile layer 정렬 — 위에 가장 안정, 아래에 가장 변동:
- Base image (예:
nvidia/cuda:12.4-cudnn-runtime-ubuntu22.04). - System 패키지 (apt-get).
- Python deps (requirements.txt / pyproject.toml).
- 소스 코드 (마지막 — 가장 자주 변경).
처음 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 만 변경.