本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 5:将模型部署到亚马逊 EC2
要获得预测结果,请使用亚马逊将您的模型部署到 Amazon EC2 SageMaker。
将模型部署到SageMaker托管服务
要使用 Amazon EC2 托管模型,请创建并运行训练作业通过调用xgb_model
估算器的deploy
方法来部署训练过的模型。SageMaker调用该deploy
方法时,必须指定要用于托管终端节点的 EC2 ML 实例的数量和类型。
import sagemaker from sagemaker.serializers import CSVSerializer xgb_predictor=xgb_model.deploy( initial_instance_count=1, instance_type='ml.t2.medium', serializer=CSVSerializer() )
-
initial_instance_count
(int)-部署模型的实例数量。 -
instance_type
(str)-您想要运行已部署模型的实例类型。 -
serializer
(int)-将各种格式(NumPy数组、列表、文件或缓冲区)的输入数据序列化为 CSV 格式的字符串。我们之所以使用它,是因为 XGBoost 算法接受 CSV 格式的输入文件。
该deploy
方法创建可部署模型,配置SageMaker托管服务端点,然后启动端点来托管该模型。有关更多信息,请参阅亚马逊 SageMaker Python 软件开发工具包deploy
方法生成的端点的名称,请运行以下代码:
xgb_predictor.endpoint_name
这应该返回的端点名称xgb_predictor
。端点名称的格式为"sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS"
。此端点在 ML 实例中保持活动状态,除非您稍后将其关闭,否则您可以随时进行即时预测。复制此端点名称并将其保存以供重复使用,并在 SageMaker Studio 或SageMaker笔记本实例的其他地方进行实时预测。
提示
要了解有关编译和优化模型以部署到 Amazon EC2 实例或边缘设备的更多信息,请参阅使用 Neo 编译和部署模型。
(可选)使用SageMaker预测器重用托管端点
将模型部署到终端后,您可以通过配对端点来设置新的SageMaker预测变量,并在任何其他笔记本中持续进行实时预测。以下示例代码显示如何使用 SageMaker Predictor 类使用相同的端点设置新的预测变量对象。重复使用您使用的终端节点名称。xgb_predictor
import sagemaker xgb_predictor_reuse=sagemaker.predictor.Predictor( endpoint_name="
sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS
", sagemaker_session=sagemaker.Session(), serializer=sagemaker.serializers.CSVSerializer() )
xgb_predictor_reuse
预测器的行为与原始预测器完全相同。xgb_predictor
有关更多信息,请参阅亚马逊 SageMaker Python 软件开发工具包
(可选)使用批量转换进行预测
您可以运行一次性批量推理作业,使用批量转换对测试数据集进行预测,而不是在生产中SageMaker托管端点。模型训练完成后,您可以将估计器扩展到基于 Transformer 类的transformer
SageMaker对象。
运行批量转换作业
运行以下代码将测试数据集的要素列转换为 CSV 文件并上传到 S3 存储桶:
X_test.to_csv('test.csv', index=False, header=False) boto3.Session().resource('s3').Bucket(bucket).Object( os.path.join(prefix, 'test/test.csv')).upload_file('test.csv')
为批量转换作业指定输入和输出的 S3 存储桶 URI,如下所示:
# The location of the test dataset batch_input = 's3://{}/{}/test'.format(bucket, prefix) # The location to store the results of the batch transform job batch_output = 's3://{}/{}/batch-prediction'.format(bucket, prefix)
创建一个指定最小参数数量的转换器对象:用于运行批量转换作业的
instance_count
和instance_type
参数,以及用于保存预测数据的变换器对象,如下所示:output_path
transformer = xgb_model.transformer( instance_count=1, instance_type='ml.m4.xlarge', output_path=batch_output )
通过执行
transformer
对象的transform()
方法来启动批量转换作业,如下所示:transformer.transform( data=batch_input, data_type='S3Prefix', content_type='text/csv', split_type='Line' ) transformer.wait()
批量转换作业完成后,SageMaker创建保存在
batch_output
路径中的test.csv.out
预测数据,该数据应采用以下格式:s3://sagemaker-<region>-111122223333/demo-sagemaker-xgboost-adult-income-prediction/batch-prediction
。运行以下Amazon CLI命令下载批量转换作业的输出数据:! aws s3 cp {batch_output} ./ --recursive
这应该在当前工作目录下创建
test.csv.out
文件。您将能够看到基于 XGBoost 训练作业的逻辑回归预测的浮点值。