You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS SageMaker部署TF2.1模型后Ping健康检查失败问题排查

解决SageMaker TF Serving端点/批量转换无法通过健康检查的问题

这个问题我之前也碰到过,核心原因就是SageMaker的TensorFlow Serving容器对模型打包结构有严格规范,再加上代码里没指定正确的模型名称,导致容器找不到要加载的模型。

问题根源

从CloudWatch的错误日志 Could not find any versions of model None 就能直接定位:SageMaker的TF Serving容器在尝试加载一个名为None的模型,但你的模型打包结构或者代码配置没提供正确的模型名称。

SageMaker TF Serving容器要求模型包的结构必须是双层目录:

model.tar.gz
└── {MODEL_NAME}  # 自定义的模型名称,比如my_model
    └── {VERSION_NUMBER}  # 必须是整数版本号,比如1
        ├── saved_model.pb
        ├── assets/
        └── variables/

你大概率是直接把saved_model.pb、assets、variables放在了model.tar.gz的根目录,或者代码里没指定model_name参数,容器默认用None作为模型名称去查找,自然找不到对应的模型文件。

至于本地测试正常,是因为你可能直接给TF Serving指定了包含saved_model.pb的目录,不需要额外的层级结构,但SageMaker容器有自己的运行规范,必须遵循这个目录要求。

解决方案

1. 重新打包模型

先调整模型的文件夹结构:

  • 创建一个自定义名称的文件夹(比如my_model)
  • 在这个文件夹下创建一个整数命名的版本文件夹(比如1)
  • 把saved_model.pb、assets、variables全部移动到版本文件夹里

最终结构应该是:

my_model/
└── 1/
    ├── saved_model.pb
    ├── assets/
    └── variables/

然后重新打包成model.tar.gz:

tar -czvf model.tar.gz my_model/

2. 修改代码,指定模型名称

在创建Model对象时,添加model_name参数,值要和你刚才打包的顶级文件夹名称完全一致(比如my_model):

实时端点代码修改:

tensorflow_serving_model = Model(
    model_data=model_data, 
    role=role, 
    sagemaker_session=sagemaker_session, 
    image=image, 
    framework_version='2.1',
    model_name='my_model'  # 新增这一行,和tar包里的顶级文件夹名匹配
)

批量转换代码修改:

tensorflow_serving_model = Model(
    model_data=model_data, 
    role=role, 
    sagemaker_session=sagemaker_session, 
    image=image, 
    name='deep-net-0', 
    framework_version='2.1',
    model_name='my_model'  # 新增这一行
)

3. 重新部署任务

上传修改后的model.tar.gz到S3,再重新运行部署端点或批量转换的代码,这时SageMaker容器就能正确识别并加载模型,顺利通过健康检查了。

内容的提问来源于stack exchange,提问作者Doctor_Fu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:17:52