如何在本地创建SageMaker PipelineModel并运行批量转换任务
SageMaker PipelineModel本地运行批量转换任务说明及报错解决方案
可以创建SageMaker PipelineModel并在本地运行批量转换任务,你遇到的TypeError: create_model() missing 1 required positional argument: 'PrimaryContainer'报错,是本地模式的SageMaker SDK参数校验逻辑和PipelineModel默认配置不匹配导致的。本地模式下的create_model接口强制要求传入PrimaryContainer参数,但PipelineModel默认生成的模型创建请求只携带Containers参数,未填充PrimaryContainer字段,因此触发参数缺失报错。
修复步骤
- 每个子PyTorchModel需要显式绑定本地会话与执行角色,确保容器配置可以被正常生成
- 提前构造子模型的容器定义,显式为PipelineModel指定
primary_container参数,参数值为pipeline顺序中第一个模型的容器定义 - 剩余所有模型的容器定义按pipeline执行顺序传入
containers参数 - 本地路径需要添加
file://前缀,供本地Docker容器识别挂载
修复后代码示例
from sagemaker.local import LocalSession from sagemaker.pytorch import PyTorchModel from sagemaker.pipeline import PipelineModel sagemaker_session = LocalSession() sagemaker_session.config = {'local': {'local_code': True}} # 本地模式下role仅需要符合ARN格式即可,无需真实存在 role = "arn:aws:iam::123456789012:role/SageMakerLocalExecutionRole" # 子模型显式绑定session和role model_1 = PyTorchModel( model_data="file:///path/to/your/model1.tar.gz", entry_point="infer_model1.py", role=role, sagemaker_session=sagemaker_session, framework_version="1.13.1", py_version="py39" ) model_2 = PyTorchModel( model_data="file:///path/to/your/model2.tar.gz", entry_point="infer_model2.py", role=role, sagemaker_session=sagemaker_session, framework_version="1.13.1", py_version="py39" ) # 预生成子模型的容器定义 container_1 = model_1.prepare_container_def(instance_type="local") container_2 = model_2.prepare_container_def(instance_type="local") # 显式传入primary_container和containers参数 pipeline_model = PipelineModel( models=[model_1, model_2], role=role, sagemaker_session=sagemaker_session, primary_container=container_1, containers=[container_1, container_2] ) # 初始化Transformer运行批量转换 transformer = pipeline_model.transformer( instance_count=1, instance_type="local", output_path="file:///path/to/your/local/output_dir" ) transformer.transform(data="file:///path/to/your/local/input_data_dir") transformer.wait()
注意事项
- 所有推理代码、模型文件、输入输出目录都需要放在当前工作目录或者可被Docker挂载的本地路径下
- 如使用自定义推理镜像,需要提前在本地环境完成镜像构建或拉取,避免容器启动失败
- 本地模式下不需要连接AWS公有云,所有执行逻辑都在本地Docker容器中运行
内容的提问来源于stack exchange,提问作者Dao Kieu Vi
相关产品推荐
相关产品推荐

