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という選択肢:
※ 上記はアフィリエイトリンクです。サイト運営のサポートになります。
💡 この問題を根本的に解決するには
ローカル環境のGPUトラブルが頻発する場合、ハードウェアの見直しも検討してみてください:
- VRAM不足なら → RTX 4070 Ti Super(16GB VRAM)
- メモリ不足なら → DDR5 64GBメモリ
- AI開発を体系的に学ぶなら → AI・機械学習の実践書籍