Amazon SageMaker Elastic Inference (EI) を使用する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SageMaker Elastic Inference (EI) を使用する

2023 年 4 月 15 日以降、 は新規顧客を Amazon Elastic Inference (EI) にオンボーディング AWS せず、現在の顧客がワークロードをより優れた価格とパフォーマンスを提供するオプションに移行するのに役立ちます。2023 年 4 月 15 日以降、新規のお客様は Amazon 、Amazon ECS SageMaker、または Amazon EC2 で Amazon EI アクセラレーターを使用してインスタンスを起動できなくなります。

の機械学習 (ML) AWS は、低コストの で利用できる最も包括的な ML サービスとインフラストラクチャのセットにより、より迅速なイノベーションを支援します。 pay as-you-go usage model. AWS は、ML 推論ワークロードのパフォーマンスが向上し、低コストのインフラストラクチャを継続的に提供します。 は 2018 年に Amazon Elastic Inference (EI) AWS を起動し、お客様が低コストの GPU を活用したアクセラレーションを Amazon EC2 にアタッチできるようにしました。 Amazon SageMaker インスタンス、 または Amazon Elastic Container Service (ECS) タスクを使用すると、Amazon EC2 P4d や Amazon EC2 G5 などのスタンドアロン GPU ベースのインスタンスと比較して、深層学習推論を実行するコストを最大 75% 削減できます。2019 年に、クラウドで高性能推論を提供することで深層学習ワークロードを加速するように設計された Amazon 初のカスタムシリコンである AWS Inferentia が AWS リリースされました。 AWS Inferentia チップに基づく Amazon EC2 Inf1 インスタンスは、同等の現行世代の GPU ベースの Amazon EC2 インスタンスと比較して、推論ごとに最大 2.3 倍高いスループットと最大 70% 低いコストを提供します。Inferentia や Amazon EC2 G5 AWS インスタンスなどの新しい高速コンピューティングオプションが利用可能になると、Amazon EI を使用して CPU ホストインスタンスに小数 GPU をアタッチする利点は減少しています。例えば、Amazon EI でモデルをホストしているお客様が ml.inf1.xlarge インスタンスに移行した場合、最大 56% のコスト削減と 2 倍のパフォーマンス向上を実現できます。

お客様は Amazon SageMaker Inference Recommender を使用して、ML モデルのデプロイに最適な Amazon EI 代替インスタンスを選択することができます。

よくある質問

  1. Amazon が、Amazon Elastic Inference (EI) から AWS Inferentia などの新しいハードウェアアクセラレーションオプションにワークロードを移動するように顧客に促しているのはなぜですか?

    推論ワークロード用の AWS Inferentia などの新しいハードウェアアクセラレーターオプションを使用すると、Amazon EI よりもはるかに優れた価格でパフォーマンスが得られます。 AWS Inferentia は、クラウドで高パフォーマンスの推論を提供し、推論の総コストを削減し、開発者が機械学習をビジネスアプリケーションに簡単に統合できるように設計されています。お客様がこのような新世代のハードウェアアクセラレータのメリットを享受できるようにするため、2023 年 4 月 15 日以降は 新規のお客様には Amazon EI へのオンボーディングは行いません。

  2. Amazon Elastic Inference (EI) への新規顧客のオンボーディングを停止する動きの影響を受ける AWS のはどのサービスですか?

    この発表は、Amazon EC2、Amazon インスタンス、または Amazon Elastic Container Service (ECS) タスクにアタッチされた Amazon EI アクセラレーターに影響します。 SageMaker Amazon では SageMaker、これは Amazon EI アクセラレーターを使用するエンドポイントとノートブックカーネルの両方に適用されます。

  3. 2023 年 4 月 15 日以降、新しい Amazon Elastic Inference (EI) アクセラレータを作成することはできますか。

    いいえ。新規のお客様で、過去 30 日間に Amazon EI を使用していない場合、2023 年 4 月 15 日以降、 AWS アカウントに新しい Amazon EI インスタンスを作成することはできません。ただし、過去 30 日間に Amazon EI アクセラレータを少なくとも 1 回使用したことがある場合は、新しい Amazon EI アクセラレータをインスタンスにアタッチできます。

  4. 現在の Amazon SageMaker Inference Endpoint の代替インスタンスオプションを評価するにはどうすればよいですか?

    Amazon SageMaker Inference Recommender は、既存のワークロードを Amazon Elastic Inference (EI) から でサポートされている適切な ML インスタンスに移行するための費用対効果の高いデプロイを特定するのに役立ちます SageMaker。

  5. Amazon の既存のエンドポイントのインスタンスタイプを変更するにはどうすればよいですか SageMaker?

    既存のエンドポイントのインスタンスタイプは、次の手順で変更できます。

    1. まず、新しいインスタンスタイプを使用する新しい を作成します EndpointConfig。オートスケーリングポリシーがある場合は、既存のオートスケーリングポリシーを削除します

    2. 新しく作成した を指定UpdateEndpointしながら を呼び出します EndpointConfig。

    3. エンドポイントのステータスが InService に変わるのを待ちます。これには約 10~15 分かかります。

    4. 最後に、新しいエンドポイントに自動スケーリングが必要な場合は、この新しいエンドポイントと に新しい自動スケーリングポリシーを作成します ProductionVariant。

  6. Amazon Elastic Inference (EI) を使用して既存の Amazon SageMaker Notebook Instance のインスタンスタイプを変更するにはどうすればよいですか?

    SageMaker コンソールでノートブックインスタンスを選択し、更新するノートブックインスタンスを選択します。ノートブックインスタンスに Stopped ステータスがあることを確認します。最後に、[編集] を選択してインスタンスタイプを変更できます。ノートブックインスタンスの起動時に、新しいインスタンスに適したカーネルを選択するようにしてください。

  7. Amazon Elastic Inference (EI) に代わる優れたインスタンスタイプはありますか。

    機械学習のワークロードはそれぞれ異なります。Amazon SageMaker Inference Recommender を使用して、ML ワークロード、パフォーマンス要件、予算に適したインスタンスタイプを特定することをお勧めします。AWS Inferentia、特に inf1.xlarge は、Amazon EI のお客様にとって最も高性能で低コストな代替手段です。

Amazon Elastic Inference から他のインスタンスへの移行

以下の情報は、Amazon Elastic Inference SageMakerアクセラレーターを使用するインスタンスから他のインスタンスに ホストエンドポイントを移行するのに役立ちます。アドバイスはフレームワークによって異なります。

PyTorch

から移行する場合は PyTorch、次のガイドラインを使用してください。

1. 適切なインスタンスタイプを選択する

機械学習のワークロードはそれぞれ異なります。Amazon SageMaker Inference Recommender を使用して、ML ワークロード、パフォーマンス要件、予算に適したインスタンスタイプを特定することをお勧めします。 AWS Inferentia、特に はinf1.xlarge、Amazon Elastic Inference のお客様にとって最高の高パフォーマンスと低コストの代替手段です。

Inference Recommender を使用した負荷テストでは、g4dn.xlarge インスタンスは eia.2large がアタッチされている m5.large インスタンスよりも高いパフォーマンスを実現していました。Amazon Elastic Inference では、アクセラレータがアタッチされている ML インスタンスの追加費用を支払う必要があります。Amazon Elastic Inference では、 PyTorch 1.5 と TensorFlow 2.3 のみがサポートされています。ml.g4dn インスタンスに移行する場合は、最新バージョンの PyTorch 1.11 および TensorFlow 2.9 を使用できます。さらに、 ml.g4dnと Inferentia AWS はすべての AWS リージョンで使用できますが、Amazon Elastic Inference は 6 つのリージョンでのみ使用できます。 AWS Inferentia および ml.g4dn はどちらも、ほとんどの ML 推論ワークロードで低価格で優れたパフォーマンスを提供します。

2. inference.py を変更する

Elastic Inference 固有の必須変更をすべて削除し、デフォルトのハンドラーを使用するように inference.py ファイルを変更します。ユーザーケースによっては、入力ハンドラーと出力ハンドラーが異なる場合がありますが、必要な主な変更は、モデル読み込みハンドラー関数 model_fnpredict_fn にあります。Elastic Inference 固有の予測ハンドラー predict_fn を削除し、モデル読み込みハンドラー model_fn をデフォルトの形式に戻します。次の例は、inference.py から削除すべき部分がコメントアウトされた状態で、これを行う方法を示しています。

from __future__ import print_function import os import torch import torch.nn as nn import torch.nn.functional as F import numpy as np def model_fn(model_dir, context): model = {customer_model} # if torch.__version__ in VERSIONS_USE_NEW_API: # import torcheia # loaded_model = loaded_model.eval() # loaded_model = torcheia.jit.attach_eia(loaded_model, 0) with open(os.path.join(model_dir, 'model.pth'), 'rb') as f: model.load_state_dict(torch.load(f)) return model # def predict_fn(input_data, model): # logger.info( # "Performing EIA inference with Torch JIT context with input of size {}".format( # input_data.shape # ) # ) # device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # input_data = input_data.to(device) # with torch.no_grad(): # if torch.__version__ in VERSIONS_USE_NEW_API: # import torcheia # # torch._C._jit_set_profiling_executor(False) # with torch.jit.optimized_execution(True): # return model.forward(input_data) # else: # with torch.jit.optimized_execution(True, {"target_device": "eia:0"}): # return model(input_data) def predict_fn(input_data, model): return model(input_data)

3. モデルを作成する

変更した inference.py ファイルを指定する新しいモデルを作成します。inference.py ファイルをローカルに保存し source_dir また entry_point を特定することによりそのファイルを指定する、もしくは inference.py ファイルを tar 化しモデル tarball にすることができます。次の例は、前者のケースを示しています。

from sagemaker.pytorch import PyTorchModel pytorch = PyTorchModel( model_data={model_data_url}, role=role, entry_point="inference.py", source_dir="code", framework_version="1.5.1", py_version="py3", sagemaker_session=sagemaker_session, )

4. モデルをエンドポイントにデプロイして呼び出す

前述の変更を行った後、以下のオプションのいずれかを使用してモデルをデプロイできます。

オプション 1: 最初からデプロイする

高速コンピューティングカテゴリの推奨インスタンス (G4 など) を使用して、モデルを新しいエンドポイントにデプロイできます。

predictor = pytorch.deploy( ... # instance_type = "ml.c5.xlarge", instance_type="ml.g4dn.2xlarge", ... response = predictor.predict(payload)

オプション 2: 既存のエンドポイントを更新する

既存のエンドポイントを更新するには、次のステップを実行します。

  1. CreateEndpointConfig を呼び出して、新しいインスタンスタイプを使用する新しい EndpointConfig を作成します。オートスケーリングポリシーがある場合は、既存のオートスケーリングポリシーを削除します。

    endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, # The name of new created model "InstanceType": instance_type, # Specify the right-sized instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ] )
  2. UpdateEndpoint を呼び出して、新しく作成した EndpointConfig を指定してください。

    endpoint_config_response = sagemaker_client.update_endpoint( EndpointConfigName=endpoint_config_name, # The name of the new endpoint config just created EndpointName=endpoint_name # The name of the existing endpoint you want to update )
  3. エンドポイントのステータスが InService に変わるのを待ちます。これには約 10~15 分かかります。

  4. 最後に、新しいエンドポイントにオートスケーリングが必要な場合は、新しいエンドポイントと ProductionVariant のための新しいオートスケーリングポリシーを作成してください。

TensorFlow

から移行する場合は TensorFlow、次のガイドラインを使用してください。

1. 適切なインスタンスタイプを選択する

1. PyTorch セクション で適切なインスタンスタイプのガイダンスを選択します。

2. モデルをエンドポイントにデプロイして呼び出す

モデルのデプロイには、次のオプションのいずれかを使用できます。

オプション 1: 最初からデプロイする

Elastic Inference から移行するには、accelerator_type フィールドを削除し、高速コンピューティングカテゴリから適切なサイズのインスタンスタイプ (G4 など) を指定して、モデルを新しいエンドポイントに再デプロイします。次の例では、コメントアウトされた行により、Elastic Inference アクセラレータを使用せずにデプロイするようになっています。

predictor = tensorflow_model.deploy( ... instance_type="ml.g4dn.2xlarge" # instance_type="ml.c5.xlarge", # accelerator_type="ml.eia1.medium" ... )

オプション 2: 既存のエンドポイントを更新する

「オプション 2. PyTorch セクション のステップ 4 の既存のエンドポイントガイダンスを更新します。

MXNet

MXNet から移行する場合は、次のガイドラインを使用してください。

1. 適切なインスタンスタイプを選択する

1. PyTorch セクション で適切なインスタンスタイプのガイダンスを選択します。

2. モデルをエンドポイントにデプロイして呼び出す

モデルのデプロイには、次のオプションのいずれかを使用できます。

オプション 1: 最初からデプロイする

Elastic Inference から移行するには、accelerator_type フィールドを削除し、高速コンピューティングカテゴリから適切なサイズのインスタンスタイプ (G4 など) を指定して、モデルを新しいエンドポイントに再デプロイします。次の例では、コメントアウトされた行により、Elastic Inference アクセラレータを使用せずにデプロイするようになっています。

predictor = mxnet_model.deploy( ... # instance_type="ml.c5.xlarge", instance_type="ml.g4dn.2xlarge" ... )

オプション 2: 既存のエンドポイントを更新する

PyTorch 「」セクションのステップ 4 の「オプション 2: 既存のエンドポイントガイダンスを更新する」を参照してください。

EI アクセラレータータイプを選択する

ホストされるモデルのアクセラレータータイプを選択するときには、以下の要素を考慮してください。

  • モデル、入力テンソル、およびバッチサイズは、必要なアクセラレーターメモリの量に影響します。トレーニング済みモデルのファイルサイズと同量以上のメモリを提供するアクセラレータータイプから始めます。モデルがランタイムにファイルサイズよりも大幅に多くのメモリを使用する可能性があるという要因。

  • CPU コンピューティングリソース、メインシステムメモリ、GPU ベースのアクセラレーションおよびアクセラレーターメモリの需要は、深層学習モデルの種類によって大きく異なります。アプリケーションのレイテンシーとスループットの要件によって、必要なコンピューティングとアクセラレーションの量も決まります。アプリケーションのパフォーマンスニーズに最も適した構成を選択できるように、インスタンスタイプと EI アクセラレーターサイズのさまざまな構成を徹底的にテストしてください。

EI アクセラレータ選択の詳細については、次を参照してください。

ノートブックインスタンスで SageMaker EI を使用する

通常、本番環境にデプロイする前に、 SageMaker ノートブックで機械学習モデルを構築してテストします。ノートブックインスタンスを作成するときに、ノートブックインスタンスに EI をアタッチすることができます。Amazon SageMaker Python SDK の TensorFlow、MXNet 、 PyTorch および推定器とモデルでサポートされているローカルモードを使用して、ノートブックインスタンスでローカルにホストされるエンドポイントをセットアップして、推論パフォーマンスをテストできます。Elastic Inference が有効になっている PyTorch は、現在ノートブックインスタンスではサポートされていません。ノートブックインスタンスに EI をアタッチし、推論のためにローカルエンドポイントを設定する方法については、EI をノートブックインスタンスにアタッチするを参照してください。および Apache MXNet の Elastic Inference 対応バージョンには、Elastic Inference 対応の SageMaker Notebook Jupyter TensorFlow カーネルもあります。 SageMaker ノートブックインスタンスの使用の詳細については、「Amazon SageMaker Notebook インスタンスの使用」を参照してください。

ホストされるエンドポイントで EI を使用する

モデルを本番環境にデプロイして推論を提供する準備ができたら、 SageMaker ホストされたエンドポイントを作成します。エンドポイントがホストされているインスタンスに EI をアタッチすると、推論を提供する際のパフォーマンスを向上させることができます。ホストされるエンドポイントインスタンスに EI をアタッチする方法については、Amazon SageMaker ホストエンドポイントで EI を使用するを参照してください。

EI をサポートするフレームワーク

Amazon Elastic Inference は、、Apache MXNet TensorFlow、または PyTorch 機械学習フレームワークの AWS 拡張バージョンで使用するように設計されています。これらの拡張バージョンのフレームワークは、Amazon SageMaker Python SDK を使用するときに自動的にコンテナに組み込まれます。または、バイナリファイルとしてダウンロードして独自の Docker コンテナにインポートできます。

EI 対応 TensorFlow バイナリファイルは、パブリック amazonei-tensorflow Amazon S3 バケットから TensorFlow サービングコンテナにダウンロードできます。の EI 対応バージョンを使用するコンテナの構築の詳細については TensorFlow、「」の「Amazon Elastic Inference TensorFlow with SageMaker」を参照してください。

パブリック amazonei-apachemxnet Amazon S3 バケットから MXNet サービスコンテナに、EI 対応 MXNet バイナリファイルをダウンロードできます。MXNet の EI 対応バージョンを使用するコンテナの構築の詳細については、「」のMXNet を使用した Amazon Elastic Inference SageMaker」を参照してください。

Elastic Inference 対応バイナリを PyTorchダウンロードできます。の EI 対応バージョンを使用するコンテナの構築の詳細については PyTorch、「」の「Amazon Elastic Inference PyTorch with SageMaker」を参照してください。

ホストされたエンドポイントで Elastic Inference を使うために、必要に応じて次のフレームワークのいずれかを選択できます。

複雑なモデルをデプロイするためのカスタムコンテナを作成し、 SageMaker 構築済みのコンテナがサポートしていないフレームワークへの拡張が必要な場合は、低レベルの AWS SDK for Python (Boto 3) を使用します。

SageMaker 組み込みアルゴリズムで EI を使用する

組み込みアルゴリズムである画像分類 - MXNetオブジェクト検出 - MXNetは現在、EI をサポートしています。EI でイメージ分類アルゴリズムを使用する例については、「エンドツーエンドの複数クラスイメージ分類のサンプル」を参照してください。

EI サンプルノートブック

次のサンプルノートブックは、 で EI を使用する例を示しています SageMaker。