機械学習 (ML) が主流になり、広く採用されるようになるにつれて、さまざまな複雑なビジネス上の問題を解決するために、ML を活用した推論アプリケーションがますます一般的になりつつあります。 これらの複雑なビジネス問題を解決するには、多くの場合、複数の ML モデルとステップを使用する必要があります。 この投稿では、カスタム コンテナを使用して ML アプリケーションを構築してホストする方法を説明します。 アマゾンセージメーカー.
Amazon SageMaker が提供するもの 組み込みアルゴリズム および 事前に構築された SageMaker モデルをデプロイするための docker イメージ。 ただし、これらがニーズに合わない場合は、独自のコンテナ (BYOC) を使用して Amazon SageMaker でホスティングすることができます。
ユーザーが Amazon SageMaker でホスティングするために BYOC が必要になるユースケースがいくつかあります。
- カスタム ML フレームワークまたはライブラリ: Amazon SageMaker 組み込みアルゴリズムまたは事前構築済みコンテナでサポートされていない ML フレームワークまたはライブラリを使用する場合は、カスタム コンテナを作成する必要があります。
- 特殊なモデル: 特定のドメインまたは業界では、組み込みの Amazon SageMaker 製品では利用できない特定のモデル アーキテクチャまたは調整された前処理ステップが必要になる場合があります。
- 独自のアルゴリズム: 独自のアルゴリズムを社内で開発した場合は、それらを Amazon SageMaker にデプロイするためのカスタムコンテナが必要になります。
- 複雑な推論パイプライン: ML 推論ワークフローにカスタム ビジネス ロジック (特定の順序で実行する必要がある一連の複雑なステップ) が含まれる場合、BYOC はこれらのステップをより効率的に管理および調整するのに役立ちます。
ソリューションの概要
このソリューションでは、最新の XNUMX つのカスタム推論コンテナを使用して、リアルタイム エンドポイントを備えた Amazon SageMaker で ML シリアル推論アプリケーションをホストする方法を示します。 scikit-learn
および xgboost
パッケージ。
最初のコンテナは scikit-learn
生データを特徴のある列に変換するモデル。 該当します StandardScaler 数値列の場合と OneHotEncoder カテゴリ的なものに。
XNUMX 番目のコンテナーは、事前トレーニングされた XGboost
モデル (つまり、予測子)。 予測子モデルは、特徴付けられた入力を受け入れ、予測を出力します。
最後に、 フィーチャライザー および 予測者 Amazon SageMaker リアルタイムエンドポイントへのシリアル推論パイプライン内。
ここでは、推論アプリケーション内に個別のコンテナーを用意する必要がある理由について、いくつかの異なる考慮事項を示します。
- デカップリング – パイプラインのさまざまなステップには明確に定義された目的があり、基礎となる依存関係が関係しているため、個別のコンテナーで実行する必要があります。 これは、パイプラインを適切に構造化するのにも役立ちます。
- フレームワーク – パイプラインのさまざまなステップでは、特定の目的に合ったフレームワーク (scikit や Spark ML など) を使用するため、別のコンテナーで実行する必要があります。
- リソースの分離 – パイプラインのさまざまなステップには、さまざまなリソース消費要件があるため、柔軟性と制御を高めるために別のコンテナーで実行する必要があります。
- メンテナンスとアップグレード – 運用の観点から見ると、これにより機能の分離が促進され、他のモデルに影響を与えることなく、個々のステップをより簡単にアップグレードまたは変更し続けることができます。
さらに、個々のコンテナーのローカル ビルドは、お気に入りのツールや統合開発環境 (IDE) を使用した開発とテストの反復プロセスに役立ちます。 コンテナの準備ができたら、Amazon SageMaker エンドポイントを使用した推論のために、コンテナを AWS クラウドにデプロイできます。
コード スニペットを含む完全な実装は、この Github リポジトリで入手できます。 こちら.
前提条件
これらのカスタム コンテナーを最初にローカルでテストするため、ローカル コンピューターに Docker デスクトップがインストールされている必要があります。 Docker コンテナの構築に精通している必要があります。
このアプリケーションをエンドツーエンドでテストするには、Amazon SageMaker、Amazon ECR、Amazon S3 にアクセスできる AWS アカウントも必要です。
の最新バージョンがあることを確認します Boto3
Amazon SageMaker Python パッケージがインストールされています。
ソリューションウォークスルー
カスタムの特徴付けコンテナーを構築する
最初のコンテナである featureizer コンテナを構築するには、 scikit-learn
生の特徴を処理するためのモデル アワビ データセット。 前処理スクリプトは以下を使用します SimpleImputer 欠損値を処理するため、 StandardScaler 数値列を正規化するため、および OneHotEncoder カテゴリ列を変換するため。 変圧器を取り付けた後、モデルを次の場所に保存します。 ジョブライブラリ フォーマット。 次に、この保存されたモデル アーティファクトを圧縮して、Amazon Simple Storage Service (アマゾンS3) バケツ。
これを示すサンプル コード スニペットを次に示します。 参照する フィーチャライザー.ipynb 完全に実装するには:
次に、フィーチャーライザー モデルのカスタム推論コンテナーを作成するために、nginx、gunicorn、flask パッケージ、およびフィーチャーライザー モデルに必要なその他の依存関係を含む Docker イメージを構築します。
Nginx、gunicorn、Flask アプリはモデル サービング スタックとして機能します Amazon SageMaker リアルタイム エンドポイント上。
Amazon SageMaker でホストするカスタムコンテナを導入する場合、推論スクリプトがコンテナ内で起動された後に次のタスクを実行することを確認する必要があります。
- モデルの読み込み: 推論スクリプト (
preprocessing.py
)を参照してください/opt/ml/model
コンテナにモデルをロードするディレクトリ。 Amazon S3 のモデルアーティファクトがダウンロードされ、パスのコンテナにマウントされます。/opt/ml/model
. - 環境変数: カスタム環境変数をコンテナに渡すには、それらをコンテナーの実行中に指定する必要があります。 モデル 作成ステップまたは作成中 エンドポイント トレーニングジョブからの作成。
- API 要件: 推論スクリプトは両方を実装する必要があります
/ping
および/invocations
Flask アプリケーションとしてルートします。 の/ping
API はヘルスチェックに使用されますが、/invocations
API は推論リクエストを処理します。 - ロギング: 推論スクリプトの出力ログは標準出力に書き込まれる必要があります((Linuxで言うところのstdout)) と標準誤差 (stderr) ストリーム。 これらのログは次にストリーミングされます。 アマゾンクラウドウォッチ Amazon SageMaker による。
これがからのスニペットです preprocessing.py
の実装を示す /ping
および /invocations
.
参照する 前処理.py 完全に実装するには、featurizer フォルダーの下にあります。
フィーチャライザーとモデル サービング スタックを使用して Docker イメージを構築する
次に、カスタムベースイメージを使用して Dockerfile を構築し、必要な依存関係をインストールしましょう。
このために、私たちは使用します python:3.9-slim-buster
ベースイメージとして。 これは、ユースケースに関連する他の基本イメージに変更できます。
次に、nginx 構成、gunicorn の Web サーバー ゲートウェイ ファイル、および推論スクリプトをコンテナーにコピーします。 また、nginx および gunicorn プロセスをバックグラウンドで起動し、推論スクリプト (preprocessing.py Flask アプリケーション) をコンテナーのエントリ ポイントとして設定する、serve という Python スクリプトも作成します。
以下は、featurizer モデルをホストするための Dockerfile のスニペットです。 完全な実装については、以下を参照してください。 ドッカーファイル 下 フィーチャライザー フォルダにコピーします。
featureizer を使用してカスタム推論画像をローカルでテストする
次に、Amazon を使用して、featurizer を備えたカスタム推論コンテナをローカルで構築してテストします。 SageMaker ローカル モード。 ローカルモードは、Amazon SageMaker でジョブを起動せずに、処理、トレーニング、推論スクリプトをテストするのに最適です。 ローカルテストの結果を確認した後、最小限の変更を行うだけで、Amazon SageMaker でのデプロイメント用にトレーニングおよび推論スクリプトを簡単に適応させることができます。
フィーチャライザーのカスタム イメージをローカルでテストするには、まず以前に定義したものを使用してイメージを構築します。 ドッカーファイル。 次に、フィーチャーライザー モデルを含むディレクトリをマウントしてコンテナーを起動します (preprocess.joblib
に) /opt/ml/model
コンテナ内のディレクトリ。 さらに、ポート 8080 をコンテナからホストにマップします。
起動すると、推論リクエストを次の宛先に送信できます。 http://localhost:8080/invocations.
コンテナーを構築して起動するには、ターミナルを開いて次のコマンドを実行します。
を置き換える必要があることに注意してください。 <IMAGE_NAME>
を、次のコードに示すように、コンテナーのイメージ名に置き換えます。
次のコマンドも、トレーニング済みであることを前提としています。 scikit-learn
モデル (preprocess.joblib
) というディレクトリの下に存在します。 models
.
コンテナーが起動して実行されたら、両方をテストできます。 / ping および /呼び出し カールコマンドを使用してルートを設定します。
ターミナルから以下のコマンドを実行します
生(未変換)データが送信されるとき http://localhost:8080/invocations、エンドポイントは変換されたデータで応答します。
次のような応答が表示されるはずです。
ここで、実行中のコンテナを終了し、ローカルのカスタム イメージにタグを付けてプライベート Amazon Elastic Container Registry にプッシュします (アマゾンECR) リポジトリ。
Amazon ECR にログインするには、次のコマンドを参照してください。これにより、ローカルイメージに Amazon ECR イメージの完全なパスがタグ付けされ、イメージが Amazon ECR にプッシュされます。 必ず交換してください region
および account
環境に合わせて変数を変更します。
参照する リポジトリを作成する および イメージを Amazon ECR にプッシュする AWS コマンドラインインターフェイス (AWSCLI詳細については、コマンドを参照してください。
オプションのステップ
オプションで、Amazon ECR のカスタム Docker イメージを使用してフィーチャライザー モデルをリアルタイム エンドポイントにデプロイすることにより、ライブ テストを実行できます。 参照する フィーチャライザー.ipynb カスタムイメージの構築、テスト、Amazon ECR へのプッシュを完全に実装するためのノートブック。
Amazon SageMaker は推論エンドポイントを初期化し、モデルアーティファクトを /opt/ml/model
コンテナ内のディレクトリ。 見る SageMaker がモデル アーティファクトをロードする方法.
カスタム XGBoost 予測コンテナーを構築する
XGBoost 推論コンテナを構築するには、featurizer コンテナのイメージを構築したときと同様の手順に従います。
- 事前トレーニング済みのダウンロード
XGBoost
Amazon S3 のモデル。 - 作ります
inference.py
事前トレーニングされたものをロードするスクリプトXGBoost
モデルを作成し、featurizer から受け取った変換された入力データを変換して、XGBoost.DMatrix
フォーマット、実行predict
ブースター上で予測を実行し、json 形式で予測を返します。 - モデル サービング スタックを形成するスクリプトと構成ファイル (つまり、
nginx.conf
,wsgi.py
,serve
変更する必要はありません。 - を使用しております
Ubuntu:18.04
Dockerfile のベースイメージとして。 これは前提条件ではありません。 ubuntu 基本イメージを使用して、任意の基本イメージでコンテナーを構築できることを示します。 - 顧客の Docker イメージを構築し、イメージをローカルでテストし、テストされたイメージを Amazon ECR にプッシュする手順は以前と同じです。
簡潔にするため、手順は以前に示したものと同様です。 ただし、以下では変更されたコーディングのみを示します。
まず、 inference.py
脚本。 以下は、の実装を示すスニペットです。 /ping
および /invocations
。 参照する inference.py 下 予測者 このファイルを完全に実装するためのフォルダー。
以下は、予測モデルをホストするための Dockerfile のスニペットです。 完全な実装については、以下を参照してください。 ドッカーファイル 予測フォルダーの下にあります。
その後、このカスタム予測子イメージの構築、テストを続けて、Amazon ECR のプライベート リポジトリにプッシュします。 参照する 予測子.ipynb カスタムイメージの構築、テスト、Amazon ECR へのプッシュを完全に実装するためのノートブックです。
シリアル推論パイプラインをデプロイする
特徴付け子イメージと予測子イメージの両方をテストし、Amazon ECR にプッシュした後、モデルアーティファクトを Amazon S3 バケットにアップロードします。
次に、XNUMX つのモデル オブジェクトを作成します。XNUMX つは featurizer
(すなわち、 preprocess.joblib
)およびその他の predictor
(すなわち、 xgboost-model
) 前に構築したカスタム イメージ URI を指定します。
これがそれを示すスニペットです。 参照する シリアル推論パイプライン.ipynb 完全な実装のために。
ここで、これらのコンテナを連続的にデプロイするために、最初に パイプラインモデル オブジェクトを渡して featurizer
モデルと predictor
モデルを同じ順序で Python リスト オブジェクトに変換します。
次に、 .deploy()
メソッドの パイプラインモデル インスタンスのタイプとインスタンス数を指定します。
この段階で、Amazon SageMaker はシリアル推論パイプラインをリアルタイムエンドポイントにデプロイします。 エンドポイントが次になるのを待ちます。 InService
.
このライブ エンドポイントにいくつかの推論リクエストを送信して、エンドポイントをテストできるようになりました。
参照する シリアル推論パイプライン.ipynb 完全な実装のために。
クリーンアップ
テストが完了したら、不要な料金が発生しないように、ノートブックのクリーンアップ セクションの指示に従って、この投稿でプロビジョニングされたリソースを削除してください。 参照する Amazon SageMakerの価格 推論インスタンスのコストの詳細については、「推論インスタンスのコスト」を参照してください。
まとめ
この投稿では、カスタム推論コンテナを使用してシリアル ML 推論アプリケーションを構築し、Amazon SageMaker 上のリアルタイム エンドポイントにデプロイする方法を示しました。
このソリューションは、顧客がコスト効率の高い方法で Amazon SageMaker でホストするために独自のカスタムコンテナを導入する方法を示しています。 BYOC オプションを使用すると、顧客は ML アプリケーションを迅速に構築して調整し、Amazon SageMaker にデプロイできます。
ビジネスの主要業績評価指標 (KPI) に関連するデータセットを使用して、このソリューションを試してみることをお勧めします。 このソリューション全体を参照できます GitHubリポジトリ.
参考文献
著者について
プラヴィーン・チャマルティ アマゾン ウェブ サービスのシニア AI/ML スペシャリストです。 彼は AI/ML とすべての AWS に情熱を注いでいます。 彼は、南北アメリカ全体の顧客が AWS で ML ワークロードを効率的にスケーリング、革新、運用するのを支援しています。 余暇には、Praveen は読書が大好きで、SF 映画を楽しんでいます。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- PlatoData.Network 垂直生成 Ai。 自分自身に力を与えましょう。 こちらからアクセスしてください。
- プラトアイストリーム。 Web3 インテリジェンス。 知識増幅。 こちらからアクセスしてください。
- プラトンESG。 カーボン、 クリーンテック、 エネルギー、 環境、 太陽、 廃棄物管理。 こちらからアクセスしてください。
- プラトンヘルス。 バイオテクノロジーと臨床試験のインテリジェンス。 こちらからアクセスしてください。
- 情報源: https://aws.amazon.com/blogs/machine-learning/build-and-deploy-ml-inference-applications-from-scratch-using-amazon-sagemaker/
- :持っている
- :は
- :not
- :どこ
- $UP
- 08
- 09
- 1
- 10
- 100
- 11
- 13
- 14
- 150
- 16
- 17
- 20
- 200
- 2023
- 25
- 28
- 30
- 500
- 7
- 8
- 87
- 9
- a
- 私たちについて
- 同意
- 受け入れる
- アクセス
- それに応じて
- 越えて
- 適応する
- さらに
- 養子縁組
- 影響
- 後
- AI / ML
- アルゴリズム
- すべて
- 沿って
- また
- Amazon
- アマゾンセージメーカー
- Amazon Webサービス
- 南北アメリカ
- an
- および
- どれか
- API
- アプリ
- 申し込み
- 適用
- 4月
- です
- 配列
- AS
- と仮定する
- At
- 利用できます
- 避ける
- AWS
- 背景
- ベース
- ベース
- BE
- になる
- さ
- 以下
- ボディ
- ブースター
- 両言語で
- 持って来る
- 持参
- ビルド
- 建物
- 内蔵
- 内蔵
- 一式販売
- ビジネス
- 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。
- by
- コール
- 呼ばれます
- 缶
- 場合
- 例
- CAT
- 一定
- 変化する
- 変更
- 変更
- 課金
- チェック
- 小切手
- はっきりと
- クラウド
- コード
- コーディング
- コラム
- コラム
- COM
- コマンドと
- 複雑な
- コンピュータ
- 交流
- 接続
- 検討事項
- 定数
- 構築する
- 消費
- コンテナ
- コンテナ
- コンテンツ
- 中身
- 続ける
- コントロール
- 変換
- 費用
- 可能性
- 作ります
- 作成
- 創造
- Credentials
- カスタム
- 顧客
- Customers
- データ
- 日付
- 定義します
- 定義済みの
- 実証します
- 実証
- 依存関係
- 展開します
- 展開
- 展開する
- 展開
- 配備する
- デスクトップ
- 細部
- 決定
- 発展した
- 開発
- DICT
- DID
- 異なります
- デッカー
- ドメイン
- 行われ
- ドント
- 原因
- 間に
- e
- 前
- 簡単に
- 効率良く
- ほかに
- 奨励する
- 端から端まで
- エンドポイント
- 確保
- 全体
- エントリ
- 環境
- 環境
- エラー
- 等
- 例
- 除く
- 例外
- 実行された
- おなじみの
- ファッション
- お気に入り
- 特徴
- 少数の
- File
- 名
- フィット
- フィッティング
- 柔軟性
- フォロー中
- フォーム
- 形式でアーカイブしたプロジェクトを保存します.
- 発見
- フレームワーク
- フレームワーク
- から
- フル
- function
- 機能的な
- 利益
- ゲートウェイ
- 取得する
- GitHubの
- GMT
- ゴエス
- ハンドル
- ハンドル
- ハンドリング
- 持ってる
- he
- 健康
- 高さ
- 助けます
- ことができます
- 彼の
- host
- ホスティング
- ホスト
- 認定条件
- How To
- しかしながら
- HTML
- HTTP
- HTTPS
- i
- if
- 画像
- 画像
- 実装する
- 実装
- import
- in
- 含ま
- 含めて
- ますます
- インジケータ
- 個人
- 産業
- 情報
- 社内
- 革新します
- 内部
- install
- インストール
- 説明書
- 統合された
- インタフェース
- に
- 関係する
- 分離
- IT
- ジョブ
- Jobs > Create New Job
- JPG
- JSON
- キープ
- キー
- ラベル
- 最新の
- 起動する
- 打ち上げ
- 起動
- 発射
- 学習
- 左
- 長さ
- ライブラリ
- LINE
- リスト
- リストされた
- ライブ
- 負荷
- ローディング
- 負荷
- ローカル
- 局部的に
- ロジック
- ログイン
- で
- 機械
- 機械学習
- 主流
- 作る
- 作成
- 管理します
- 方法
- 地図
- マーク
- 一致
- 五月..
- 方法
- かもしれない
- 最小限の
- 行方不明
- ML
- モード
- モデル
- 修正する
- 他には?
- 動画
- ずっと
- の試合に
- しなければなりません
- 名
- 名
- 必要
- ニーズ
- いいえ
- なし
- ノート
- 今
- 数
- numpy
- オブジェクト
- オブジェクト
- of
- オファリング
- オファー
- 頻繁に
- on
- かつて
- ONE
- もの
- の
- 〜に
- 開いた
- 操作する
- オペレーショナル
- オプション
- or
- 注文
- OS
- その他
- 私たちの
- 出力
- 自分の
- パッケージ
- パンダ
- パラメータ
- 特定の
- パス
- 情熱的な
- path
- 完璧
- 実行する
- パフォーマンス
- 実行する
- パイプライン
- 計画
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- お願いします
- ポイント
- ポスト
- 予測
- 予測
- Predictor
- 現在
- 前に
- プライベート
- 問題
- プロセス
- ラボレーション
- 処理
- プロセッサ
- 促進する
- 所有権
- 目的
- プッシュ
- プッシュ
- 押す
- Python
- すぐに
- 上げる
- 範囲
- Raw
- 読む
- 準備
- への
- 受け
- 参照する
- レジストリ
- 関連した
- 残る
- replace
- 倉庫
- 要求
- リクエスト
- 必要とする
- の提出が必要です
- 要件
- 必要
- リソースを追加する。
- リソース
- 応答
- 結果
- 結果
- return
- 返す
- 収益
- リング
- ルート
- ルート
- 行
- ラン
- ランニング
- runs
- セージメーカー
- 同じ
- Save
- 保存されました
- 規模
- サイエンスフィクション
- スクラッチ
- スクリプト
- スクリプト
- 二番
- セクション
- 送信
- 送信
- シニア
- 送信
- 別
- シリアル
- シリーズ
- 役立つ
- サービス
- サービス
- サービング
- セッション
- セッションに
- セット
- いくつかの
- 性別
- すべき
- 表示する
- 示されました
- 示す
- 作品
- 同様の
- 簡単な拡張で
- スニペット
- So
- 溶液
- 解決する
- 一部
- 何か
- スパーク
- 専門家
- 特定の
- スタック
- ステージ
- 標準
- 立場
- Status:
- 手順
- ステップ
- ストレージ利用料
- ストリーミング配信
- ストリーム
- 文字列
- 構造化された
- 首尾よく
- そのような
- 日
- サポート
- 支援する
- サポート
- TAG
- テーラード
- 取り
- タスク
- ターミナル
- test
- テスト
- テスト
- テスト
- それ
- アプリ環境に合わせて
- それら
- その後
- そこ。
- したがって、
- ボーマン
- 物事
- この
- 時間
- 〜へ
- 豊富なツール群
- トレーニング
- 訓練された
- トレーニング
- 最適化の適用
- 変換
- トランス
- トランスフォーマー
- 変換
- 試します
- しよう
- 2
- type
- Ubuntu
- 下
- 根本的な
- 不要
- アップグレード
- 使用可能な
- つかいます
- 使用事例
- 中古
- users
- 使用されます
- 価値観
- さまざまな
- 変化する
- 検証する
- バージョン
- wait
- 欲しいです
- ました
- we
- ウェブ
- ウェブサーバー
- Webサービス
- WELL
- which
- while
- なぜ
- より広い
- 意志
- 以内
- 無し
- ワークフロー
- ワーキング
- 書かれた
- X
- XGブースト
- You
- あなたの
- ゼファーネット