シナリオの XNUMX つの側面は、機械学習モデルの作成です。 実世界で使用でき、消費者と開発者が利用できる必要があります。
機械学習モデルを展開する最も簡単で最も一般的な方法は、それらを REST API に含めることです。
FastAPI と呼ばれる一般的なライブラリを使用して、まさにそれを実現します。
でも、それは何ですか FastAPI?
FastAPI Python Web フレームワークは、最新の Python 機能を利用するためにゼロから作成されました。
クライアントとの非同期同時通信については、ASGI 標準に準拠していますが、WSGI も使用できます。
エンドポイントとルートはどちらも非同期関数を使用できます。 さらに、FastAPI を使用すると、型ヒント付きでクリーンな最新の Python コードで Web アプリを生産的に作成できます。
FastAPI の主な使用例は、その名前が示すように、API エンドポイントを作成することです。
インタラクティブな Swagger UI を含む OpenAPI 標準を使用するか、Python 辞書データを JSON として提供することは、どちらもこれを実現するための簡単な方法です。 ただし、FastAPI は API だけのものではありません。
これは、Jinja2 テンプレート エンジンを使用して標準の Web ページを提供し、WebSocket を使用してアプリを提供するために使用できます。また、Web フレームワークが実行できるほとんどすべての機能に加えて、
この記事では、単純な機械学習モデルを開発し、FastAPI を使用してそれをデプロイします。 さぁ、始めよう。
FastAPI のインストールと最初の API の作成
最初にライブラリと ASGI サーバーをインストールする必要があります。 Uvuicorn または Hypercorn のいずれかが機能します。 ターミナルに次のコマンドを入力することで機能します。
API が作成されたので、任意のコード エディターを使用して参照できます。 開始するには、ml_model.py という Python スクリプトを作成します。 別の名前を付けてもかまいませんが、この投稿のために、このファイルを ml_model.py と呼びます。
XNUMX つのエンドポイントを持つ単純な API を作成するには、次のタスクを完了する必要があります。
- FastAPI および Uvicorn ライブラリをインポートします。
- FastAPI クラス インスタンスをセットアップします。
- インデックス ページで、単純な JSON オブジェクトを生成する最初のルートを宣言します。
- 127.0.0.1 番目のルートを宣言します。これは、カスタマイズされたメッセージを含む直接的な JSON オブジェクトを提供します。 name パラメータは URL から直接取得されます (例: https://8000:XNUMX/Jay)。
- Uvicorn を利用して API を実行します。
これらの XNUMX つの段階の実装は、次のコードに示されています。 シンプルな API の作成
すべて完了! すぐに API を起動しましょう。 これを行うには、ml model.py ファイルの横にあるターミナル ウィンドウを開きます。 次に、次のように入力します。
キーを押します。 先に進む前に、この主張を否定しましょう。 最初のアプリは、拡張子なしで Python ファイル名のみを使用します。 XNUMX 番目のアプリは、FastAPI インスタンスと同じ名前にする必要があります。
-reload を使用すると、ファイルを保存するときに、最初からやり直すのではなく、自動的に再読み込みすることを API に指示できます。
次に、ブラウザを起動して https://127.0.0.1:8000 に移動します。 結果は次のように表示されるはずです。
これで、FastAPI を使用して単純な API を作成する方法を理解できました。
機械学習モデルの構築とトレーニング
データを収集または分析することなく、単純なモデルをトレーニングするだけです。 これらはモデルの展開とは無関係であり、当面のトピックに不可欠ではありません。
Iris データセットに基づくモデルは、同じものを使用してインストールできます。 ニューラルネットワーク インストール方法。
まさにそれを行います。 アイリスデータセット そしてモデルをトレーニングします。 それは簡単なことではありません。 まず、jaysmlmodel.py という名前のファイルを作成します。
その中で、次のことを行います。
- インポート — pandas、scikit-RandomForecastClassifier、learn の pydantic の BaseModel (次の手順で理由を説明します)、およびモデルの保存と読み込み用の joblib が必要です。
- 基本モデルから継承する IrisSpecies クラスを宣言します。 このクラスには、XNUMX つの花の種を予測するために必要なフィールドのみが含まれます (詳細は次のセクションで説明します)。
- クラスを作成します。 IrisModel は、モデルのトレーニングおよび予測ツールです。
- IrisModel 内で _train model という名前のメソッドを宣言します。 これは、ランダム フォレスト手法を使用してモデルをトレーニングするために使用されます。 トレーニング済みのモデルは、プロシージャによって返されます。
- IrisModel 内で予測種関数を宣言します。 4つの入力要素(花の測定値)に基づいて予測するために使用されます。 予測 (花の種) と予測確率の両方がアルゴリズムによって返されます。
- IrisModel のコンストラクターを変更して、Iris データセットを読み込み、モデルがフォルダーにない場合にモデルをトレーニングするようにします。 これにより、新しいモデルを繰り返しトレーニングするという問題が解決されます。 joblib ライブラリは、モデルの読み込みと保存に使用されます。
コード全体は次のとおりです。
かなりの量のコードを作成する必要がありましたが、上記のリストとコメントによって理解しやすくなったと思います。 このモデルが開発されたので、その予測機能を公開しましょう。 REST API.
完全な REST API の構築
ml_model.py ファイルに戻り、すべてのデータを消去します。 ボイラープレートは基本的に以前と同じですが、空のファイルからやり直す必要があります。
今回は、花の種類を判別するために使用されるエンドポイントを XNUMX つだけ定義します。 前のセクションで宣言された IrisModel.predict species() は、予測を実行するためにこのエンドポイントによって呼び出されます。
リクエスト タイプも大きな変更点です。 URL ではなく JSON でパラメータを送信するには、使用時に POST を使用することをお勧めします。 機械学習 API。
上記の文は、あなたが データサイエンティスト、しかし、それは大丈夫です。 モデルを設計してデプロイするために、必ずしも HTTP リクエストと REST API の専門家である必要はありません。
ml model.py のタスクは少なく、簡単です。
- 前に作成した jaymlmodel.py ファイルから、uvicorn、FastAPI、IrisModel、および IrisSpecies をインポートする必要があります。
- FastAPI と IrisModel のインスタンスを作成します。
- https://127.0.0.1:8000/predict で予測を行う関数を宣言します。
- IrisModel.predict species() メソッドは、タイプ IrisSpecies のオブジェクトを受け取り、それを辞書に変換してから返します。 戻り値は、期待されるクラスと予測される確率です。
- API の実行には uvicorn を使用します。
ここでも、ファイル全体のコードとそのコメントを次に示します。
それはあなたがする必要があるすべてです。 次のステップでは、API をテストしましょう。
APIのテスト
ターミナルに次の行を再入力して API を実行します: uvicorn ml_model:app –reload
ドキュメントページは次のように表示されます。
今日はここまでです。 この後の部分で、結論にしましょう。
まとめ
今日は、簡単な API の例と簡単な機械学習の例の両方を使用して、FastAPI とは何か、およびその使用方法を学びました。 また、API ドキュメントを作成および表示する方法と、それをテストする方法についても学習しました。
XNUMX つの作品としてはかなりの量なので、正しく理解するのに数回読む必要があるとしても驚かないでください。
ハッピーコーディング。
コメントを残す