【FastAPI】ML推論APIのタイムアウトエラー解決法

FastAPIのML推論APIのタイムアウトエラー

FastAPIの使用中にML推論APIのタイムアウトエラーに遭遇する場合があります。本記事ではこの問題の原因と解決方法を詳しく解説します。

エラーの症状

FastAPIで構築したML推論APIで、大きなモデルの推論時に「504 Gateway Timeout」「ReadTimeoutError」またはクライアント側でタイムアウトが発生します。

原因

1. 推論時間がデフォルトタイムアウトを超過
LLMの推論は数十秒かかることがあり、デフォルトの30秒制限を超えます。

2. ストリーミングレスポンスの未実装
全トークンの生成完了を待つ同期的な設計では、長い応答でタイムアウトが発生します。

3. リバースプロキシの設定不足
nginx等のプロキシでタイムアウト設定が短い場合です。

解決方法

手順1: ストリーミングレスポンスの実装

from fastapi import FastAPI
from fastapi.responses import StreamingResponse

app = FastAPI()

async def generate_stream(prompt: str):
    for token in model.generate_tokens(prompt):
        yield f"data: {token}\n\n"

@app.post("/generate")
async def generate(request: dict):
    return StreamingResponse(
        generate_stream(request["prompt"]),
        media_type="text/event-stream"
    )

手順2: uvicornのタイムアウト設定

uvicorn main:app --host 0.0.0.0 --port 8000 --timeout-keep-alive 120

手順3: nginxのタイムアウト設定

location /api/ {
    proxy_pass http://localhost:8000;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
    proxy_connect_timeout 75s;
}

まとめ

本記事で紹介した手順を試すことで、多くの場合問題を解決できます。環境固有の問題が残る場合は、公式ドキュメントやコミュニティフォーラムを参照してください。

☁️ ローカル環境のトラブルを回避するなら

環境構築やGPUの問題に悩まされない、クラウドGPUという選択肢:

  • RunPod — RTX 4090が$0.44/h〜、環境構築済みテンプレートですぐ開始
  • Vast.ai — 最安値GPU マーケットプレイス、コスパ重視ならこちら

※ 上記はアフィリエイトリンクです。サイト運営のサポートになります。

💡 この問題を根本的に解決するには

ローカル環境のGPUトラブルが頻発する場合、ハードウェアの見直しも検討してみてください:

💡 この問題を根本的に解決するには

ローカル環境でGPUトラブルが頻発する場合、クラウドGPUサービスの利用も検討してみてください。環境構築の手間なく、すぐにAI開発を始められます。

  • RunPod — RTX 4090が$0.44/h〜、ワンクリックでJupyter環境が起動
  • Vast.ai — コミュニティGPUマーケットプレイス、最安値でGPUレンタル
この記事は役に立ちましたか?