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

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

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

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を活用した負荷分散、キャッシュ戦略の実装を学びましょう。

公開日: 2024-11-03
最終更新日: 2025-03-10
バージョン: 1

下田 昌平

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