MLOps Academy · レッスン

起動時にモデルを一度だけ読み込む

lifespanイベントを使い、読み込みを一度だけ実行します。

レッスン 3/413 ステップ

「起動時にモデルを一度だけ読み込む」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 最初の/predictエンドポイント
  2. Pydanticでリクエストを検証する
  3. 起動時にモデルを一度だけ読み込む
  4. /healthレディネスチェックを追加する
← MLOps Academyに戻る