Amazon SageMaker PlatoBlockchain Data Intelligence でアンサンブル ML モデルを実行します。垂直検索。あい。

Amazon SageMaker でアンサンブル ML モデルを実行する

機械学習 (ML) でのモデルのデプロイは、ますます複雑になっています。 XNUMX つの ML モデルだけでなく、アンサンブル ワークフローとして表される ML モデルの大規模なグループを展開する必要があります。 これらのワークフローは、複数の ML モデルで構成されています。 これらの ML モデルの実稼働化は、さまざまなパフォーマンスとレイテンシの要件に準拠する必要があるため、困難です。

アマゾンセージメーカー 単一インスタンスのアンサンブルをサポート Triton推論サーバー. この機能により、単一のインスタンスに適合するモデル アンサンブルを実行できます。 舞台裏では、SageMaker は Triton Inference Server を活用して、エンドポイントの背後にあるすべてのインスタンスのアンサンブルを管理し、超低 (XNUMX 桁ミリ秒) の推論レイテンシーでスループットとハードウェア使用率を最大化します。 Triton を使用すると、サポートされている幅広い ML フレームワーク (TensorFlow、PyTorch、ONNX、XGBoost、NVIDIA TensorRT など) とインフラストラクチャ バックエンド (GPU、CPU、および AWSインフェレンティア.

SageMaker でこの機能を使用すると、コストのかかるネットワークレイテンシーを回避し、アンサンブル推論パイプラインのコンピューティングとデータの局所性の利点を享受することで、ワークロードを最適化できます。 この投稿では、Triton Inference Server を使用する利点と、これがワークロードにとって適切なオプションであるかどうかについての考慮事項について説明します。

ソリューションの概要

Triton Inference Server は、チームが任意の GPU または CPU ベースのインフラストラクチャ上の任意のフレームワークからトレーニング済みの AI モデルをデプロイ、実行、スケーリングできるように設計されています。 さらに、動的バッチ処理、同時実行、最適なモデル構成、モデル アンサンブル機能、ストリーミング入力のサポートなどの機能を使用して、大規模な高性能推論を提供するように最適化されています。

ワークロードでは、モデルを確実に提供できるようにするために Triton が提供する機能を考慮する必要があります。 Triton は、TensorFlow、PyTorch、ONNX、XGBoost、NVIDIA TensorRT など、多くの一般的なフレームワークをすぐにサポートします。 Triton はさまざまなバックエンドもサポートしています アルゴリズムを正しく実行するために必要です。 モデルがこれらのバックエンドでサポートされていることを確認する必要があります。バックエンドがサポートしていない場合は、Triton を使用して独自の実装と統合を行うことができます。 また、アルゴリズムのバージョンがサポートされていることを確認し、モデル アーティファクトが対応するバックエンドで受け入れられることを確認する必要があります。 特定のアルゴリズムがサポートされているかどうかを確認するには、次を参照してください。 Triton 推論サーバー バックエンド NVIDIA が管理している、ネイティブにサポートされているバックエンドのリストについては、.

ネイティブにサポートされているバックエンドがアルゴリズムに存在しない場合など、モデルまたはモデル アンサンブルがより多くの労力を必要とせずに Triton で動作しないシナリオがいくつかあるかもしれません。 特にペイロード サイズがリクエストに対して大きい場合は、ペイロード形式が理想的でない可能性があるなど、考慮すべきその他の考慮事項がいくつかあります。 いつものように、これらのワークロードを展開した後にパフォーマンスを検証して、期待が満たされていることを確認する必要があります。

画像分類ニューラル ネットワーク モデルを取り上げて、ワークロードを高速化する方法を見てみましょう。 この例では、NVIDIA DALI バックエンドを使用して、アンサンブルのコンテキストで前処理を高速化します。

Triton モデル アンサンブルの作成

Triton Inference Server は、大規模な AI モデルの展開を簡素化します。 Triton Inference Server には、前処理パイプラインと後処理パイプラインの構築を簡素化する便利なソリューションが付属しています。 Triton Inference Server プラットフォームはアンサンブル スケジューラを提供します。これを使用して、効率を確保し、スループットを最適化しながら、推論プロセスに参加するパイプライン アンサンブル モデルを構築できます。

Triton Inference Server は、モデル リポジトリからモデルを提供します。 DALI 前処理モデル、TensorFlow インセプション V3 モデル、およびモデル アンサンブル構成を含むアンサンブル モデルのモデル リポジトリ レイアウトを見てみましょう。 各サブディレクトリには、対応するモデルのリポジトリ情報が含まれています。 の config.pbtxt ファイルには、モデルのモデル構成が記述されています。 各ディレクトリには、モデルのバージョンごとに XNUMX つの数値サブフォルダーが必要であり、Triton がサポートする特定のバックエンドによって実行されます。

NVIDIA Triton モデル リポジトリ

NVIDIA ダリ

この記事では、モデル アンサンブルの前処理モデルとして NVIDIA Data Loading Library (DALI) を使用します。 NVIDIA DALI は、ディープラーニング アプリケーションを高速化するためのデータの読み込みと前処理のためのライブラリです。 画像、ビデオ、およびオーディオ データの読み込みと処理に最適化されたビルディング ブロックのコレクションを提供します。 一般的なディープ ラーニング フレームワークに組み込まれているデータ ローダーとデータ イテレーターの移植可能なドロップイン代替品として使用できます。

NVIDIA ダリ

次のコードは、DALI バックエンドのモデル構成を示しています。

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

インセプション V3 モデル

この投稿では、Inception V3 を使用したモデル アンサンブルで DALI がどのように使用されているかを示します。 Inception V3 TensorFlow の事前トレーニング済みモデルは、次の名前の単一のファイルとして GraphDef 形式で保存されます。 model.graphdefを選択します。 config.pbtxt ファイルには、モデル名、プラットフォーム、 max_batch_size、および入出力コントラクト。 を設定することをお勧めします。 max_batch_size V3 モデルのバッチ サイズ未満に設定します。 ラベル ファイルには、1,000 の異なるクラスのクラス ラベルがあります。 開始分類モデルのラベルを inception_graphdef モデル リポジトリのディレクトリ。 ラベル ファイルには、 ImageNet 分類データセット。

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

トリトンアンサンブル

次のコードは、DALI 前処理と画像分類のためのアンサンブル モデルのモデル構成を示しています。

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

SageMakerエンドポイントを作成する

SageMaker エンドポイント ミリ秒の応答時間が必要なリアルタイム ホスティングを可能にします。 SageMaker は、モデル ホスティング管理の差別化されていない重労働を引き受け、自動スケーリング機能を備えています。 さらに、モデルの複数のバリアントのホスティング、モデルの A/B テスト、 アマゾンクラウドウォッチ モデルのパフォーマンスを観察し、モデルのドリフトを監視します。

アップロードしたモデルアーティファクトから SageMaker モデルを作成しましょう Amazon シンプル ストレージ サービス (Amazon S3)。

次に、追加の環境変数も提供します。 SAGEMAKER_TRITON_DEFAULT_MODEL_NAMETriton によってロードされるモデルの名前を指定します。 このキーの値は、Amazon S3 にアップロードされたモデル パッケージのフォルダー名と一致する必要があります。 単一のモデルを使用している場合、この変数はオプションです。 アンサンブル モデルの場合、Triton が SageMaker で起動するには、このキーを指定する必要があります。

さらに、設定することができます SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT & SAGEMAKER_TRITON_THREAD_COUNT スレッド数を最適化するため。

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

前のモデルを使用して、エンドポイントで必要なインスタンスのタイプと数を指定できるエンドポイント構成を作成します。

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

このエンドポイント設定を使用して新しい SageMaker エンドポイントを作成し、デプロイが完了するのを待ちます。 デプロイが成功すると、ステータスが InService に変わります。

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

推論ペイロード

入力ペイロード イメージは、前処理の DALI パイプラインを通過し、Triton Inference Server によって提供されるアンサンブル スケジューラで使用されます。 推論エンドポイントに渡されるペイロードを作成します。

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

アンサンブル推論

エンドポイントを実行したら、サンプル イメージを使用して、JSON をペイロード形式として使用して推論リクエストを実行できます。 推論リクエストの形式について、Triton は KFServing コミュニティ標準の推論プロトコルを使用します。

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

binary+json フォーマットでは、Triton がバイナリ ペイロードを正しく解析できるように、ヘッダーにリクエスト メタデータの長さを指定する必要があります。 これは、カスタムの Content-Type ヘッダーを使用して行われます application/vnd.sagemaker-triton.binary+json;json-header-size={}.

これは、 Inference-Header-Content-Length SageMaker ではカスタム ヘッダーが許可されていないため、スタンドアロン Triton サーバーのヘッダー。

tritonclient パッケージは、仕様の詳細を知らなくてもペイロードを生成するためのユーティリティ メソッドを提供します。 次のメソッドを使用して、推論リクエストをバイナリ形式に変換します。これにより、推論のレイテンシが低くなります。 GitHub を参照 ノート 実装の詳細については、.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

まとめ

この投稿では、SageMaker の単一インスタンスで実行されるモデル アンサンブルを製品化する方法を紹介しました。 この設計パターンは、前処理ロジックと後処理ロジックを推論予測と組み合わせるのに役立ちます。 SageMaker は Triton を使用して、すべての主要なフレームワークをサポートするインスタンス上の単一のコンテナでアンサンブル推論を実行します。

SageMaker の Triton アンサンブルのその他のサンプルについては、 GitHubレポ。 やってみよう!


著者について

Amazon SageMaker PlatoBlockchain Data Intelligence でアンサンブル ML モデルを実行します。垂直検索。あい。ジェームズ・パーク アマゾン ウェブ サービスのソリューション アーキテクトです。 彼は Amazon.com と協力して、AWS でテクノロジー ソリューションを設計、構築、デプロイしており、特に AI と機械学習に関心があります。 余暇には、新しい文化、新しい経験を探し、最新のテクノロジー トレンドを把握することを楽しんでいます。

Amazon SageMaker PlatoBlockchain Data Intelligence でアンサンブル ML モデルを実行します。垂直検索。あい。ヴィクラムエランゴ は、米国バージニア州を拠点とするアマゾン ウェブ サービスのシニア AI/ML スペシャリスト ソリューション アーキテクトです。 Vikram は、機械学習アプリケーションを大規模に構築および展開するための設計およびソート リーダーシップを提供して、金融および保険業界のお客様を支援します。 彼は現在、自然言語処理、責任ある AI、推論の最適化、企業全体での ML のスケーリングに注力しています。 余暇には、旅行、ハイキング、料理、家族とのキャンプを楽しんでいます。

Amazon SageMaker PlatoBlockchain Data Intelligence でアンサンブル ML モデルを実行します。垂直検索。あい。サウラブ・トリカンデ Amazon SageMaker Inference のシニア プロダクト マネージャーです。 彼は顧客と協力することに情熱を傾けており、機械学習を民主化するという目標に動機付けられています。 彼は、複雑な ML アプリケーションのデプロイ、マルチテナント ML モデル、コストの最適化、およびディープ ラーニング モデルのデプロイをよりアクセスしやすくすることに関連する主要な課題に焦点を当てています。 余暇には、Saurabh はハイキングを楽しんだり、革新的なテクノロジーについて学んだり、TechCrunch をフォローしたり、家族と過ごしたりしています。

タイムスタンプ:

より多くの AWS機械学習