1.1 FlaskとFastAPIによるLLM APIの基本設計 | シンプルなPython API構築ガイド

公開日: 2024-11-03 最終更新日: 2026-08-24 バージョン: 4
1.1 FlaskとFastAPIによるLLM APIの基本設計 | シンプルなPython API構築ガイド

1.1 FlaskまたはFastAPIを使ったAPIの基本設計

このセクションでは、Pythonフレームワークの FlaskFastAPI を使用して、LLM(大規模言語モデル)のAPIを設計・実装する方法を紹介します。基本的なAPIエンドポイントの作成から、リクエスト処理、エラーハンドリングまで、実践的な内容をカバーします。

ひとことで言うと
この節では、Python の FlaskとFastAPI を使い、LLM(大規模言語モデル)を呼び出す最小構成の API を、コード例と比較つきで実装します。
観点FlaskFastAPI
実装のシンプルさ
非同期リクエスト
入力バリデーション手書きPydanticで自動
OpenAPI / Swagger UI拡張が必要標準生成
想定ワークロード小〜中規模中〜大規模/高並列

Flask版


from flask import Flask, request, jsonify
from transformers import pipeline

app = Flask(__name__)
llm = pipeline("text-generation", model="gpt2")

@app.route("/predict", methods=["POST"])
def predict():
    data = request.json
    input_text = data.get("text", "")
    if not input_text:
        return jsonify({"error": "Input text is required"}), 400

    try:
        result = llm(input_text, max_length=50, num_return_sequences=1)
        return jsonify({"output": result[0]["generated_text"]})
    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
    

FastAPI版


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from transformers import pipeline

app = FastAPI()
llm = pipeline("text-generation", model="gpt2")

class InputText(BaseModel):
    text: str

@app.post("/predict")
async def predict(input_data: InputText):
    input_text = input_data.text
    if not input_text:
        raise HTTPException(status_code=400, detail="Input text is required")

    try:
        result = llm(input_text, max_length=50, num_return_sequences=1)
        return {"output": result[0]["generated_text"]}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
    

解説

  • Flask版は、シンプルで学習コストが低く、小規模なアプリケーションに適しています。
  • FastAPI版は、非同期処理に対応しており、高速なAPIを構築できます。また、Pydanticを使用することで、リクエストのバリデーションも行えます。

どちらを選ぶべきか?

  • 小規模なプロジェクトや、非同期処理が不要な場合は Flask が便利です。
  • 高速なAPIが求められる場合や、非同期処理が必要な場合は FastAPI が適しています。
もっと詳しく
実運用ではリクエスト検証やエラーハンドリングに加えて、レート制限・認可・タイムアウト設計も重要になります。ここでは最小構成に集中し、後続の章でスケーリングやキャッシュを扱います。

次のセクション「1.2 LLM推論APIのスケーリング」では、推論APIを効率的にスケールさせるための方法について解説します。GunicornやUvicornを活用した負荷分散、キャッシュ戦略の実装を学びましょう。


下田 昌平
下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。

質問と回答

このトピックについて質問はありますか?以下からお気軽にどうぞ(登録不要)。担当チームが内容を確認し、回答します。

まだ質問はありません。最初の質問をどうぞ。

質問する

確認のため、入力されたメールアドレス宛に一度だけ確認メールをお送りします。質問は確認後に公開されます。