を使用してモデルをデプロイする TorchServe - Amazon SageMaker AI

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

を使用してモデルをデプロイする TorchServe

TorchServe は、 PyTorch 深層学習コンテナ () に AWS プリインストールされた PyTorch、 の推奨モデルサーバーですDLC。この強力なツールは、モデルのサイズやディストリビューションに関係なく、CPU、、NeuronGPU、Graviton など、さまざまな AWS インスタンスに複数の PyTorchモデルをデプロイする際に高いパフォーマンスを提供し、一貫性のあるユーザーフレンドリーなエクスペリエンスをお客様に提供します。

TorchServe は、動的バッチ処理、マイクロバッチ処理、モデル A/B テスト、ストリーミング、トーチ XLA、tensorRT、 ONNX など、さまざまな高度な機能をサポートしていますIPEX。さらに、 PyTorch大規模なモデルソリューションである P をシームレスに統合しiPPy、大規模なモデルを効率的に処理できます。さらに、 は Accelerate DeepSpeed、Fast Transformers などの一般的なオープンソースライブラリのサポート TorchServe を拡張し、その機能をさらに拡張します。を使用すると TorchServe、 AWS ユーザーはモデルを確実にデプロイして提供し、さまざまなハードウェア設定や PyTorch モデルタイプにわたってその汎用性と最適化されたパフォーマンスを活用できます。詳細については、「 PyTorchドキュメント」およびTorchServe GitHub「」を参照してください。

次の表は、 AWS PyTorch DLCs でサポートされている の一覧です TorchServe。

インスタンスタイプ SageMaker AI PyTorch DLC リンク

CPU および GPU

SageMaker AI PyTorch コンテナ

Neuron

PyTorch Neuron コンテナ

Graviton

SageMaker AI PyTorch Graviton コンテナ

以下のセクションでは、Amazon SageMaker AI で構築およびテスト PyTorch DLCsするためのセットアップについて説明します。

入門

開始するには、次の前提条件が整っていることを確認してください。

  1. AWS アカウントにアクセスできることを確認します。環境を設定して、 AWS CLI が ユーザーまたは AWS IAMIAMロールを介してアカウントにアクセスできるようにします。IAM ロールを使用することをお勧めします。個人アカウントでテストするために、次の管理アクセス許可ポリシーをIAMロールにアタッチできます。

  2. 次の例のように、依存関係をローカルに設定します。

    from datetime import datetime import os import json import logging import time # External Dependencies: import boto3 from botocore.exceptions import ClientError import sagemaker sess = boto3.Session() sm = sess.client("sagemaker") region = sess.region_name account = boto3.client("sts").get_caller_identity().get("Account") smsess = sagemaker.Session(boto_session=sess) role = sagemaker.get_execution_role() # Configuration: bucket_name = smsess.default_bucket() prefix = "torchserve" output_path = f"s3://{bucket_name}/{prefix}/models" print(f"account={account}, region={region}, role={role}")
  3. 次の例に示すように、イメージを取得します PyTorch DLC。

    SageMaker AI PyTorch DLC イメージはすべての AWS リージョンで利用できます。詳細については、DLCコンテナイメージのリストを参照してください。

    baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region="<region>", py_version="py310", image_scope="inference", version="2.0.1", instance_type="ml.g4dn.16xlarge", )
  4. ローカルワークスペースの作成

    mkdir -p workspace/

パッケージの追加

以下のセクションでは、DLCイメージにパッケージを追加およびプレインストールする PyTorch方法について説明します。

BYOC ユースケース

次の手順では、イメージに PyTorch DLCパッケージを追加する方法を説明します。コンテナのカスタマイズの詳細については、AWS 「深層学習コンテナのカスタムイメージの構築」を参照してください。

  1. PyTorch DLC Docker イメージにパッケージを追加したいとします。次の例に示すように、docker ディレクトリの下に Dockerfile を作成します。

    mkdir -p workspace/docker cat workspace/docker/Dockerfile ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries RUN pip install transformers==4.28.1
  2. 次の build_and_push.sh スクリプトを使用して、カスタマイズした Docker イメージをビルドして公開します。

    # Download script build_and_push.sh to workspace/docker ls workspace/docker build_and_push.sh Dockerfile # Build and publish your docker image reponame = "torchserve" versiontag = "demo-0.1" ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}

SageMaker AI プレインストールのユースケース

次の例は、コンテナにパッケージ PyTorch DLCをプリインストールする方法を示しています。requirements.txt ファイルはディレクトリ workspace/code の下にローカルに作成する必要があります。

mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1

モデルアーティファクトを作成する TorchServe

次の例では、事前トレーニング済みのMNISTモデルを使用します。TorchServe カスタムサービスの指示に従ってディレクトリ を作成しworkspace/mnistmnist_handler.py を実装し、model-config.yaml でモデルパラメータ (バッチサイズやワーカーなど) を設定します。次に、 TorchServe ツールを使用してモデルアーティファクトtorch-model-archiverを構築し、Amazon S3 にアップロードします。

  1. model-config.yaml でモデルパラメータを設定します。

    ls -al workspace/mnist-dev mnist.py mnist_handler.py mnist_cnn.pt model-config.yaml # config the model cat workspace/mnist-dev/model-config.yaml minWorkers: 1 maxWorkers: 1 batchSize: 4 maxBatchDelay: 200 responseTimeout: 300
  2. を使用してモデルアーティファクトを構築しますtorch-model-archiver

    torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgz

    パッケージをプリインストールする場合は、code ディレクトリを tar.gz ファイルに含める必要があります。

    cd workspace torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive cd mnist mv ../code . tar cvzf mnist.tar.gz .
  3. mnist.tar.gz を Amazon S3 にアップロードします。

    # upload mnist.tar.gz to S3 output_path = f"s3://{bucket_name}/{prefix}/models" aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz

単一モデルエンドポイントを使用した でのデプロイ TorchServe

次の例は、Amazon SageMaker Python SDKを使用して単一のモデルリアルタイム推論エンドポイントを作成し、モデルをエンドポイントにデプロイし、エンドポイントをテストする方法を示しています。

from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, predictor_cls = Predictor, name = "mnist", sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) predictor = model.deploy(instance_type='ml.g4dn.xlarge', initial_instance_count=1, endpoint_name = endpoint_name, serializer=JSONSerializer(), deserializer=JSONDeserializer()) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(dummy_data)

マルチモデルエンドポイントを使用した でのデプロイ TorchServe

マルチモデルエンドポイントは、1 つのエンドポイントの背後で多数のモデルをホスティングするためのスケーラブルで費用対効果の高いソリューションです。同じリソースのフリートとサービングコンテナを共有し、すべてのモデルをホストすることで、エンドポイントの使用率を向上させます。また、 SageMaker AI はモデルの動的なロードとアンロードを管理し、トラフィックパターンに基づいてリソースをスケーリングするため、デプロイのオーバーヘッドも削減されます。マルチモデルエンドポイントは、処理能力の高速化を必要とする深層学習や生成系 AI モデルに特に役立ちます。

SageMaker AI マルチモデルエンドポイント TorchServe で を使用すると、使い慣れたサービングスタックを使用しながら SageMaker 、AI マルチモデルエンドポイントが提供するリソース共有と簡易モデル管理を活用することで、開発を高速化できます。

次の例は、Amazon SageMaker Python SDKを使用して、マルチモデルエンドポイントを作成し、モデルをエンドポイントにデプロイし、エンドポイントをテストする方法を示しています。その他の詳細については、この「ノートブックサンプル」を参照してください。

from sagemaker.multidatamodel import MultiDataModel from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) mme = MultiDataModel( name = endpoint_name, model_data_prefix = output_path, model = model, sagemaker_session = smsess) mme.deploy( initial_instance_count = 1, instance_type = "ml.g4dn.xlarge", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer()) # list models list(mme.list_models()) # create mnist v2 model artifacts cp mnist.tar.gz mnistv2.tar.gz # add mnistv2 mme.add_model(mnistv2.tar.gz) # list models list(mme.list_models()) predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")

メトリクス

TorchServe は、システムレベルとモデルレベルの両方のメトリクスをサポートします。環境変数 TS_METRICS_MODE を介して、ログ形式モードまたは Prometheus モードのいずれかでメトリクスを有効にできます。 TorchServe 中央メトリクス設定ファイルを使用してmetrics.yaml、リクエスト数、レイテンシー、メモリ使用量、GPU使用率など、追跡するメトリクスのタイプを指定できます。このファイルを参照することで、デプロイされたモデルのパフォーマンスと状態に関するインサイトを取得し、 TorchServe サーバーの動作をリアルタイムで効果的にモニタリングできます。詳細については、TorchServe メトリクスのドキュメントを参照してください。

Amazon ログフィルターを使用して、StatsD 形式に似た TorchServe メトリクス CloudWatch ログにアクセスできます。 TorchServe メトリクスログの例を次に示します。

CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185 DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185