SageMaker多模型端点自定义入口脚本未生效问题咨询
问题原因
SageMaker 多模型端点(MME)的运行逻辑与单模型端点不同:
- 单模型端点部署时会自动将你指定的
entry_point、source_dir注入到容器执行路径中,配置可正常生效 - MME是共享同一容器实例加载多个模型,不会为单个模型动态注入入口脚本,你配置在
TensorFlowModel实例上的入口参数在MME部署时会被直接忽略,因此出现自定义脚本未被引用的问题
解决方法
可根据你的业务场景二选一:
- 方案1:推理逻辑随模型包打包(适合不同模型推理逻辑不同的场景)
每个上传到model_data_prefix路径下的模型tar包,在根目录直接放入你的inference.py、requirements.txt文件,打包时不要套外层文件夹,确保解压后脚本直接在根目录。容器加载每个模型时会自动读取模型包内的inference.py作为执行入口,无需额外配置。 - 方案2:内置脚本到自定义容器(适合所有模型共用一套推理逻辑的场景)
自行构建适配MME的TensorFlow推理容器,将统一的推理脚本、依赖直接内置到容器的/opt/ml/model/code/路径下,部署MME时直接使用该自定义镜像即可,不需要每个模型单独打包脚本。
调整后的代码示例(方案1)
env = { 'SAGEMAKER_REQUIREMENTS': 'requirements.txt', # 对应模型包内的requirements路径 'CATEGORY': category } # 移除原有的entry_point、source_dir配置 model_1 = TensorFlowModel(model_data=model_loc, role=sagemaker_role, framework_version="2.2.0", env=env, sagemaker_session=sagemaker_session) mme = MultiDataModel(name='test-endpoint', model_data_prefix=model_prefix, model=model_1, sagemaker_session=sagemaker_session) predictor = mme.deploy(instance_type="ml.r5.xlarge", initial_instance_count=1 )
注意事项
- TensorFlow 2.x框架容器的MME模式默认要求推理脚本命名为
inference.py,不要修改文件名 - 你配置在
TensorFlowModel的env参数在MME模式下可正常生效,会被所有加载的模型共享
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

