部署DecisionTreeRegressor到GCS Vertex AI报无save属性错误如何解决
错误原因
Scikit-learn的DecisionTreeRegressor类没有内置save()方法,你参考的MPG数据集教程使用的是TensorFlow/Keras框架的模型,这类模型才支持原生save方法,直接套用该方法到Scikit-learn模型上就会触发属性不存在的报错。
修复方案
你需要用joblib(Scikit-learn官方推荐的模型序列化工具)来保存决策树模型,再上传到GCS存储桶,操作步骤如下:
- 先在项目依赖中添加
joblib,如果需要直接写入GCS路径,还要额外安装gcsfs:
pip install joblib gcsfs
- 修改
train.py末尾的模型保存代码:
删掉原代码最后一行的reg.save(BUCKET + '/housing/model'),替换为以下代码:
import joblib # 直接将序列化模型写入GCS路径 model_save_path = f"{BUCKET}/housing/model.joblib" joblib.dump(reg, model_save_path)
如果不想安装gcsfs,也可以先将模型保存到本地临时路径,再通过GCS SDK上传到存储桶:
import joblib import os from google.cloud import storage # 先保存到本地临时目录 local_path = "/tmp/housing_model.joblib" joblib.dump(reg, local_path) # 上传到GCS存储桶 storage_client = storage.Client() bucket_name = BUCKET.replace("gs://", "") bucket = storage_client.get_bucket(bucket_name) blob = bucket.blob("housing/model.joblib") blob.upload_from_filename(local_path)
后续部署注意事项
- 如果你使用Vertex AI预构建的Scikit-learn推理镜像,要保证训练用的Scikit-learn版本和预构建镜像支持的版本一致,避免模型加载失败
- 如果使用自定义推理容器,需要在容器环境中安装对应版本的
scikit-learn和joblib,部署时通过joblib.load()加载模型即可正常推理
内容的提问来源于stack exchange,提问作者temirlanj
相关产品推荐
相关产品推荐

