PythonでAPIを作る方法【FastAPIで機械学習モデルをWebサービス化する】

PythonでAPIを作る方法【FastAPIで機械学習モデルをWebサービス化する】 AIツール・レビュー

はじめに

機械学習モデルを「作る」だけでなく「使ってもらえる形にする」ためにはAPI化が必要です。FastAPIはPython製の高速なWebフレームワークで、機械学習モデルのサービング(API化)に広く使われています。

FastAPIのインストールと基本

pip install fastapi uvicorn joblib scikit-learn
# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
import joblib
import numpy as np

app = FastAPI(
    title='品質予測API',
    description='製造パラメータから製品品質を予測します',
    version='1.0.0'
)

# モデルの読み込み(起動時に一度だけ)
model = joblib.load('quality_model.pkl')
scaler = joblib.load('scaler.pkl')

# リクエストのスキーマ定義
class PredictRequest(BaseModel):
    temperature: float
    pressure: float
    speed: float
    
    class Config:
        json_schema_extra = {
            'example': {
                'temperature': 200.5,
                'pressure': 5.2,
                'speed': 1500
            }
        }

# レスポンスのスキーマ定義
class PredictResponse(BaseModel):
    prediction: int
    probability: float
    label: str

@app.get('/')
def health_check():
    return {'status': 'ok', 'message': '品質予測APIが起動中です'}

@app.post('/predict', response_model=PredictResponse)
def predict(request: PredictRequest):
    try:
        X = np.array([[request.temperature, request.pressure, request.speed]])
        X_scaled = scaler.transform(X)
        prediction = int(model.predict(X_scaled)[0])
        probability = float(model.predict_proba(X_scaled)[0].max())
        label = '良品' if prediction == 1 else '不良品'
        return PredictResponse(
            prediction=prediction,
            probability=probability,
            label=label
        )
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.post('/predict/batch')
def predict_batch(requests: List[PredictRequest]):
    results = []
    for req in requests:
        X = np.array([[req.temperature, req.pressure, req.speed]])
        X_scaled = scaler.transform(X)
        pred = int(model.predict(X_scaled)[0])
        prob = float(model.predict_proba(X_scaled)[0].max())
        results.append({'prediction': pred, 'probability': prob})
    return {'results': results, 'total': len(results)}
# 起動
uvicorn main:app --reload --host 0.0.0.0 --port 8000

# http://localhost:8000/docs でSwagger UIが自動生成される

Pythonからアクセスする

import requests

response = requests.post(
    'http://localhost:8000/predict',
    json={'temperature': 210.0, 'pressure': 5.8, 'speed': 1600}
)
print(response.json())
# {'prediction': 1, 'probability': 0.87, 'label': '良品'}

まとめ

FastAPIは型ヒントを使ったスキーマ定義・自動ドキュメント生成・非同期処理が揃った現代的なWebフレームワークです。機械学習モデルをFastAPIでAPI化→Dockerでコンテナ化→クラウドにデプロイという流れがMLOpsの基本です。ポートフォリオとして動くAPIを作ってGitHubに公開すると、MLエンジニアとしての実力証明になります。

💼 ITエンジニア転職特化

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

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

💼 無料で転職相談する →

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

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

コメント

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