本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在生成的容器中配置推理输出
Autopilot 生成一个有序 ContainerDefinition
列表。这可用于构建模型以部署在机器学习管道中。此模型可用于在线托管和推理。
客户可以使用列出推理容器ListCandidateForAutoMLJob
API定义。表示最佳候选模型的推理容器定义列表也在 DescribeAutoMLJob
响应中提供。
回归和分类问题类型的推理容器定义
Autopilot 会生成特定于训练模式和作业问题类型的推理容器。
超参数优化 (HPO) 模式的容器定义
-
回归:HPO生成两个容器:
-
一个是特征工程容器,它将原始特征转换为回归算法用来进行训练的特征。
-
另一个是算法容器,它转换特征并为数据集生成回归分数。
-
-
分类:HPO生成三个容器:
-
一个是特征工程容器,它将原始特征转换为分类算法用来进行训练的特征。
-
一个是算法容器,它生成具有最高概率的
predicted_label
。此容器还可以生成与推理响应中分类结果关联的各种概率。 -
一个是特征工程容器,用于对算法预测进行后处理。例如,它可以对预测的标签执行逆变换,然后将其更改为原始标签。
-
组合模式的容器定义
在组合模式下,回归和分类问题类型都只有一个推理容器。此推理容器会转换特征并根据问题类型生成预测。
每种问题类型的推理响应
分类模型的推理响应
对于分类推理容器,您可以使用四个预定义的键来选择推理响应的内容:
-
predicted_label
:预测正确标签的可能性最高的标签,由 Autopilot 确定。 -
probability
:-
HPO模型:该
True
类进行二元分类的概率。predicted_label
的多元分类的概率。 -
组装模型:
predicted_label
的二元分类和多元分类的概率。
-
-
probabilities
:所有相应类的概率列表。 -
labels
:所有标签的列表。
例如,对于二元分类问题,如果您传递了推理响应键 ['predicted_label', 'probability', 'probabilities', 'labels']
并且输出响应显示为 [1, 0.1, "[0.9, 0.1]", "['1', '0']"]
,则应将其解释如下:
-
predicted_label
等于1
,因为标签“1”的概率更高(在本例中为0.9
)。 -
对于HPO模型,
probability
等于0.1
Autopilot 选择的positive_class
(在本例0
中)的概率。对于组合模型,
probability
等于0.9
,这是predicted_label
的概率。 -
probabilities
列出了labels
中每个标签的probability
。 -
labels
是数据集中的唯一标签,其中第二个标签(在本例中为“0”)是 Autopilot 选择的positive_class
。
默认情况下,推理容器配置为仅由 predicted_label
生成。要选择其他推理内容,您可以更新 inference_response_keys
参数以包含最多以下三个环境变量:
-
SAGEMAKER_INFERENCE_SUPPORTED
:设置此项是为了提示您每个容器支持哪些内容。 -
SAGEMAKER_INFERENCE_INPUT
:此项应设置为容器在输入负载中需要的键。 -
SAGEMAKER_INFERENCE_OUTPUT
:此项应填充为容器输出的一组键。
模式下分类模型的推理响应 HPO
本节介绍如何使用超参数优化 (HPO) 模式配置来自分类模型的推理响应。
要在HPO模式下选择推理响应内容,请执行以下操作:将SAGEMAKER_INFERENCE_INPUT
和SAGEMAKER_INFERENCE_OUTPUT
变量添加到分类问题HPO模式下生成的第二个和第三个容器中。
第二个容器(算法)支持的键是 predicted_label、probability 和 probabilities。请注意,有意不将 labels
添加到 SAGEMAKER_INFERENCE_SUPPORTED
中。
第三个分类模型容器支持的键是 predicted_label
、labels
、probability
和 probabilities
。因此,SAGEMAKER_INFERENCE_SUPPORTED
环境包含这些键的名称。
要更新用于接收 predicted_label
和 probability
的推理容器的定义,请使用以下代码示例。
containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
以下代码示例更新用于接收 predicted_label
、probabilities
和 labels
的推理容器的定义。请不要将 labels
传递到第二个容器(算法容器),因为它由第三个容器独立生成。
containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probabilities,labels'})
以下可折叠部分提供了 Python AWS SDK for Python (Boto3) 和用于 Python SageMaker SDK 的代码示例。每个部分都展示了如何在相应代码示例的HPO模式下选择推理响应的内容。
import boto3 sm_client = boto3.client('sagemaker', region_name='
<Region>
') role = '<IAM role>
' input_data = '<S3 input uri>
' output_path = '<S3 output uri>
' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>
')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName
'] best_candidate_containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) # create model reponse = sm_client.create_model( ModelName = '<Model Name>
', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>
', ModelName='<Model Name>
', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix
', 'S3Uri':input_data
} }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath':output_path
, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge
', 'InstanceCount': 1, }, )
from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='
<AutoML Job Name>
') aml_best_model = aml.create_model(name='<Model Name>
', candidate=None, inference_response_keys**=['probabilities', 'labels']) aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge
', instance_count=1,) aml_transformer.transform('<S3 input uri>
', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>
', wait=True)
组合模式下分类模型的推理响应
此部分介绍如何使用组合模式,配置来自分类模型的推理响应。
在组合模式下,要选择推理响应的内容,请更新 SAGEMAKER_INFERENCE_OUTPUT
环境变量。
分类模型容器支持的键是 predicted_label
、labels
、probability
和 probabilities
。这些键包含在 SAGEMAKER_INFERENCE_SUPPORTED
环境中。
要更新推理容器定义以接收 predicted_label
和 probability
,请参阅以下代码示例。
containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
以下可折叠部分提供的代码示例,可用于在组合模式下选择推理响应内容。该示例使用 AWS SDK for Python (Boto3)。
import boto3 sm_client = boto3.client('sagemaker', region_name='
<Region>
') role = '<IAM role>
' input_data = '<S3 input uri>
' output_path = '<S3 output uri>
' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>
')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName
'] *best_candidate_containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) * # create model reponse = sm_client.create_model( ModelName = '<Model Name>
', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>
', ModelName='<Model Name>
', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix
', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge
', 'InstanceCount': 1, }, )
以下可折叠部分提供的代码示例与 for Python SageMaker SDK 的HPO示例相同。提供此示例是为了便于您参考。
以下HPO代码示例用 SageMaker SDK于 Python。
from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, *inference_response_keys**=['probabilities', 'labels'])* aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)