起動時にモデルを一度だけ読み込む
lifespanイベントを使い、読み込みを一度だけ実行します。
「起動時にモデルを一度だけ読み込む」はCoddyKit上の無料MLOps Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMLOps Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MLOps Academyコースには全4レッスンが含まれています。
遅いエンドポイントの罠
/predict 内で joblib.load を呼び出すと、リクエストのたびにモデルが再読み込みされます。大きなモデルでは遅く、リソースの無駄になります。🐢
一度だけ読み込む
解決策は、サービスの起動時にモデルを一度だけ読み込み、メモリに保持して、すべての予測で再利用することです。
Lifespanフック
FastAPIには、サービス提供前のセットアップと終了後の後処理を実行するlifespan関数があります。モデルの読み込みには、ここが適しています。
非同期コンテキストマネージャーを書く
非同期関数をasynccontextmanagerでデコレートします。yieldより前のコードは起動時に、後のコードは終了時に実行されます。
from contextlib import asynccontextmanagerモデルをstateに保存する
起動時にモデルを読み込み、後からすべてのリクエストハンドラーがアクセスできる共有領域app.stateに保存します。
@asynccontextmanager
async def lifespan(app):
app.state.model = joblib.load("model.joblib")
yieldアプリに接続する
アプリを作成するときにlifespan関数を渡します。これでFastAPIは、サーバーの起動時に読み込みコードを一度だけ実行します。
app = FastAPI(lifespan=lifespan)ルートで読み取る
/predict 内で、app.stateから読み込み済みのモデルを取得します。ディスクを読み取らず、メモリから高速に参照できます。
@app.post("/predict")
def predict(req: Request):
model = req.app.state.model終了時に後処理する
yieldの後にあるコードは、アプリの停止時に実行されます。モデルが保持していたファイルを閉じたり、GPUメモリを解放したりするのに最適です。
yield
app.state.model = None最初のリクエストを高速化する
startup時に読み込みが完了しているため、最初のユーザーも、初回読み込みによる遅延ではなく高速なレスポンスを受け取れます。⚡
ワーカー数に注意する
各uvicornworkerは、それぞれ独自のモデルのコピーを持つ別プロセスです。ワーカーを増やすとメモリ使用量も増えるため、意図的に数を決めてください。
なぜ重要なのか
一度だけ読み込むことは、サービス提供における基本的な最適化です。レイテンシーとディスクI/Oを削減し、実際のトラフィック下でもメモリ使用量を予測しやすくします。📈
クイックチェック
サービスの起動時に、モデルを正確に一度だけ読み込みたいとします。どこで行うべきですか。
まとめ
読み込み処理をlifespanフックに移し、モデルをapp.stateに保存して、リクエストごとに読み取るようにしました。一度の読み込み、高速なレスポンス、適切な終了処理を実現できました。🙌
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「起動時にモデルを一度だけ読み込む」レッスンは無料ですか?
はい。「起動時にモデルを一度だけ読み込む」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MLOps Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MLOps Academyコースには全4レッスンが含まれています。
「起動時にモデルを一度だけ読み込む」で何を学びますか?
lifespanイベントを使い、読み込みを一度だけ実行します。 ブラウザで直接実行するハンズオンコードでMLOps Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
MLOps Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMLOps Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「起動時にモデルを一度だけ読み込む」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMLOps Academyレッスンでコードを書いて実行できますか?
はい。すべてのMLOps Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 最初の/predictエンドポイント
- Pydanticでリクエストを検証する
- 起動時にモデルを一度だけ読み込む
- /healthレディネスチェックを追加する