如何在Google AI平台自定义预测例程中升级scikit-learn并安装其他库
解决Google AI平台自定义预测例程中scikit-learn版本不匹配的问题
是的,完全可以强制AI平台的自定义预测例程使用指定版本的scikit-learn,你的思路是对的——问题大概率出在setup.py的写法或者部署目录结构上,毕竟AI平台的自定义预测例程对依赖安装和模块导入有一些特定要求,和Dataflow的机制略有不同。
下面是具体的解决步骤:
1. 调整setup.py的写法与依赖指定
首先把依赖版本从>=改为==,确保pip安装的是你需要的精确版本,避免版本漂移;同时调整setup.py的结构以适配AI平台的模块导入逻辑:
from setuptools import setup from setuptools import find_packages # 指定精确版本,确保安装的是你需要的scikit-learn和mlxtend REQUIRED_PACKAGES = [ 'scikit-learn==0.23.1', 'mlxtend==0.17.2' ] setup( name='my_custom_code', version='0.1', install_requires=REQUIRED_PACKAGES, # 自动发现你的包目录(需要确保predictor.py在包内) packages=find_packages(), include_package_data=True, # 移除scripts参数:AI平台需要导入你的predictor模块,而非执行脚本 # 如果你的predictor是单个文件且不想用包结构,可以改用py_modules=['predictor'] )
2. 修正部署目录结构
AI平台的自定义预测例程要求你的代码以可导入的模块/包形式存在,而不是单独的脚本文件。推荐的目录结构如下:
your-deployment-zip/ ├── setup.py # 根目录下的setup.py ├── my_custom_code/ # 与setup.py中name一致的包目录 │ ├── __init__.py # 必须存在,标记为Python包 │ └── predictor.py # 你的自定义预测类代码 └── model/ # 你的模型文件目录(比如.joblib或.pkl文件)
3. 确保预测类的导入路径正确
在部署模型时,需要指定预测类的完整导入路径,比如如果你的predictor类名为Predictor,那么路径应该是:my_custom_code.predictor.Predictor
4. 验证版本是否生效
为了确认scikit-learn版本是否正确安装,可以在predictor.py的初始化方法中加入版本打印代码,方便查看日志:
import sklearn from google.cloud.aiplatform.prediction.predictor import Predictor class Predictor(Predictor): def __init__(self): print(f"Loaded scikit-learn version: {sklearn.__version__}") # 其他初始化逻辑...
部署后,发起测试预测请求,然后在AI平台的日志中查看打印的版本号,确认是否为0.23.1。
备选方案:使用自定义容器(如果上述方法仍不生效)
如果通过setup.py仍无法覆盖默认版本,可以使用自定义Docker容器完全控制环境:
- 创建Dockerfile,基于AI平台的基础镜像,然后安装指定版本的scikit-learn:
FROM gcr.io/cloud-aiplatform/prediction/sklearn-cpu.0-20:latest RUN pip install --upgrade pip && \ pip install scikit-learn==0.23.1 mlxtend==0.17.2 # 复制你的predictor代码和模型文件 COPY my_custom_code /app/my_custom_code COPY model /app/model
- 构建并推送镜像到Google Container Registry,然后部署到AI平台。
内容的提问来源于stack exchange,提问作者enzed01
相关产品推荐
相关产品推荐

