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