pickled python 机器学习模型使用硬编码路径,不能在其他机器上运行——怎么办?

问题描述

我使用 Autogluon 在我的计算机上本地创建机器学习模型。 现在我想通过 AWS 部署它们,但我意识到在这个过程中创建的所有 pickle 文件都使用了对其他 pickle 文件的硬编码路径引用:

/home/myname/Desktop/ETC_PATH/Autogluon/

我使用 cloudpickle.dump(predictor,open('FINAL_MODEL.pkl','wb')) 对最终的集成模型进行 pickle,但 Autogluon 创建了许多其他各个模型的 pickle 文件,然后将这些文件引用为 /home/myname/Desktop/ETC_PATH/Autogluon/models//home/myname/Desktop/ETC_PATH/Autogluon/models/specific_model/ 等等。 .

如何实现所有绝对路径都被相对路径替换,例如 root/Autogluon/WHATEVER_PATH,其中 root 可以设置为任何内容,具体取决于模型稍后保存的位置。

任何指针都会有所帮助。

编辑:我很确定我发现了问题。如果我使用 Autogluon 的 predictor = task.load(model_dir) 而不是加载 FINAL_MODEL.pkl(这似乎是硬编码路径),它应该正确地找到所有依赖项,无论 Autogluon 文件夹作为一个整体是否被移动。 This issue on github helped

解决方法

编辑:这解决了问题:如果我使用 AutoGluon 的 predictor = task.load(model_dir) 而不是加载 FINAL_MODEL.pkl(这似乎是硬编码路径),它应该正确地找到所有依赖项,无论是否AutoGluon 文件夹作为一个整体被移动。 This issue on github helped