※当サイトはPRを含みます

機械学習モデルのデプロイ方法:Jupyter Notebookからクラウド環境までのステップ

2025年2月20日

モデルをデプロイする理由

データサイエンティストは、Jupyter Notebook のような環境でモデルを構築しテストすることが多いですが、これらのモデルを本番環境に移行するには、いくつかの追加の手順が必要です。このガイドでは、機械学習モデルを Jupyter Notebook から取り出し、ライブの本番環境に展開するまでの全プロセスを順を追って説明します。

機械学習モデルをデプロイする理由:

  • リアルタイム予測を実現する: 例えば、レコメンデーションエンジン、詐欺検出、チャットボットなど。
  • 意思決定の自動化: AIを既存のビジネスワークフローに統合する。
  • モデルをアクセス可能にする: エンドユーザーやアプリケーションがAPIやユーザーインターフェースを通じてモデルとやり取りできるようにする。

では、Jupyterから本番環境への機械学習モデルのデプロイに関わる主要なステップを見ていきましょう。

1. Jupyter Notebookでモデルを開発・トレーニング

Jupyter Notebooksは、インタラクティブなコード実行、簡単な可視化、およびMarkdown形式のドキュメント作成が可能なため、実験や開発においてよく使用される環境です。

今回は例としてロジスティック回帰分析をしてみます。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Load sample dataset
df = pd.read_csv('data.csv')

# Split into features and target
X = df.drop('target', axis=1)
y = df['target']

# Train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train a Logistic Regression model
model = LogisticRegression()
model.fit(X_train, y_train)

# Evaluate the model
y_pred = model.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")

2. トレーニング済みモデルを保存

モデルをデプロイする前に、実際の運用環境に読み込めるように保存する必要があります。最も一般的な方法は、PickleやJoblibといったライブラリを使用してモデルをシリアライズすることです。

例:モデルを保存する

import joblib

# Save the model to a file
joblib.dump(model, 'logistic_regression_model.pkl')

これにより、モデルは後で予測を行うために読み込むことができるファイル(logistic_regression_model.pkl)に保存されます。

3. デプロイ戦略の選定

機械学習モデルを本番環境にデプロイする方法は、ユースケースやインフラに応じてさまざまです。以下は一般的な戦略です:

  • A. REST APIベースのデプロイ
    モデルをREST APIとしてデプロイすると、他のアプリケーションやシステムがHTTPリクエストをモデルに送信し、予測を返してもらうことができます。これは、Webアプリケーション、モバイルアプリ、その他のオンラインシステムに役立ちます。
  • B. バッチ処理
    バッチ処理では、モデルは定期的に大規模なデータセット(例えば、毎日または毎週)で実行され、予測結果が出力され、後で使用するために保存されます。リアルタイムで意思決定を行う必要がない金融や医療などの業界でよく使用されます。
  • C. ストリーミングデータ
    継続的に到着するデータに対してリアルタイム予測を行うために、Apache KafkaやFlinkなどのツールを使って、モデルをストリーミングデータパイプラインの一部としてデプロイできます。

4. モデルをREST APIとしてデプロイ

最も一般的なアプローチは、FlaskやFastAPIのような軽量なWebフレームワークを使用してモデルをREST APIとして提供することです。

例:Flaskを使ったデプロイ

Flaskアプリケーションの作成:

最初に、Pythonファイル(app.py)を作成してAPIを定義し、トレーニングされたモデルを読み込みます。

from flask import Flask, request, jsonify
import joblib

# Load the trained model
model = joblib.load('logistic_regression_model.pkl')

app = Flask(__name__)

# Define the prediction endpoint
@app.route('/predict', methods=['POST'])
def predict():
    data = request.get_json()  # Get the data sent in the request
    prediction = model.predict([data['features']])
    return jsonify({'prediction': int(prediction[0])})

if __name__ == '__main__':
    app.run(debug=True)

Flaskアプリケーションの実行:

ローカルでFlaskアプリを実行するには、以下のコマンドを使用します:

python app.py

これで、http://localhost:5000/predict のエンドポイントにリクエストを送信し、予測結果を取得できるようになります。

予測のためのPOSTリクエストを送る

予測を行うには、JSON形式で特徴量を含むPOSTリクエストを送信できます:

curl -X POST http://localhost:5000/predict -H "Content-Type: application/json" -d '{"features": [5.1, 3.5, 1.4, 0.2]}'

モデルは予測結果を返します。

5. Dockerでアプリケーションをコンテナ化

コンテナは機械学習モデルをデプロイする際に人気のある方法で、異なる環境(ローカル、ステージング、本番)間で一貫性を提供します。

モデルをDocker化する手順:

  • Dockerをインストール:まず、マシンにDockerをインストールします。
  • Dockerfileを作成:モデルが実行される環境を定義するDockerfileを作成します。以下はシンプルなDockerfileの例です:
# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set the working directory
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install the required packages
RUN pip install -r requirements.txt

# Make the port 5000 available to the world outside this container
EXPOSE 5000

# Run app.py when the container launches
CMD ["python", "app.py"]

Dockerイメージをビルド:

docker build -t ml-model-api .

Dockerコンテナを実行:

docker run -p 5000:5000 ml-model-api

これで、モデルはDockerコンテナ内で実行され、Dockerをサポートする任意の環境からアクセスできるようになります。

6. クラウドプラットフォームにデプロイ

モデルがコンテナ化されたら、次のステップはクラウドにデプロイすることです。機械学習モデルをデプロイするためのクラウドプラットフォームには、以下のようなものがあります:

  • AWS: AWS Elastic Beanstalk、AWS Lambda、またはSageMakerを使用
  • Google Cloud: Google Cloud RunまたはAI Platformでデプロイ
  • Microsoft Azure: Azure MLまたはApp Serviceを使用

例えば、AWS Elastic Beanstalkにコンテナ化されたモデルをデプロイするには:

  • EB CLIをインストール
pip install awsebcli
  • EB環境を初期化
eb init
  • アプリケーションをデプロイ
eb create ml-api-env
  • アプリケーションにアクセス:デプロイが完了すると、AWSがモデルAPIがホストされるURLを提供します。

7. モデルの監視と更新

デプロイはゴールではありません。デプロイ後は、モデルのパフォーマンスを監視し、スケーリングの問題に対処し、新しいデータが利用可能になるたびにモデルを定期的に更新する必要があります。

  • 監視:モニタリングツールを使用して、モデルのパフォーマンスを本番環境で追跡します。レイテンシ、エラーレート、精度の変化などのメトリクスを監視できます。
  • スケーリング:アプリケーションが大量のリクエストを処理する必要がある場合、KubernetesやAWS Auto Scalingなどの自動スケーリングツールを使用して負荷を管理できます。
  • バージョン管理:モデルのバージョン管理を行います。MLflowやDVC(Data Version Control)などのツールを使用して、モデルの異なるバージョンを追跡し、必要に応じて以前のバージョンに戻すことができます。

おすすめ参考書