SageMaker从model.tar.gz重建模型后部署返回NoneType问题排查
问题排查与解决思路
我来帮你梳理这个问题:你遇到的情况其实是SageMaker SDK中通用Model类的特性导致的——虽然端点已经成功创建,但直接调用deploy()默认不会返回带有predict方法的Predictor对象,所以得到了None。下面是具体的原因和解决办法:
为什么会出现这种情况?
Model类是一个通用的模型封装,它不知道你使用的因子分解机模型对应的专用预测器类型。而如果你是通过Estimator训练后直接部署,SDK会自动关联模型对应的Predictor类,所以能直接返回可用的预测器实例。但用预训练的model.tar.gz创建Model对象时,需要我们手动指定预测器类型。
两种解决办法
方法1:部署时直接指定预测器类
在调用deploy()方法时,通过predictor_cls参数传入因子分解机对应的FMPredictor类,这样部署完成后就能直接得到带有predict方法的对象:
from sagemaker.amazon.predictor import FMPredictor # 部署时添加predictor_cls参数 fm_predictor = fm.deploy( instance_type='ml.c4.xlarge', initial_instance_count=1, predictor_cls=FMPredictor )
方法2:针对已创建的端点手动创建Predictor
如果你的端点已经成功创建,也可以通过端点名称手动实例化Predictor对象:
from sagemaker.amazon.predictor import FMPredictor # 替换为你的端点名称,可以从SageMaker控制台获取,或者通过fm.endpoint_name获取 fm_predictor = FMPredictor(endpoint_name='your-endpoint-name')
完成上面的操作后,你就可以正常调用fm_predictor.predict(...)来执行预测了。
内容的提问来源于stack exchange,提问作者clog14
相关产品推荐
相关产品推荐

