基于这里提供的aws文档/示例https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.html#Define-a-Transform-Step-to-Perform-Batch-Transformation,创建了一个模型,并可以在训练好的模型上运行批量转换推理。它适用于这个例子,但是如果我们需要一个自定义推理脚本,在我们运行批处理转换之前,我们如何在模型或模型包中包含一个自定义推理脚本呢?
from sagemaker.transformer import Transformer
from sagemaker.inputs import TransformInput
from sagemaker.workflow.steps import TransformStep
transformer = Transformer(
model_name=step_create_model.properties.ModelName,
instance_type="ml.m5.xlarge",
instance_count=1,
output_path=f"s3://{default_bucket}/AbaloneTransform",
)
step_transform = TransformStep(
name="AbaloneTransform", transformer=transformer, inputs=TransformInput(data=batch_data)
)
您需要一个">模型重新打包步骤"。
来自Amazon SageMaker工作流FAQ:
模型重新打包发生在管道需要包含自定义时待上传的模型压缩文件(model.tar.gz)中的脚本Amazon S3,用于将模型部署到SageMaker端点。当SageMaker管道训练模型并将其注册到模型中注册表中,如果训练过的模型输出来自培训任务需要包含一个自定义推理脚本。的重新打包步骤解压模型,添加一个新脚本,然后重新压缩模型。运行管道将重新打包步骤添加为培训工作。
基本上,您可以通过将训练输出称为model_data
并将推理脚本传递为entry_point
来重新定义sagemaker模型。
然后依次地,在训练模型之后,通过更改entry_point来重新定义模型,在后者上您可以使用转换器。
这是一个来自测试代码的示例流程:
my_model = Model(
image_uri=your_img_uri,
model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
role=role,
entry_point='inference_script.py',
name="your_inference_step_name"
)
step_create_model = ModelStep(
name="YourInfName",
step_args=my_model.create(instance_type="ml.m5.xlarge")
)
transformer = Transformer(
model_name=step_create_model.properties.ModelName,
instance_count=your_instance_count,
instance_type=your_instance_type,
output_path=your_path
)
当然,你可以直接使用最适合你需求的模型,而不是通用的模型(例如PyTorchModel等…)。