无法在ML Engine部署scikit-learn模型,求非TensorFlow解决方案
解决AI Platform部署scikit-learn模型时的格式报错问题
我之前也碰到过一模一样的问题——AI Platform(原ML Engine)默认会把未指定框架的模型当成TensorFlow模型来处理,所以才会要求找.pb/.pbtxt文件。其实不用切换到TensorFlow,只要正确配置部署参数或者用自定义预测器就能解决,下面给你两种可行的方案:
方案一:使用预构建的scikit-learn容器(推荐,无需额外代码)
AI Platform提供了针对scikit-learn的预构建运行时容器,你只需要在创建版本时明确指定框架类型、对应的运行时版本和Python版本即可:
- 确保你的
model.joblib已经上传到Cloud Storage的某个目录下,比如gs://your-bucket/model_files/(注意路径要指向包含模型文件的目录,不是单个文件) - 执行以下命令创建版本(替换成你的模型名、版本号、GCS路径和匹配的版本信息):
gcloud ai-platform versions create v1 \ --model=your-model-name \ --origin=gs://your-bucket/model_files/ \ --runtime-version=2.11 \ --framework=scikit-learn \ --python-version=3.9
注意:要保证runtime-version和python-version与你训练模型时的环境兼容,比如runtime 2.11对应scikit-learn 1.2.2、Python 3.9;如果你的模型用了更老的scikit-learn版本,需要选择对应的runtime版本。
方案二:自定义预测器(适合需要预处理/后处理或特殊依赖的场景)
如果你的模型需要自定义的输入预处理、输出后处理,或者依赖一些特殊的Python库,就需要创建自定义预测器:
- 编写
predictor.py文件,定义加载模型和预测的逻辑:
import joblib import os class Predictor: def __init__(self, model): self.model = model @classmethod def from_path(cls, model_dir): # 加载joblib格式的模型 model_path = os.path.join(model_dir, 'model.joblib') model = joblib.load(model_path) return cls(model) def predict(self, instances, **kwargs): # 这里可以添加自定义预处理逻辑,比如转换输入格式 predictions = self.model.predict(instances) # 也可以添加后处理,比如格式化输出 return predictions.tolist()
- 编写
setup.py文件,声明模型依赖(版本要和训练时一致):
from setuptools import setup setup( name='sklearn-custom-predictor', version='0.1', packages=[''], install_requires=[ 'scikit-learn==1.2.2', 'joblib==1.2.0' ] )
将
predictor.py、setup.py和model.joblib一起上传到Cloud Storage的同一个目录,比如gs://your-bucket/custom_model/创建版本时指定自定义预测器的配置:
gcloud ai-platform versions create v1 \ --model=your-model-name \ --origin=gs://your-bucket/custom_model/ \ --runtime-version=2.11 \ --python-version=3.9 \ --package-uris=gs://your-bucket/custom_model/ \ --prediction-class=predictor.Predictor
常见排查点
- 确认GCS路径正确:
--origin指向的是包含模型文件的目录,不是单个文件的路径 - 版本兼容性:运行时版本、Python版本和scikit-learn版本必须匹配,避免出现依赖冲突
- 权限问题:确保AI Platform服务账号有访问该GCS bucket的权限
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

