Docker下调用MLflow的TensorFlow模型报tensorflow_core缺失错误
报错原因
核心触发原因是TensorFlow多版本混装导致依赖链路断裂:
- 当前环境同时存在
tensorflow 2.8.0(CPU版)、tensorflow-gpu 2.2.0两个不同主版本的TensorFlow安装包,配套的tensorflow-estimator版本为2.2.0,和2.8.0主版本完全不兼容。 tensorflow_core是TensorFlow 2.0~2.2版本特有的内部顶层模块,2.3及更高版本已经移除该独立模块,所有逻辑合并到tensorflow主包路径下。MLflow加载注册模型时会按照模型保存时记录的模块路径导入依赖,版本不匹配就会抛出模块不存在的错误。
修复步骤
- 第一步:彻底清理当前环境所有冲突的TensorFlow相关依赖,执行以下命令:
pip uninstall -y tensorflow tensorflow-gpu tensorflow-estimator tensorboard tensorflow-io tensorflow-io-gcs-filesystem tensorboard-data-server tensorboard-plugin-wit
- 第二步:根据模型训练保存时使用的TensorFlow版本,安装版本完全匹配的全套依赖,两种方案选其一即可:
- 若模型是基于TF2.2 GPU版本训练保存,安装2.2系列匹配依赖:
pip install tensorflow-gpu==2.2.0 tensorflow-estimator==2.2.0 tensorboard==2.2.0 tensorflow-io==0.21.0- 若要使用TF2.8版本加载模型(注意TF2.1及之后版本已经合并CPU/GPU安装包,无需单独安装
tensorflow-gpu),安装2.8系列匹配依赖:
pip install tensorflow==2.8.0 tensorflow-estimator==2.8.0 tensorboard==2.8.0 tensorflow-io==0.24.0 - 第三步:校验依赖安装结果,执行
pip list | grep tensorflow,确认输出的所有TensorFlow相关包主版本号完全一致,不存在跨版本混装情况。 - 第四步:清除本地MLflow缓存的旧模型临时文件,重新调用MLflow接口加载模型即可正常运行。
注意:Docker容器内安装依赖时,不要加
--user参数,避免出现包安装路径不在Python导入路径内的问题。
内容的提问来源于stack exchange,提问作者EAmir
相关产品推荐
相关产品推荐

