经过训练的模型本身只是一个 tar 文件,由模型权重组成,本身没有任何作用。要想让模型有用并获取预测,您需要部署模型。
在 Amazon SageMaker 中部署模型的方式有两种,具体取决于您希望如何生成推理:
- 要一次获得一个推理,请使用 Amazon SageMaker 托管服务设置永久性终端节点。
- 要获得整个数据集的推理,请使用 Amazon SageMaker 批量转换。
此实验室同时为您提供两个选项,供您选择最适合您的使用案例的方法。
在使用 Amazon SageMaker 托管服务的情况下,活动的 HTTPs 终端节点位于 Amazon EC2 实例上,您可以将有效负载传递到其中并获得推理。
当您部署模型时,您将调用 sagemaker.estimator.Estimator 对象的部署方法。当您调用部署方法时,您将指定希望用于托管终端节点的 ML 实例的数量和类型。
复制并粘贴以下代码,然后选择运行以部署模型。
部署方法可创建可部署的模型、配置 Amazon SageMaker 托管服务终端节点并启动终端节点来托管模型。
要对终端节点运行推理,您需要确保输入有效负载以训练模型可以读取的格式进行序列化,且推理输出已反序列化为人类可读的格式。在下面的代码中,您使用 csv_serializer 和 json_deserializer 将 CSV 格式的数据(作为向量)传递到模型中以生成 JSON 输出。
将以下代码复制并粘贴到代码单元格中,然后选择运行。
接下来,提取训练数据的主题向量,以稍后用于 K-NN 模型中。
将以下代码复制并粘贴到新的代码单元格中,然后选择运行。
predictions = []
for item in np.array(vectors.todense()):
np.shape(item)
results = ntm_predictor.predict(item)
predictions.append(np.array([prediction['topic_weights'] for prediction in results['predictions']]))
predictions = np.array([np.ndarray.flatten(x) for x in predictions])
topicvec = train_labels[newidx]
topicnames = [categories[x] for x in topicvec]
使用批量转换,您一次可以对一批数据运行推理。Amazon SageMaker 会创建必要的计算基础设施,并在批量作业完成时将其拆除。
批量转换代码将从主题模型中创建一个 sagemaker.transformer.Transformer 对象。然后,它将调用该对象的转换方法来创建转换作业。当您创建 sagemaker.transformer.Transformer 对象时,您可以指定将用于执行批量转换作业的实例数量和类型,您希望将推理存储到 Amazon S3 中的位置。
要将推理作业批量作业运行,请将以下代码复制并粘贴到代码单元格中,然后选择运行。
np.savetxt('trainvectors.csv',
vectors.todense(),
delimiter=',',
fmt='%i')
batch_prefix = '20newsgroups/batch'
train_s3 = sess.upload_data('trainvectors.csv',
bucket=bucket,
key_prefix='{}/train'.format(batch_prefix))
print(train_s3)
batch_output_path = 's3://{}/{}/test'.format(bucket, batch_prefix)
ntm_transformer = ntm.transformer(instance_count=1,
instance_type ='ml.m4.xlarge',
output_path=batch_output_path
)
ntm_transformer.transform(train_s3, content_type='text/csv', split_type='Line')
ntm_transformer.wait()
当转换作业完成后,您可以使用以下代码将输出下载回您的本地笔记本实例进行检查。
成功! 模型已将每个文档传送到 NUM_TOPICS 维度训练向量中。您现在可以探索主题模型。