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

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

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

你必须满足先决条件部分是否使用编译模型Amazon SDK for Python (Boto3)、Amazon CLI,或者亚马逊 SageMaker 控制台。按照以下使用案例之一部署编译的模型 SageMaker Neo 取决于你编译模型的方式。

如果你使用 SageMaker 开发工具包

这些区域有:SageMaker.模型已编译模型的对象句柄提供部署 ()函数,这允许您创建终端节点来服务推理请求。使用该函数,您可以设置用于终端节点的实例的数量和类型。您必须选择已经为其编译了模型的实例。例如,在中的编译的作业编译模型(亚马逊) SageMaker SDK)部分,这是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 下的 deploy () API 进行部署。对于 MxNet 来说,它是MxNet 模型而对于 PyTorch 来说,这是Pytorch 模型. 当你创建和部署 SageMaker 模型,你必须设置MMS_DEFAULT_RESPONSE_TIMEOUT环境变量500然后指定entry_point参数作为推理脚本 (inference.py) 和source_dir参数作为目录位置 (code) 推理脚本。准备推理脚本 (inference.py) 按照先决条件步骤操作。

以下示例演示如何使用 SageMaker 适用于 Python 的 SDK:

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 角色。

如果你使用 Boto3 编译模型, SageMaker 控制台或 TensorFlow 的 CLI

构造TensorFlowModel对象,然后调用 deploy:

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 TFX 页面.