データ サイエンティストにとって、機械学習 (ML) モデルを概念実証から本番環境に移行することは、多くの場合、大きな課題となります。 主な課題の XNUMX つは、ローカルでトレーニングされた優れたパフォーマンスのモデルを、推論や他のアプリケーションで使用するためにクラウドにデプロイすることです。 プロセスの管理は面倒な場合がありますが、適切なツールを使用すると、必要な労力を大幅に削減できます。
Amazon SageMaker 推論は、2022 年 XNUMX 月に一般提供されたもので、ML モデルを本番環境にデプロイして大規模な予測を行うことが容易になり、あらゆる種類の ML 推論のニーズを満たすのに役立つ ML インフラストラクチャとモデルのデプロイメント オプションの幅広い選択肢が提供されます。 使用できます SageMaker サーバーレス推論エンドポイント トラフィック スパートの間にアイドル期間があり、コールド スタートを許容できるワークロードの場合。 エンドポイントはトラフィックに基づいて自動的にスケールアウトし、サーバーの選択と管理という未分化の重労働を取り除きます。 さらに、次のこともできます。 AWSラムダ 直接、好みのオープンソース フレームワークを使用してモデルを公開し、ML アプリケーションをデプロイできます。これにより、より柔軟でコスト効率が高いことがわかります。
FastAPI は、Python を使用して API を構築するための最新の高性能 Web フレームワークです。 これは、RESTful マイクロサービスを使用したサーバーレス アプリケーションの開発や、複数の業界にわたる大規模な ML 推論を必要とするユースケースにおいて際立っています。 その使いやすさと、自動 API ドキュメントなどの組み込み機能により、ML エンジニアの間で高パフォーマンスの推論 API をデプロイするための人気の選択肢となっています。 FastAPI のすぐに使用できる機能を使用してルートを定義および整理し、必要に応じてスケールアウトして増大するビジネス ロジックを処理し、ローカルでテストして Lambda でホストし、単一の API ゲートウェイを通じて公開することができます。コードの面倒な作業やリファクタリングを行わずに、オープンソースの Web フレームワークを Lambda に導入できます。
この投稿では、FastAPI、Docker、Lambda、および アマゾンAPIゲートウェイ。 また、 AWSクラウド開発キット (AWS CDK)。
ソリューションの概要
次の図は、この投稿で展開するソリューションのアーキテクチャを示しています。
前提条件
次の前提条件が必要です。
- Python3 がインストールされているとともに、
virtualenv
Python で仮想環境を作成および管理するための - AWS CDK CLI を使用できるようにするために、システムに aws-cdk v2 がインストールされている
- Docker がローカル マシンにインストールされ、実行されている
必要なソフトウェアがすべてインストールされているかどうかをテストします。
- AWSコマンドラインインターフェイス (AWS CLI) が必要です。 アカウントにログインし、ソリューションをデプロイするリージョンを選択します。
- 次のコードを使用して、Python のバージョンを確認します。
- チェックする
virtualenv
Python で仮想環境を作成および管理するためにインストールされます。 厳密に言えば、これは難しい要件ではありませんが、これにより作業が楽になり、この投稿をより簡単に進めることができます。 次のコードを使用します。 - cdkがインストールされているか確認してください。 これはソリューションをデプロイするために使用されます。
- Docker がインストールされているかどうかを確認します。 私たちのソリューションにより、Docker イメージを介して Lambda にモデルにアクセスできるようになります。 このイメージをローカルで構築するには、Docker が必要です。
- 次のコードで Docker が起動し、実行されていることを確認します。
AWS CDK を使用して FastAPI プロジェクトを構築する方法
プロジェクトでは次のディレクトリ構造を使用します (この投稿の文脈では重要ではない一部の定型的な AWS CDK コードは無視します)。
ディレクトリは次のとおりです Python 用の AWS CDK プロジェクトの推奨構造.
このリポジトリの最も重要な部分は、 fastapi_model_serving
ディレクトリ。 これには、AWS CDK スタックを定義するコードと、モデルの提供に使用されるリソースが含まれています。
fastapi_model_serving
ディレクトリには、 model_endpoint
このサブディレクトリには、サーバーレス エンドポイントを構成するために必要なすべてのアセットが含まれています。つまり、Lambda が使用する Docker イメージを構築する Dockerfile、FastAPI を使用して推論リクエストを処理し、正しいエンドポイントにルーティングする Lambda 関数コード、およびモデルです。デプロイするモデルのアーティファクト。 model_endpoint
以下も含まれます。
Docker
– このサブディレクトリには次のものが含まれます。Dockerfile
– これは、すべてのアーティファクト (Lambda 関数コード、モデルアーティファクトなど) を適切な場所に配置して、問題なく使用できるように Lambda 関数のイメージを構築するために使用されます。serving.api.tar.gz
– これは、Docker イメージの構築に必要なランタイム フォルダーのすべてのアセットを含む tarball です。 の作成方法について説明します。.tar.gz
この投稿の後半でファイルを作成します。runtime
– このサブディレクトリには次のものが含まれます。serving_api
– Lambda 関数のコードとその依存関係は、requirements.txt ファイルで指定されます。custom_lambda_utils
– これには、モデルをserving_api
これにより、それがエンドポイントとして公開されます。
さらに、テンプレート ディレクトリもあります。これには、前に説明したサンプルに従ってカスタマイズしたコードと API を定義できるフォルダー構造とファイルのテンプレートが含まれています。 テンプレート ディレクトリには、新しい Lambda 関数の作成に使用できるダミー コードが含まれています。
dummy
– Python ランタイムを使用して通常の Lambda 関数の構造を実装するコードが含まれていますapi
– 既存の API ゲートウェイの周りに FastAPI エンドポイントをラップする Lambda 関数を実装するコードが含まれています
ソリューションを展開する
デフォルトでは、コードは eu-west-1 リージョン内にデプロイされます。 リージョンを変更したい場合は、DEPLOYMENT_REGION コンテキスト変数を変更できます。 cdk.json
ファイルにソフトウェアを指定する必要があります。
ただし、このソリューションは arm64 アーキテクチャ上に Lambda 関数をデプロイしようとするため、この機能はすべてのリージョンで利用できるわけではないことに注意してください。 この場合、アーキテクチャパラメータを変更する必要があります。 fastapi_model_serving_stack.py
ファイル、および Docker ディレクトリ内の Dockerfile の最初の行を使用して、このソリューションを x86 アーキテクチャでホストします。
ソリューションを展開するには、次の手順を実行します。
- 次のコマンドを実行して、GitHub リポジトリのクローンを作成します。
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
このソリューションがローカルでトレーニングしたモデル アーティファクトと連携できることを示したいため、事前トレーニングされたモデル アーティファクトのサンプルが含まれています。 蒸留BERT の質問応答タスク用の Hugging Face モデル ハブ上のモデルserving_api.tar.gz
ファイル。 ダウンロードには 3 ~ 5 分程度かかる場合があります。 では、環境を整えてみましょう。 - デプロイされる事前トレーニング済みモデルを Hugging Face モデル ハブから
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
ディレクトリ。 また、仮想環境も作成され、必要なすべての依存関係がインストールされます。 このコマンドを実行する必要があるのは XNUMX 回だけです。make prep
。 このコマンドはモデル アーティファクトをダウンロードする必要があるため、(インターネット帯域幅に応じて) 5 分ほどかかる場合があります。 - モデル成果物をパッケージ化します。
.tar.gz
AWS CDK スタックに構築される Docker イメージ内で使用されるアーカイブ。 サービス提供エンドポイントの最新バージョンを常にパッケージ化するには、モデル アーティファクトまたは API 自体に変更を加えるたびにこのコードを実行する必要があります。make package_model
。 アーティファクトはすべて所定の位置にあります。 これで、AWS CDK スタックを AWS アカウントにデプロイできるようになりました。 - AWS CDK アプリを環境 (アカウントとリージョンの組み合わせ) に初めてデプロイする場合は、cdk bootstrap を実行します。
このスタックには、ツールキットの操作に必要なリソースが含まれています。 たとえば、スタックには、デプロイメントプロセス中にテンプレートとアセットを保存するために使用される Amazon Simple Storage Service (Amazon S3) バケットが含まれています。
この AWS CDK デプロイでは Docker イメージをローカルに構築しているため、AWS CDK CLI 経由でこのスタックをデプロイする前に、Docker デーモンが実行されていることを確認する必要があります。
- システム上で Docker デーモンが実行されているかどうかを確認するには、次のコマンドを使用します。
エラー メッセージが表示されない場合は、ソリューションを展開する準備ができているはずです。
- 次のコマンドを使用してソリューションをデプロイします。
Docker イメージのビルドとプッシュのため、この手順には 5 ~ 10 分程度かかる場合があります。
トラブルシューティング
Mac ユーザーの場合、ログイン時にエラーが発生する可能性があります。 Amazon エラスティック コンテナ レジストリ (Amazon ECR) Docker ログインを使用したもの (例: Error saving credentials ... not implemented
例えば:
AWS CDK 内の Docker コンテナ上で Lambda を使用するには、その前に、 ~/docker/config.json
ファイル。 具体的には、credsStore パラメータを変更する必要がある場合があります。 ~/.docker/config.json
osxキーチェーンに。 これにより、Mac での Amazon ECR ログインの問題が解決されます。
リアルタイム推論を実行する
あなたの後 AWS CloudFormation スタックが正常にデプロイされた場合は、 出力 AWS CloudFormation コンソールでスタックのタブをクリックし、エンドポイント URL を開きます。 これで、エンドポイント URL 経由でモデルにアクセスできるようになり、リアルタイム推論を実行する準備が整いました。
URL に移動して「hello world」メッセージが表示されるかどうかを確認し、追加します /docs
このアドレスにアクセスして、対話型 Swagger UI ページが正常に表示されるかどうかを確認します。 コールド スタート時間がかかる場合があるため、数回待つか更新する必要がある場合があります。
FastAPI Swagger UI ページのランディング ページにログインした後、ルート経由で実行できます。 /
または経由 /question
.
/
、API を実行して「hello world」メッセージを取得できます。
/question
では、API を実行し、質問応答ケース用にデプロイしたモデルで ML 推論を実行できます。 たとえば、「私の車の色は今何色ですか?」という質問を使用します。 コンテキストは「私の車は以前は青でしたが、赤に塗装しました」です。
選ぶとき 実行する、次のスクリーンショットに示すように、モデルは指定されたコンテキストに基づいて質問に応答で答えます。
応答本文では、モデルからの信頼スコアを含む答えを確認できます。 他の例を試したり、既存のアプリケーションに API を埋め込んだりすることもできます。
あるいは、コードを介して推論を実行することもできます。 以下に、Python で書かれた例を示します。 requests
としょうかん:
このコードは、次のような文字列を出力します。
Generative AI と大規模な言語モデルを AWS にデプロイする方法について詳しく知りたい場合は、ここを確認してください。
- OpenLLaMa を使用してサーバーレス生成 AI を AWS Lambda にデプロイする
- 大規模なモデル推論コンテナを使用して AWS Inferentia2 に大規模な言語モデルをデプロイする
クリーンアップ
リポジトリのルート ディレクトリ内で次のコードを実行してリソースをクリーンアップします。
まとめ
この投稿では、Lambda を使用して、FastAPI などの好みの Web アプリケーション フレームワークを使用してトレーニング済みの ML モデルをデプロイする方法を紹介しました。 デプロイできる詳細なコード リポジトリが提供されているため、処理するトレーニング済みモデル アーティファクトに切り替える柔軟性が維持されます。 パフォーマンスは、モデルの実装方法とデプロイ方法によって異なります。
ぜひご自身で試してみてください。フィードバックをお待ちしております。
著者について
リー・ティンイー は、スウェーデンのストックホルムに拠点を置き、北欧の顧客をサポートする AWS のエンタープライズ ソリューション アーキテクトです。 彼女は、クラウドに最適化されたインフラストラクチャ ソリューションのアーキテクチャ、設計、開発で顧客を支援することに喜びを感じています。 彼女は AI と機械学習を専門とし、AI/ML アプリケーションのインテリジェンスを顧客に提供することに興味を持っています。 余暇には、小説を書いたり、ピアノを弾いたりするパートタイムのイラストレーターでもあります。
デミル・カトヴィッチ は、スイスのチューリッヒに拠点を置く AWS の機械学習エンジニアです。 彼は顧客と関わり、スケーラブルで完全に機能する ML アプリケーションの実装を支援します。 彼は、顧客向けの機械学習アプリケーションの構築と製品化に情熱を持っており、AI/ML の世界の新しいトレンドや最先端のテクノロジーを常に探索することに熱心です。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- PlatoData.Network 垂直生成 Ai。 自分自身に力を与えましょう。 こちらからアクセスしてください。
- プラトアイストリーム。 Web3 インテリジェンス。 知識増幅。 こちらからアクセスしてください。
- プラトンESG。 自動車/EV、 カーボン、 クリーンテック、 エネルギー、 環境、 太陽、 廃棄物管理。 こちらからアクセスしてください。
- ブロックオフセット。 環境オフセット所有権の近代化。 こちらからアクセスしてください。
- 情報源: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :は
- :not
- :どこ
- $UP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- できる
- 私たちについて
- アクセス可能な
- 越えて
- 加えます
- さらに
- 住所
- AI
- AI / ML
- すべて
- ことができます
- 沿って
- また
- 常に
- Amazon
- Amazon Webサービス
- 間に
- an
- および
- 回答
- どれか
- API
- API
- アプリ
- 申し込み
- 4月
- 建築
- Archive
- です
- 周りに
- AS
- 資産
- At
- 自動化する
- オートマチック
- 自動的に
- 利用できます
- 離れて
- AWS
- AWS CloudFormation
- AWSラムダ
- バックエンド
- 帯域幅
- ベース
- BE
- なぜなら
- の間に
- 青
- ボディ
- ブートストラップ
- 持って来る
- 広い
- ビルド
- 建物
- 内蔵
- 内蔵
- ビジネス
- 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。
- by
- 缶
- 自動車
- 場合
- 例
- 挑戦する
- 課題
- 変化する
- 変更
- チェック
- 選択
- 選択する
- クラウド
- コード
- コード
- 冷たい
- カラー
- 組み合わせ
- comes
- コンプリート
- コンセプト
- 信頼
- お問合せ
- 接続
- 領事
- 含む
- コンテナ
- コンテナ
- 含まれています
- コンテキスト
- 正しい
- コスト効率の良い
- 可能性
- 作ります
- 作成します。
- 作成
- Credentials
- Customers
- カスタマイズ
- 最先端
- データ
- デフォルト
- によっては
- 展開します
- 展開
- 展開する
- 展開
- 設計
- 詳細な
- 開発
- 開発
- 直接に
- 話し合います
- デッカー
- ドキュメント
- ドント
- ダウンロード
- 原因
- 間に
- 前
- 緩和する
- 容易
- 簡単に
- 簡単に
- 努力
- 埋め込みます
- エンパワーメント
- end
- エンドポイント
- 従事する
- エンジニア
- エンジニア
- 確保
- Enterprise
- 環境
- 環境
- エラー
- 例
- 例
- 興奮した
- 実行します
- 既存の
- 出口
- 実験
- 探る
- 顔
- 特徴
- 少数の
- File
- 名
- 初回
- 柔軟性
- フレキシブル
- フォロー中
- 次
- フレームワーク
- から
- function
- 機能性
- 機能
- ゲートウェイ
- 一般に
- 生々しい
- 生成AI
- 取得する
- GitHubの
- 与えられた
- Go
- 行く
- 成長
- ハンドル
- ハード
- 持ってる
- he
- 聞く
- ヘビー
- 重いもの
- 助けます
- 助け
- ことができます
- 彼女の
- こちら
- ハイパフォーマンス
- host
- 認定条件
- How To
- しかしながら
- HTML
- HTTP
- HTTPS
- ハブ
- i
- アイドル
- if
- 画像
- 画像
- 実装する
- 実装する
- 重要
- in
- その他の
- 含ま
- 産業
- インフラ
- 内部
- インストール
- インテリジェンス
- 相互作用的
- 興味がある
- インターネット
- に
- 導入
- 問題
- IT
- ITS
- 自体
- JSON
- キーン
- 知っている
- 着陸
- 言語
- 大
- 後で
- 学習
- 図書館
- 生活
- フェイスリフト
- ような
- LINE
- 負荷
- ローカル
- 局部的に
- ログ
- ロギング
- ロジック
- ログイン
- MAC
- 機械
- 機械学習
- 製
- メイン
- make
- 作る
- 管理します
- 管理する
- 五月..
- 大会
- メッセージ
- マイクロサービス
- かもしれない
- マインド
- 分
- ML
- モデル
- モダン
- 他には?
- 最も
- 移動する
- の試合に
- しなければなりません
- my
- すなわち
- 必要
- 必要
- 必要とされる
- ニーズ
- 新作
- 今
- of
- 頻繁に
- on
- かつて
- ONE
- の
- 開いた
- オープンソース
- 操作
- オプション
- or
- 注文
- 一般
- その他
- 私たちの
- でる
- パッケージ化された
- ページ
- パラメーター
- 部
- 渡された
- 情熱的な
- パフォーマンス
- 期間
- 場所
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- 演劇
- 人気
- ポスト
- 予測
- 優先
- 前提条件
- プレゼント
- プロセス
- 生産
- プロジェクト
- プロジェクト(実績作品)
- 証明
- 概念実証
- 受験する
- 提供
- は、大阪で
- 提供
- 押す
- Python
- 質問
- 準備
- への
- レッド
- 減らします
- 地域
- 地域
- 倉庫
- リクエスト
- の提出が必要です
- 要件
- 要件
- リソース
- 応答
- 結果
- リテンションを維持
- 右
- ルート
- ルート
- ルート
- ラン
- ランニング
- セージメーカー
- 節約
- ド電源のデ
- 規模
- 科学者たち
- スコープ
- スコア
- 選択
- 選択
- サーバレス
- サーバー
- サービス
- サービス
- サービング
- セッションに
- 彼女
- すべき
- 表示する
- ショーケース
- 示す
- 作品
- 重要
- 著しく
- 同様の
- 簡単な拡張で
- So
- ソフトウェア
- 溶液
- ソリューション
- 解決する
- 一部
- 話す
- 専門の
- 特に
- 指定の
- スタック
- スタンド
- start
- 開始
- Status:
- 手順
- ステップ
- ストレージ利用料
- 店舗
- 保存
- 文字列
- 構造
- 首尾よく
- そのような
- 支援する
- Sweden
- スイス
- 取る
- 仕事
- テクノロジー
- template
- テンプレート
- test
- それ
- アプリ環境に合わせて
- それら
- その後
- そこ。
- 彼ら
- この
- 介して
- 時間
- <font style="vertical-align: inherit;">回数</font>
- 〜へ
- ツール
- top
- トラフィック
- トレーニング
- 訓練された
- トレンド
- 試します
- ui
- UNIX
- 最新
- URL
- つかいます
- 中古
- ユーザー
- 使用されます
- バージョン
- 、
- バーチャル
- wait
- 欲しいです
- ました
- we
- ウェブ
- ウェブアプリケーション
- Webサービス
- 歓迎
- WELL
- went
- この試験は
- 何ですか
- いつ
- たびに
- かどうか
- which
- 誰
- 意志
- 無し
- 仕事
- 世界
- 書かれた
- You
- あなたの
- あなた自身
- ゼファーネット
- チューリッヒ