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

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

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

TorchServe は の推奨モデルサーバーであり PyTorch、 PyTorch Deep Learning Container () に AWS プリインストールされていますDLC。この強力なツールは、モデルサイズやディストリビューションに関係なく、CPU、、GPUNeuron、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 PyTorch DLC リンク

CPU および GPU

SageMaker PyTorch コンテナ

Neuron

PyTorch Neuron コンテナ

Graviton

SageMaker PyTorch Graviton コンテナ

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

使用開始

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

  1. AWS アカウントにアクセスできることを確認します。環境を設定して、 AWS CLI がユーザーまたはIAMロールを介して AWS IAMアカウントにアクセスできるようにします。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 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. Docker イメージに PyTorch DLCパッケージを追加するとします。次の例に示すように、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 プレインストールのユースケース

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

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

モデルアーティファクトの作成 TorchServe

次の例では、事前トレーニング済みのMNISTモデル を使用します。ディレクトリ を作成しworkspace/mnistTorchServe カスタムサービス指示 に従って mnist_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 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 モデルに特に役立ちます。

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

次の例は、マルチモデルエンドポイントを作成し、そのエンドポイントにモデルをデプロイし、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 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