Amazon SageMaker PlatoBlockchain Data Intelligence を使用して、AWS Graviton ベースのインスタンスで機械学習推論ワークロードを実行します。 垂直検索。 あい。

Amazon SageMaker を使用して AWS Graviton ベースのインスタンスで機械学習推論ワークロードを実行する

本日、打ち上げです アマゾンセージメーカー の推論 AWS グラビトン Graviton チップがもたらす価格、パフォーマンス、および効率の利点を活用できるようにします。

Graviton ベースのインスタンスは、SageMaker でのモデル推論に使用できます。 この投稿は、機械学習 (ML) 推論ワークロードを x86 から SageMaker の Graviton ベースのインスタンスに移行してデプロイするのに役立ちます。 SageMaker でトレーニングされたモデルを Graviton ベースのインスタンスにデプロイするためのステップバイステップのガイドを提供し、Graviton を使用する際のベスト プラクティスについて説明し、価格とパフォーマンスの利点について説明し、TensorFlow モデルを SageMaker Graviton インスタンスにデプロイする方法をデモします。

グラビトンの概要

AWS Graviton は、AWS によって設計されたプロセッサのファミリーであり、最高の価格性能比を提供し、x86 の対応物よりもエネルギー効率が優れています。 AWS Graviton 3 プロセッサは、Graviton プロセッサフ​​ァミリーの最新版であり、bfloat16 のサポートや、Single Instruction Multiple Data (SIMD) 帯域幅の 3 倍など、ML ワークロード向けに最適化されています。 これら 2 つの機能を組み合わせると、Graviton 3 は Graviton 60 インスタンスと比較して最大 XNUMX 倍のパフォーマンスを実現できます。 Graviton XNUMX は、同等のパフォーマンスで最大 XNUMX% 少ないエネルギーを使用します。 アマゾン エラスティック コンピューティング クラウド (Amazon EC2) インスタンス。 二酸化炭素排出量を削減し、持続可能性の目標を達成したい場合、これは優れた機能です。

ソリューションの概要

モデルを Graviton インスタンスにデプロイするには、次のいずれかを使用します AWS深層学習コンテナ or 自分の容器を持ってくる Arm v8.2 アーキテクチャと互換性があります。

AWS は PyTorch、TensorFlow、Scikit-learn、および XGBoost を使用してモデルをホストするためのコンテナーを提供し、モデルはアーキテクチャに依存しないため、x86 を搭載したインスタンスから Graviton インスタンスへのモデルの移行 (または新しいデプロイ) は簡単です。 ただし、独自のライブラリを持ち込む場合は、それも可能です。コンテナが Arm64 アーキテクチャをサポートする環境で構築されていることを確認してください。 詳細については、次を参照してください。 独自のアルゴリズム コンテナの構築.

モデルをデプロイするには、次の XNUMX つの手順を完了する必要があります。

  1. SageMaker モデルを作成する: これには、他のパラメーターとともに、モデル ファイルの場所、デプロイに使用されるコンテナー、および推論スクリプトの場所に関する情報が含まれます。 (既存のモデルが x86 ベースの推論インスタンスに既にデプロイされている場合は、この手順をスキップできます。)
  2. エンドポイント構成を作成します。これには、エンドポイントに必要なインスタンスのタイプ (たとえば、Graviton7 の ml.c3g.xlarge)、手順 1 で作成したモデルの名前、および XNUMX つあたりのインスタンス数に関する情報が含まれます。終点。
  3. 手順 2 で作成したエンドポイント構成でエンドポイントを起動します。

前提条件

開始する前に、次の前提条件を考慮してください。

  1. にリストされている前提条件を完了します。 前提条件.
  2. モデルは、PyTorch、TensorFlow、XGBoost、または Scikit-learn ベースのモデルのいずれかである必要があります。 次の表は、この記事の執筆時点で現在サポートされているバージョンをまとめたものです。 最新のアップデートについては、次を参照してください。 SageMaker フレームワークコンテナ (SM サポートのみ).
    . Python TensorFlow パイトーチ シキット学習 XGブースト
    サポートされているバージョン 3.8 2.9.1 1.12.1 1.0-1 1.3-1から1.5-1
  3. 推論スクリプトは次の場所に格納されています Amazon シンプル ストレージ サービス (Amazon S3)。

次のセクションでは、展開手順について説明します。

SageMaker モデルを作成する

x86 ベースの推論インスタンスに既存のモデルが既にデプロイされている場合は、この手順をスキップできます。 それ以外の場合は、次の手順を実行して SageMaker モデルを作成します。

  1. S3 バケットに保存したモデルを見つけます。 URI をコピーします。
    後でモデル URI を使用します。 MODEL_S3_LOCATION.
  2. モデルのトレーニング中に使用されたフレームワークのバージョンと Python のバージョンを特定します。
    フレームワークと Python バージョンごとに、利用可能な AWS Deep Learning Containers のリストからコンテナを選択する必要があります。 詳細については、次を参照してください。 Amazon ECR のマルチアーキテクチャ コンテナ イメージの紹介.
  3. S3 バケットで推論 Python スクリプト URI を見つけます (一般的なファイル名は inference.py).
    推論スクリプトの URI は、 INFERENCE_SCRIPT_S3_LOCATION.
  4. これらの変数を使用して、次のコマンドで SageMaker API を呼び出すことができます。
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

マルチアーキテクチャ イメージを作成し、同じイメージを異なるタグで使用することもできます。 インスタンスをデプロイするアーキテクチャを指定できます。 詳細については、次を参照してください。 Amazon ECR のマルチアーキテクチャ コンテナ イメージの紹介.

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

モデルを作成したら、次のコマンドを実行してエンドポイント構成を作成する必要があります (使用しているインスタンスのタイプに注意してください)。

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

次のスクリーンショットは、SageMaker コンソールのエンドポイント構成の詳細を示しています。

エンドポイントを起動する

前の手順で作成したエンドポイント構成を使用して、エンドポイントをデプロイできます。

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

モデル エンドポイントがデプロイされるまで待ちます。 予測は、x86 ベースのインスタンスにデプロイされたエンドポイントの予測を要求するのと同じ方法で要求できます。

次のスクリーンショットは、SageMaker コンソールのエンドポイントを示しています。

構成からの SageMaker エンドポイント

サポート対象

SageMaker は、TensorFlow および PyTorch フレームワーク用に、パフォーマンスが最適化された Graviton ディープ コンテナを提供します。 これらのコンテナーは、コンピューター ビジョン、自然言語処理、レコメンデーション、および一般的な深く幅広いモデルベースの推論のユース ケースをサポートします。 深層学習コンテナーに加えて、SageMaker は XGBoost や Scikit-learn などの従来の ML フレームワーク用のコンテナーも提供します。 コンテナーは、c6g/m6g および c7g インスタンス間でバイナリ互換性があるため、推論アプリケーションをある世代から別の世代にシームレスに移行できます。

C6g/m6g は fp16 (半精度浮動小数点数) をサポートし、互換性のあるモデルの場合、c5 インスタンスと比較して同等またはそれ以上のパフォーマンスを提供します。 C7g は、SIMD 幅を 16 ​​倍にし、モデルを実行するための最もコスト効率の高いプラットフォームである bfloat-16 (bfXNUMX) をサポートすることで、ML のパフォーマンスを大幅に向上させます。

c6g/m6g と c7g はどちらも、SageMaker の他の CPU インスタンスと比較して、従来の ML (XGBoost など) に優れたパフォーマンスを提供します。 c16g での Bfloat-7 サポートにより、bf16 でトレーニングされたモデルまたは AMP (Automatic Mixed Precision) でトレーニングされたモデルを効率的にデプロイできます。 Graviton の Arm Compute Library (ACL) バックエンドは、モデルの量子化なしで、高速数学モードを介して fp16 オペレーターを高速化できる bfloat-32 カーネルを提供します。

推奨されるベスト プラクティス

Graviton インスタンスでは、すべての vCPU が物理コアです。 (SMT とは異なり) 共通の CPU リソースに対する競合はなく、ワークロードのパフォーマンスのスケーリングは vCPU の追加ごとに直線的です。 したがって、ユースケースが許す限り、バッチ推論を使用することをお勧めします。 これにより、物理コアごとにバッチを並列処理することで、vCPU を効率的に使用できます。 バッチ推論が不可能な場合は、OS スレッドのスケジューリング オーバーヘッドが追加の vCPU に伴う計算能力を上回らないように、特定のペイロードに最適なインスタンス サイズが必要です。

TensorFlow にはデフォルトで Eigen カーネルが付属しており、最も最適化された推論バックエンドを取得するには、ACL を使用する OneDNN に切り替えることをお勧めします。 OneDNN バックエンドと bfloat-16 高速数学モードは、コンテナー サービスの起動中に有効にすることができます。

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

上記のサービス提供コマンドは、50 つの重要な構成を持つ標準の resnetXNUMX モデルをホストします。

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

これらは、次の方法で推論コンテナーに渡すことができます。

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

導入例

この投稿では、SageMaker でトレーニングされた TensorFlow モデルを、Graviton を利用した SageMaker 推論インスタンスにデプロイする方法を紹介します。

コードサンプルは、SageMaker ノートブックインスタンス、 Amazon SageMakerスタジオ ノートブック、またはローカル モードの Jupyter ノートブック。 Jupyter ノートブックをローカルモードで使用する場合は、SageMaker 実行ロールを取得する必要があります。

次の例では、CIFAR-10 データセットを考慮しています。 SageMaker の例のノートブックの例に従うことができます GitHubレポ この投稿で使用されているモデルを再現します。 訓練されたモデルと cifar10_keras_main.py 推論用の Python スクリプト。

モデルは S3 バケットに保存されます。 s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

  cifar10_keras_main.py 推論に使用できるスクリプトは、次の場所に保存されています。s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

私たちは、使用 us-east-1 ml.c7g.xlarge Graviton ベースのインスタンスにモデルをリージョン化してデプロイします。 これに基づいて、AWS Deep Learning Container の URI は 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. 次のコードで設定します。
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. エンドポイント テスト用のデータセットをダウンロードします。
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. モデルとエンドポイント構成を作成し、エンドポイントをデプロイします。
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. オプションで、推論スクリプトを Environment in create_model トレーニング中に SageMaker モデルにアーティファクトとして最初に追加しなかった場合:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    展開が行われるまで数分待つ必要があります。

  5. 次のコードでエンドポイントのステータスを確認します。
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    また確認することができます AWSマネジメントコンソール モデルがいつデプロイされるかを確認します。

  6. エンドポイントを呼び出すランタイム環境をセットアップします。
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    次に、エンドポイントを呼び出すペイロードを準備します。 モデルのトレーニングに使用したのと同じ種類の画像を使用します。 これらは、前の手順でダウンロードしたものです。

  7. ペイロードをテンソルにキャストし、モデルが期待する正しい形式を設定します。 この例では、XNUMX つの予測のみをリクエストします。
    input_image = x_test[0].reshape(1,32,32,3)

    モデル出力を配列として取得します。

  8. ソフトマックスを適用すると、この出力を確率に変えることができます。
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

リソースをクリーンアップする

このソリューションに含まれるサービスにはコストがかかります。 このソリューションの使用が終了したら、次のリソースをクリーンアップします。

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

価格性能比較

Graviton ベースのインスタンスは、x86 ベースのインスタンスと比較して、最低の価格と最高のコスト パフォーマンスを提供します。 EC2 インスタンスと同様に、ml.c6g インスタンス (Graviton 2) を使用した SageMaker 推論エンドポイントは、ml.c20 と比較して 5% 低い価格を提供し、Graviton 3 ml.c7g インスタンスは ml.c15 インスタンスよりも 6% 安価です。 詳細については、次を参照してください。 Amazon SageMakerの価格.

まとめ

この投稿では、Graviton を利用した推論インスタンスにモデルをデプロイする、新しくリリースされた SageMaker 機能を紹介しました。 ベスト プラクティスに関するガイダンスを提供し、新しいタイプの推論インスタンスのコスト パフォーマンスの利点について簡単に説明しました。

Graviton の詳細については、次を参照してください。 AWS Graviton プロセッサ. Amazon EC2 コンソールで AWS Graviton ベースの EC2 インスタンスを開始できます。 AWS Graviton テクニカルガイド. このブログ投稿のサンプル コードを使用して、Graviton での推論用に Sagemaker モデル エンドポイントをデプロイできます。


著者について

ビクター・ハラミロビクター・ハラミロ博士 は、AW​​S プロフェッショナル サービスのシニア機械学習エンジニアです。 AWS の前は、予知保全の大学教授および研究科学者でした。 余暇には、バイクに乗ったり、オートバイの DIY メカニックを楽しんでいます。

ズナコ・アラフマンZmnako Awrahman 博士、 は、アマゾン ウェブ サービスのプラクティス マネージャー、ML SME、および Machine Learning Technical Field Community (TFC) のメンバーです。 彼は、顧客がクラウドの力を活用して、データ分析と機械学習を使用してデータから価値を引き出すのを支援しています。

スニタ・ナダンパリスニタ・ナダンパリ AWS のソフトウェア開発マネージャーです。 彼女は、機械学習、HPC、およびマルチメディア ワークロードの Graviton ソフトウェア パフォーマンスの最適化をリードしています。 彼女は、オープンソース開発と、Arm SoC を使用した費用対効果の高いソフトウェア ソリューションの提供に情熱を注いでいます。

ジョナ・リュージョナ・リュー Amazon SageMaker チームのソフトウェア開発エンジニアです。 彼女の現在の仕事は、開発者が機械学習モデルを効率的にホストし、推論パフォーマンスを向上させるのを支援することに重点を置いています。 彼女は、空間データ分析と AI を使用して社会問題を解決することに情熱を注いでいます。

アランタンアランタン SageMaker のシニア プロダクト マネージャーであり、大規模なモデルの推論に取り組んでいます。 彼は機械学習を分析の分野に適用することに情熱を注いでいます。 仕事以外では、アウトドアを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習