翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用してモデルをデプロイする 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ドキュメント
次の表に、 AWS PyTorch DLCs でサポートされている を示します TorchServe。
インスタンスタイプ | SageMaker PyTorch DLC リンク |
---|---|
CPU および GPU |
|
Neuron |
|
Graviton |
以下のセクションでは、Amazon で構築およびテスト PyTorch DLCsするためのセットアップについて説明します SageMaker。
使用開始
開始するには、次の前提条件が整っていることを確認してください。
-
AWS アカウントにアクセスできることを確認します。環境を設定して、 AWS CLI がユーザーまたはIAMロールを介して AWS IAMアカウントにアクセスできるようにします。IAM ロールを使用することをお勧めします。個人アカウントでテストするために、次の管理アクセス許可ポリシーをIAMロールにアタッチできます。
-
次の例のように、依存関係をローカルに設定します。
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}")
-
次の例に示すように、イメージを取得します 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", ) -
ローカルワークスペースの作成
mkdir -p workspace/
パッケージの追加
以下のセクションでは、DLCイメージにパッケージを追加およびプレインストールする PyTorch方法について説明します。
BYOC ユースケース
次の手順では、イメージにパッケージを追加する方法の概要を示します PyTorch DLC。コンテナのカスタマイズの詳細については、AWS 「深層学習コンテナのカスタムイメージの構築
-
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
-
次の 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/mnist
、TorchServe カスタムサービス指示torch-model-archiver
を構築し、Amazon S3 にアップロードします。
-
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
-
を使用してモデルアーティファクトを構築します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 .
-
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