本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用部署模型 TorchServe
TorchServe 是推荐的服务器模型 PyTorch,已预先安装在 Amazon PyTorch 深度学习容器中 (DLC)。这款强大的工具为客户提供一致且用户友好的体验,无论模型大小或分布如何,都能在各种 Amazon 实例上部署多个 PyTorch模型,包括CPU、GPU、Neuron 和 Graviton,都能提供高性能。
TorchServe 支持各种高级功能,包括动态批处理、微批处理、模型 A/B 测试、流媒体、torch XLA、TensorRT 和。ONNX IPEX此外,它还无缝集成 PyTorch了大型模型解决方案PiPPy,从而可以高效处理大型模型。此外,还将其支持 TorchServe 扩展到流行的开源库 DeepSpeed,例如 Accelerate、Fast Transformers 等,进一步扩展了其功能。借 TorchServe助, Amazon 用户可以放心地部署和提供其 PyTorch 模型,充分利用其多功能性和针对各种硬件配置和模型类型的优化性能。有关更多详细信息,您可以参考PyTorch文档TorchServe
下表列出了所 Amazon PyTorch DLCs支持的 TorchServe。
实例类型 | SageMaker PyTorch DLC链接 |
---|---|
CPU和 GPU |
|
Neuron |
|
Graviton |
以下各节描述了在 Amazon PyTorch DLCs 上进行构建和测试的设置 SageMaker。
开始使用
要开始部署,请确保您具备以下先决条件:
-
确保您有权访问 Amazon 账户。设置您的环境,以便 Amazon CLI 可以通过 Amazon IAM用户或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图片在所有 Amazon 地区都可用。有关更多信息,请参阅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/
添加软件包
以下各节介绍如何在 PyTorchDLC映像中添加和预安装软件包。
BYOC用例
以下步骤概述了如何向 PyTorch DLC图像添加软件包。有关自定义容器的更多信息,请参阅构建 Dee Amazon p Learning Containers 自定义镜像
-
假设你想在 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
以下示例向您展示如何使用 A maz SageMaker on 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 管理动态加载和卸载模型,并根据流量模式扩展资源。多模型端点对于需要加速计算能力的深度学习和生成式人工智能模型特别有用。
通过 TorchServe 在 SageMaker 多模型端点上使用,您可以使用熟悉的服务堆栈来加快开发速度,同时利用 SageMaker 多模型端点提供的资源共享和简化的模型管理。
以下示例向您展示如何使用 Amaz SageMaker on 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