DockerによるMLモデルのコンテナ化
マルチステージDockerfile、CUDAベースイメージ、モデルアーティファクトのCOPY、ヘルスエンドポイントについて学習します。
「DockerによるMLモデルのコンテナ化」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
MLモデルをコンテナ化する理由
機械学習モデルは、特定のPythonバージョン、システムライブラリ、固定されたパッケージバージョンに依存します。Dockerはこれらすべてを単一の不変イメージにまとめるため、ノートパソコン、CIランナー、本番クラスターのどこでもモデルを同じように実行できます。
MLで最大の問題は依存関係のドリフトです。numpy 1.24を前提に学習したモデルが、numpy 2.0上では気付かないうちに誤動作する可能性があります。コンテナを使えば、これらのバージョンを固定できます。
単一ステージによる素朴なイメージ
最初の方法では、すべてを1つのステージでインストールします。動作はしますが、ビルドツール(コンパイラー、キャッシュ、開発用ヘッダー)まで最終イメージに含まれるため、サイズが大きくなり、攻撃対象領域も広がります。
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]マルチステージビルド:考え方
マルチステージビルドでは、1つのステージで依存関係のコンパイルとインストールを行い(ビルダー)、完成した成果物だけをクリーンな最終ステージにコピーします。ビルド専用のツールが本番環境に届くことはありません。
- ビルダーステージ:完全なベースイメージで
pip installを実行します - 最終ステージ:スリムなベースイメージに、インストール済みのパッケージをコピーします
ビルダーステージ:pip install
ビルダーでは、パッケージを既知のプレフィックスにインストールするため、簡単にコピーできます。--userを使うと/root/.local以下に配置されるため、後で1つのディレクトリとして取得できます。
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt最終スリムステージ
最終ステージはpython:3.11-slimから開始し、ビルダーからインストール済みのパッケージをコピーします。スリムイメージにはビルドツールチェーンが含まれないため、イメージサイズを数百メガバイト削減できます。
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .モデルの重みをコピーする
大きなモデルの重みは、Dockerがキャッシュできるように、独立したレイヤーとしてコピーする必要があります。コードだけが変更された場合、重みのレイヤーが再利用されるため、再ビルドが高速になります。
COPY model/ /app/model/
COPY src/ /app/src/サービスポートを EXPOSE する
推論サーバー(FastAPI、Triton、TorchServe)は、ポートで待ち受けます。EXPOSE 8000は、コンテナがポート8000でサービスを提供することを示します。これだけではポートは公開されないため、実行時に-p 8000:8000でマッピングする必要があります。
EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]HEALTHCHECK の基礎
オーケストレーターは、モデルサーバーが稼働しているかどうかを把握する必要があります。HEALTHCHECK命令は一定間隔でコマンドを実行し、終了ステータスが0以外の場合はコンテナをunhealthyとしてマークします。これにより、コンテナを再起動したり、ロードバランサーから除外したりできます。
curl を使った HEALTHCHECK
よく使われる方法は、軽量な/healthエンドポイントにリクエストを送ることです。curl -fはHTTPエラーが発生すると失敗(終了ステータスが0以外)します。これはHEALTHCHECKが必要とする動作そのものです。
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1最小限のヘルスエンドポイント
サービングアプリには、完全な推論を実行せずにモデルが読み込まれていることを確認できる、高速なエンドポイントを用意する必要があります。
from fastapi import FastAPI
app = FastAPI()
model = None # loaded at startup
@app.get("/health")
def health():
return {"status": "ok", "model_loaded": model is not None}完成版 Dockerfile
ここまでの内容をまとめると、builderステージで依存関係をインストールし、軽量なfinalステージで依存関係とモデルをコピーして、8000番ポートを公開し、ヘルスチェックを定義します。
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]理解度チェック
マルチステージビルドについての理解度を確認しましょう。
まとめ
本番環境向けのDockerfileを使って、MLモデルをコンテナ化する方法を学びました。
- マルチステージビルド:builderで依存関係をインストールし、軽量なfinalステージにコピーします
- EXPOSE 8000でサービスポートを示します
- HEALTHCHECK CMD curlでオーケストレーターが停止したコンテナを検出できます
- 重みは独立したキャッシュ可能なレイヤーとしてコピーします
次は、コンテナ化したモデルをマネージドクラウドサービスにデプロイします。
よくある質問
「DockerによるMLモデルのコンテナ化」レッスンは無料ですか?
はい。「DockerによるMLモデルのコンテナ化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「DockerによるMLモデルのコンテナ化」で何を学びますか?
マルチステージDockerfile、CUDAベースイメージ、モデルアーティファクトのCOPY、ヘルスエンドポイントについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「DockerによるMLモデルのコンテナ化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DockerによるMLモデルのコンテナ化
- クラウドデプロイメント:AWS SageMaker
- Triton Inference Serverによる高性能サービング
- モデルエンドポイントのスケーリングとオートスケーリング