使用 SageMaker 软件开发工具包部署编译的模型 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 SageMaker 软件开发工具包部署编译的模型

您必须满足先决条件部分,如果模型是使用Amazon SDK for Python (Boto3)、Amazon CLI或 Amazon SageMaker 控制台。按照以下使用案例之一,根据您编译模型的方式部署使用 SageMaker Neo 编译的模型。

如果您使用 SageMaker SDK 编译了模型

这些区域有:萨格制造者模型对象句柄提供部署 ()函数,这使您可以创建终端节点来服务推理请求。使用该函数,您可以设置用于终端节点的实例的数量和类型。您必须选择已经为其编译了模型的实例。例如,在编译编译模型(Amazon SageMaker 开发工具包)部分,这是ml_c5.

predictor = compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.c5.4xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)

如果您使用 MxNet 或 PyTorch 编译模型

创建 SageMaker 模型并使用特定于框架的模型 API 下的部署 () API 进行部署。对于 MxNet,它是MXnet 模型对于 PyTorch 来说,它是火炬模型. 创建和部署 SageMaker 模型时,必须将MMS_DEFAULT_RESPONSE_TIMEOUT环境变量设置为500并指定entry_point参数作为推理脚本(inference.py)和source_dir参数作为目录位置 (code)推理脚本中的。准备推理脚本(inference.py)按照先决条件步骤进行操作。

以下示例说明如何使用适用于 Python 的 SageMaker 开发工具包部署已编译模型:

MXNet
from sagemaker.mxnet import MXNetModel # Create SageMaker model and deploy an endpoint sm_mxnet_compiled_model = MXNetModel( model_data='insert S3 path of compiled MXNet model archive', role='AmazonSageMaker-ExecutionRole', entry_point='inference.py', source_dir='code', framework_version='1.8.0', py_version='py3', image_uri='insert appropriate ECR Image URI for MXNet', env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'}, ) # Replace the example instance_type below to your preferred instance_type predictor = sm_mxnet_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)
PyTorch 1.4 and Older
from sagemaker.pytorch import PyTorchModel # Create SageMaker model and deploy an endpoint sm_pytorch_compiled_model = PyTorchModel( model_data='insert S3 path of compiled PyTorch model archive', role='AmazonSageMaker-ExecutionRole', entry_point='inference.py', source_dir='code', framework_version='1.4.0', py_version='py3', image_uri='insert appropriate ECR Image URI for PyTorch', env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'}, ) # Replace the example instance_type below to your preferred instance_type predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)
PyTorch 1.5 and Newer
from sagemaker.pytorch import PyTorchModel # Create SageMaker model and deploy an endpoint sm_pytorch_compiled_model = PyTorchModel( model_data='insert S3 path of compiled PyTorch model archive', role='AmazonSageMaker-ExecutionRole', entry_point='inference.py', source_dir='code', framework_version='1.5', py_version='py3', image_uri='insert appropriate ECR Image URI for PyTorch', ) # Replace the example instance_type below to your preferred instance_type predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)
注意

这些区域有:AmazonSageMakerFullAccessAmazonS3ReadOnlyAccess策略必须附加到AmazonSageMaker-ExecutionRoleIAM 角色。

如果您使用 Bto3、SageMaker 控制台或用于 TensorFlow 的 CLI 编译了模型

构造一个TensorFlowModel对象,然后调用部署:

role='AmazonSageMaker-ExecutionRole' model_path='S3 path for model file' framework_image='inference container arn' tf_model = TensorFlowModel(model_data=model_path, framework_version='1.15.3', role=role, image_uri=framework_image) instance_type='ml.c5.xlarge' predictor = tf_model.deploy(instance_type=instance_type, initial_instance_count=1)

请参阅直接从模型项目部署,了解更多信息。

您可以选择符合您需求的 Docker 映像 Amazon ECR URI此列表.

有关如何构建TensorFlowModel对象,请参阅SageMaker SDK.

注意

如果您在 GPU 上部署模型,则第一个推断请求可能会有很高的延迟。这是因为在第一个推断请求上创建了优化的计算内核。我们建议您创建推断请求的预热文件,并将其与模型文件一起存储,然后再将其发送到 TFX。这就是所谓的 “热身” 模型。

下面的代码段演示了如何在先决条件部分:

import tensorflow as tf from tensorflow_serving.apis import classification_pb2 from tensorflow_serving.apis import inference_pb2 from tensorflow_serving.apis import model_pb2 from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_log_pb2 from tensorflow_serving.apis import regression_pb2 import numpy as np with tf.python_io.TFRecordWriter("tf_serving_warmup_requests") as writer: img = np.random.uniform(0, 1, size=[224, 224, 3]).astype(np.float32) img = np.expand_dims(img, axis=0) test_data = np.repeat(img, 1, axis=0) request = predict_pb2.PredictRequest() request.model_spec.name = 'compiled_models' request.model_spec.signature_name = 'serving_default' request.inputs['Placeholder:0'].CopyFrom(tf.compat.v1.make_tensor_proto(test_data, shape=test_data.shape, dtype=tf.float32)) log = prediction_log_pb2.PredictionLog( predict_log=prediction_log_pb2.PredictLog(request=request)) writer.write(log.SerializeToString())

有关如何对模型进行 “预热” 的更多信息,请参阅模型的TensorFlow TFlow 页面.