本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 部署模型 TorchServe
TorchServe 是 的建議模型伺服器 PyTorch,預先安裝在 AWS PyTorch 深度學習容器 () 中DLC。此功能強大的工具為客戶提供一致且易於使用的體驗,無論模型大小或分佈為何,都能在跨各種 AWS 執行個體部署多個 PyTorch模型時提供高效能,包括 CPU、、GPUNeuron 和 Graviton。
TorchServe 支援各種進階功能,包括動態批次處理、微批次處理、模型 A/B 測試、串流、火XLA炬 、tensorRTONNX和 IPEX。此外,它無縫整合了 PyTorch的大型模型解決方案 P iPPy,可有效處理大型模型。此外,將其支援 TorchServe 延伸至常見的開放原始碼程式庫,例如 DeepSpeed、 Accelerate、 Fast Transformers 等,進一步擴展其功能。透過 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 深度學習容器自訂映像。
-
假設您想要將 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 預先安裝使用案例
下列範例示範如何將套件預先安裝至容器 PyTorch DLC。您必須在本機目錄 workspace/code
建立 requirements.txt
檔案。
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
如果要預先安裝套件,則必須在
tar.gz
檔案包含code
目錄。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
多模型端點提供可擴展且經濟實惠的解決方案,可在一個端點後面託管大量模型。它們透過共用相同的資源機群及服務容器來託管所有模型,進而提高端點使用率。它們也會降低部署負荷,因為 SageMaker 會管理動態載入和卸載模型,並根據流量模式擴展資源。對於需要加速運算能力的深度學習及生成式 AI 模型,多模型端點特別有用。
透過 TorchServe 在 SageMaker 多模型端點上使用 ,您可以使用您熟悉的服務堆疊來加速開發,同時利用 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