gpt4 book ai didi

python - 如果我已经将模型作为 pickle,为什么还需要在 docker 容器中使用 sklearn?

转载 作者:太空宇宙 更新时间:2023-11-04 04:29:33 25 4
gpt4 key购买 nike

我 pickle 了一个模型,只想公开用 Flask 编写的 prediction api。然而,当我编写一个 dockerfile 来制作一个没有 sklearn 的图像时,我得到一个错误 ModuleNotFoundError: No module named 'sklearn.xxxx' where xxx 指的是 sklearn 的 ML 算法类,在我使用像 classifier = pickle.load(f) 这样的 pickle 加载模型的时候。

当我重写 dockerfile 来制作一个也有 sklearn 的图像时,即使在 API 中我从不导入,我也没有得到错误sklearn.
我的 pickling 概念非常简单,它将用所有数据序列化分类器类。所以当我们解开它时,由于分类器类已经有一个 predict 属性,我们可以直接调用它。为什么我需要在环境中安装 sklearn

最佳答案

你对 pickle 的工作原理有误解。

不会序列化任何东西,除了实例状态(__dict__ 默认情况下,或自定义实现)。 unpickling 时,它只是尝试创建相应类的实例(这里是你的导入错误)并设置 pickled 状态。

这是有原因的:你事先不知道load之后会用到什么方法,所以你不能pickle实现。除此之外,在 pickle time 中,您无法构建一些 AST 来查看反序列化后需要哪些方法/模块,主要原因是 python 的动态特性——您的实现实际上可能因输入而异。

毕竟,即使假设理论上我们有智能的独立 pickle 序列化,它也将是单个文件中的实际模型 + sklearn,没有适当的方法来管理它。

关于python - 如果我已经将模型作为 pickle,为什么还需要在 docker 容器中使用 sklearn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52929649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com