Dockerfileを最適化してMLの本番環境を軽量化する方法

Dockerfileを最適化してMLの本番環境を軽量化する方法 AIツール・レビュー

はじめに

機械学習の本番環境ではDockerコンテナでアプリをデプロイするのが標準的です。しかしDockerfileを雑に書くとイメージサイズが10GB超えて、デプロイに時間がかかり、コストも増加します。Dockerfileの軽量化テクニックを解説します。

イメージが肥大化する主な原因

PyTorch・TensorFlowなどの巨大ライブラリを不必要にフル版でインストールすることが最大の原因です。CUDA・cuDNNなどGPU関連ライブラリは開発環境では必要でも推論APIには不要なケースがあります。ビルド時の中間ファイルの残留(pip cacheやaptのキャッシュ)もサイズ増加の原因になります。複数のRUNコマンドで各レイヤーにキャッシュが積み重なることも問題です。

軽量化テクニック①:マルチステージビルド

# ビルドステージ
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

# 本番ステージ(軽量ベースイメージ)
FROM python:3.11-slim AS production
WORKDIR /app

# ビルドステージの成果物だけコピー
COPY --from=builder /root/.local /root/.local
COPY . .

ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]

マルチステージビルドで開発用の依存関係をビルドステージに隔離することで、本番イメージに不要なものを含めないようにできます。

軽量化テクニック②:CPU推論専用イメージの使用

# GPU版(約5GB)
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime

# CPU専用版(約800MB)
FROM python:3.11-slim
RUN pip install torch --index-url https://download.pytorch.org/whl/cpu

推論APIはGPUなしでも動く場合が多く、CPU専用のPyTorchを使うだけでイメージサイズを大幅に削減できます。

軽量化テクニック③:依存関係の整理

# 推論だけに必要な最小限のライブラリ
numpy==1.24.3
scikit-learn==1.3.0
fastapi==0.103.0
uvicorn==0.23.2
# 不要なものを除外:
# - matplotlib(可視化→本番では不要)
# - jupyter(開発環境→本番では不要)
# - torch(sklearn使用時は不要)

軽量化テクニック④:レイヤーキャッシュの最適化

# 悪い例(変更のたびにpip installが走る)
COPY . .
RUN pip install -r requirements.txt

# 良い例(requirements.txtが変わらない限りキャッシュ有効)
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .

Before/Afterの効果

最適化前:PyTorch(GPU版)フルイメージ → 約8GBのイメージ、デプロイ時間15分。最適化後:マルチステージ+CPU専用PyTorch → 約1.2GBのイメージ、デプロイ時間3分。イメージサイズを約85%削減、デプロイ時間を80%短縮という効果が得られました。クラウドのコンテナレジストリの保存コストも削減できます。

よくある質問

「本番でGPUが必要な場合はどうすればいいですか」という質問をよく受けます。GPU推論が必要なモデル(大規模深層学習モデル)の場合はGPU版イメージが必要です。ただしマルチステージビルドとpipキャッシュ削除(–no-cache-dir)で最小化を図りましょう。「distrolessイメージは使えますか」という質問については、GoogleのDistrolessイメージはシェルなしの最軽量イメージです。デバッグが難しくなるというトレードオフがありますが、セキュリティ重視の本番環境では有効な選択肢です。

まとめ

MLのDockerイメージ軽量化はマルチステージビルド・CPU専用ライブラリの使用・依存関係の整理・レイヤーキャッシュ最適化という4つのテクニックで実現できます。まず現在のイメージサイズを「docker images」で確認して、CPU推論専用への切り替えから始めることをおすすめします。

💼 ITエンジニア転職特化

自分らしく働けるエンジニア転職を目指すなら【strategy career】

年収1000万・残業月30時間以下・リモート可の求人多数

💼 無料で転職相談する →

※アフィリエイト広告を含みます

コメント

タイトルとURLをコピーしました