Sagemaker脚本模式部署报错:已实现model_fn仍提示需提供该实现
排查SageMaker脚本模式部署时「ClientError: Please provide a model_fn implementation.」错误
以下是几个关键排查点及修复方案:
1. 变量名拼写错误
你的笔记本代码中存在变量名不一致的问题:
# 定义的变量名为iestimator iestimator = SKLearnModel( entry_point='inference.py', source_dir='/home/ec2-user/SageMaker/my_path/src/', model_data='s3://my_bucket/my_key/output/model.tar.gz', role=role, py_version='py3' ) # 但调用部署时使用了未定义的estimator predictor = estimator.deploy(...)
修复:将变量名统一为estimator:
estimator = SKLearnModel( entry_point='inference.py', source_dir='/home/ec2-user/SageMaker/my_path/src/', model_data='s3://my_bucket/my_key/output/model.tar.gz', role=role, py_version='py3' ) predictor = estimator.deploy(...)
2. 导入路径与目录结构不匹配
你的目录结构中是utils文件夹,但inference.py中导入时写的是util:
# 错误的导入路径 from util.config import TRAINING_VARIABLE_HEADERS
而实际目录结构为:
src L utils L config.py
修复:修正导入路径为utils:
from utils.config import TRAINING_VARIABLE_HEADERS
这个导入错误会导致inference.py加载失败,SageMaker无法识别到你定义的model_fn,从而抛出错误。
3. 验证依赖模块的可导入性
确保modelling/models.py、modelling/vectorisers.py中的MyModel、MyVectoriser类能被正确导入,且无语法错误。可以在本地SageMaker notebook中运行以下代码测试:
import sys sys.path.insert(0, '/home/ec2-user/SageMaker/my_path/src/') from modelling.models import MyModel from modelling.vectorisers import MyVectoriser from utils.config import TRAINING_VARIABLE_HEADERS
如果运行报错,说明模块存在语法错误或依赖缺失,需先修复这些问题。
4. 确认model_fn的模型加载逻辑正常
你的model_fn实现本身符合要求,但要确保MyModel类的__init__方法能正确从model_dir加载模型文件,且无异常抛出。如果模型加载过程出错,会导致SageMaker无法正常初始化模型,进而误判为未实现model_fn。
内容的提问来源于stack exchange,提问作者Tom111989
相关产品推荐
相关产品推荐

