Python×Docker入門【機械学習の実行環境をコンテナ化する方法】

Python×Docker入門【機械学習の実行環境をコンテナ化する方法】 AIツール・レビュー

はじめに

「自分のPCでは動くのに本番サーバーでは動かない」という問題は機械学習エンジニアがよく直面するトラブルです。Dockerを使うと環境を丸ごとコンテナ化できて、どの環境でも同じように動かせます。MLOpsの観点からもDockerは必須の知識です。

Dockerとは

Dockerはアプリケーションとその実行環境をコンテナという単位でパッケージ化する技術です。コンテナはOS・Python・ライブラリをすべて含んだ「動く箱」なので、環境差異による問題が起きません。

機械学習プロジェクトのDockerfile例

# Dockerfile
FROM python:3.11-slim

# 作業ディレクトリの設定
WORKDIR /app

# 依存関係のインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションのコピー
COPY . .

# デフォルトコマンド
CMD ["python", "train.py"]
# requirements.txt
numpy==1.26.4
pandas==2.2.0
scikit-learn==1.4.0
lightgbm==4.3.0
mlflow==2.11.0
fastapi==0.110.0
uvicorn==0.29.0

Dockerイメージのビルドと実行

# イメージのビルド
docker build -t ml-app:v1 .

# コンテナを起動(学習実行)
docker run --rm ml-app:v1

# データをマウントして実行
docker run --rm \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/models:/app/models \
  ml-app:v1

# コンテナ内でインタラクティブに操作
docker run -it --rm ml-app:v1 /bin/bash

FastAPIでモデルをAPI化する

# app.py
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np

app = FastAPI()
model = joblib.load('model.pkl')

class Features(BaseModel):
    feature1: float
    feature2: float
    feature3: float

@app.post('/predict')
def predict(features: Features):
    X = np.array([[features.feature1, features.feature2, features.feature3]])
    prediction = model.predict(X)[0]
    probability = model.predict_proba(X)[0].max()
    return {'prediction': int(prediction), 'probability': float(probability)}
# APIサーバーをDockerで起動
docker run -d \
  -p 8000:8000 \
  -v $(pwd)/models:/app/models \
  ml-app:v1 \
  uvicorn app:app --host 0.0.0.0 --port 8000

# APIのテスト
curl -X POST 'http://localhost:8000/predict' \
  -H 'Content-Type: application/json' \
  -d '{"feature1": 1.5, "feature2": 2.3, "feature3": 0.8}'

docker-compose.ymlで複数サービスを管理

# docker-compose.yml
version: '3.8'
services:
  ml-api:
    build: .
    ports:
      - '8000:8000'
    volumes:
      - ./models:/app/models
    command: uvicorn app:app --host 0.0.0.0 --port 8000
    
  mlflow:
    image: ghcr.io/mlflow/mlflow:latest
    ports:
      - '5000:5000'
    command: mlflow server --host 0.0.0.0

まとめ

DockerはMLエンジニアにとって必須ツールです。Dockerfile→イメージビルド→コンテナ起動の流れを覚えて、モデルをFastAPIでAPI化してDockerで動かすことができれば、MLOpsの基礎として十分なスキルです。転職ポートフォリオにGitHubで公開すると実力証明になります。

💼 ITエンジニア転職特化

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

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

💼 無料で転職相談する →

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

※本記事にはアフィリエイトリンクが含まれます。

コメント

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