如何将经过训练的模型从模型注册表加载到 SageMaker 管道中以进行推理?

问题描述 投票:0回答:1

我正在关注 aws-samples 存储库中的 SageMaker Pipelines 笔记本。在本笔记本的底部,有一个“批量转换”部分,它执行我需要执行的任务,即对来自 SageMaker 管道的数据集运行推理。我的问题是,我试图通过加载模型注册表中的模型来替换训练步骤,并在管道中进行训练。

这是我想要替换的单元格来加载模型,而不是从训练步骤中获取模型:

# First, create a SageMaker model for the transform
model = Model(
    image_uri=xgboost_image_uri,        
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    name=f"from-idea-to-prod-xgboost-model",
    sagemaker_session=session,
    role=sm_role,
)

'''
Insert load model from Model Registry
'''

# Define create model step
step_create_model = ModelStep(
    name=f"{pipeline_name}-model",
    step_args=model.create(instance_type="ml.m5.large", accelerator_type="ml.eia1.medium"),
)

请告诉我这是否可能,或者我采取了错误的方法。这里的要求是能够通过 lambda 函数触发此推理管道。

我尝试从模型包arn中执行ModelStep甚至CreateModelStep,但没有任何运气。

amazon-sagemaker
1个回答
0
投票

您的管道中是否有训练步骤,然后您是否注册此经过训练的模型,然后部署用于批量推理?您可以首先使用经过训练的模型工件执行 CreateModel 步骤,然后执行此步骤及其元数据并注册它

model = Model(
    image_uri=image_uri,
    model_data=training_step.properties.ModelArtifacts.S3ModelArtifacts,
    role=role,
    sagemaker_session=pipeline_session
)

create_model_step = ModelStep(
    name="CreateXGBoostModel",
    step_args=model.create(),
)

# registering model object
from sagemaker.workflow.step_collections import RegisterModel
register_step = RegisterModel(
 name="AbaloneRegisterModel",
 model=model,
 content_types=["text/csv"],
 response_types=["text/csv"],
 inference_instances=["ml.t2.medium", "ml.m5.xlarge"],
 transform_instances=["ml.m5.xlarge"],
 model_package_group_name='batchgroup',
)

然后您可以创建模型元数据并运行批量推理:

from sagemaker.workflow.pipeline_context import PipelineSession

from sagemaker.transformer import Transformer
from sagemaker.inputs import TransformInput
from sagemaker.workflow.steps import TransformStep

transformer = Transformer(model_name=create_model_step.properties.ModelName,
                          instance_count=1, instance_type=batch_transform_param, 
                          assemble_with="Line", accept="text/csv", 
                          sagemaker_session=PipelineSession())

transform_step = TransformStep(
    name="AbaloneTransform",
    step_args=transformer.transform(data=test_data_param, 
                                    content_type = "text/csv"),
)

有关整个端到端示例,请参考以下 Github:https://github.com/RamVegiraju/sagemaker-pipelines-examples/blob/master/train-batch-transform/pipelines-train-transform.ipynb

© www.soinside.com 2019 - 2024. All rights reserved.