반응형
머신러닝, 딥러닝 Docker image는 용량이 다소 큰 경우가 있습니다. 이 경우 리소스를 활용하는 관점에서 비효율성이 발생하므로 적절한 사이즈로 최적화하는 과정이 필요합니다. 대표적인 방법은 아래와 같습니다.
- 작은 Base Image 사용하기
- Multi Stage Build
- Container 패키징
작은 Base Image 사용
Docker Image의 특성상 다양한 환경을 설정하기 때문에 비슷한 기능을 목표로 하더라도 서로 다른 리소스가 설치되어 있어서 어떤 경우에서는 당연히 설치되어야 하는 것들이 없는 경우도 있습니다. 파이썬의 예를 들어 보면 아래와 같은 경우가 있습니다.
- python:3.9 ➡️ 파이썬 표준 이미지
- python:3.9-slim ➡️ 파이썬 슬림 이미지로 Debian 기반. Production 환경에 적합
- python:3.9-alpine ➡️ Alpine Linux 기반 사용. 크기는 작으나 수동 설치가 필요
Multi Stage Build
도커 이미지를 효율적으로 작성하고 최적화하기 위해 컨테이너 이미지를 만들며 빌드에는 필요하지만, 최종 컨테이너에 필요 없는 내용을 제외하면서 이미지를 생성하는 방법입니다. 이름처럼 하나의 파일에 여러 이미지를 빌드하고 사용하는 것입니다.
아래는 Multi Stage Build 구현을 위한 Dockerfile 예시에서 중요한 부분만 발췌한 것입니다. 살펴보면 스테이지 마다 FROM을 나누고 as build와 as runtime으로 나눈 것을 확인할 수 있습니다. 그리고 COPY --from=build를 통해 build에서 필요한 내용만 추출할 수 있습니다.
# Stage 1: Build
FROM python:3.9 as build
...
# Stage 2: Runtime
FROM pyton:3.9-slim as runtime
...
COPY --from=build /root/.local /root/.local
...
Container 패키징
도커 이미지 컨테이너를 패키징하는 과정에서 최적화를 하는 것도 필요합니다. 아래는 용량을 줄이기 위해 체크해야 할 요소들입니다
- .dockerignore를 통해 필요없는 파일들을 제거
- .pt, .pth같은 큰 사이즈 파일은 빌드에 포함하지 않고, 빌드 타임 혹은 컨테이너 시작하는 스크립트에서 다운로드
- Dockerfile에서 command의 순서를 변경 가능성이 낮은 명령어를 위로 높은 명령어를 아래로 놓는 방식으로 최적화
참고자료
[1] 변성윤. "Docker". boostcamp AI Tech.
반응형
'Tools' 카테고리의 다른 글
[VS Code] Copilot 무료 적용하기 | Windows (2) | 2024.12.20 |
---|---|
[Docker] Docker 주요 개념 및 CLI 기본 활용 정리 (0) | 2024.12.17 |
VS Code에서 파이썬 가상환경 활성화 및 비활성화하기 (0) | 2024.12.12 |
CVAT로 Labeling 해서 영수증 OCR 데이터셋 만들기 (2) | 2024.11.08 |
[QGIS] 서울 4대문 CSV 좌표 업로드 및 바운더리 형성 | 포인트를 폴리곤으로 변경하기 (0) | 2022.06.20 |