如何使用 requirements.txt 或类似的 pickle 对象

How to use requirements.txt or similar for a pickle object

问题

如何转储具有自身依赖项的 pickle 对象?

pickle对象一般是从notebook生成的。

我尝试为笔记本创建 virtualenv 来跟踪依赖关系,但是这样我不仅得到了 pickle 对象的导入,还得到了应用程序其他地方使用的更多对象,这很好足够但不是最好的解决方案。

背景

我想要实现的目标

我正在尝试构建 MLOps 流程。快速解释:MLOps 是一个流行词,与 DevOps for machine learning 同义。不同的公司提供了不同的 PaaS/SaaS 解决方案,他们通常解决以下问题:

我将跳过存储部分并专注于前两个。

我是如何努力实现的

在我的例子中,我正在尝试使用良好的旧 TeamCity 设置此流程,其中模型是由 sk-learn 生成的 pickle 对象。要求是:

然后 TeamCity 中的构建配置解析文件并执行以下操作:

  1. 解析定义文件。
  2. 找到预测代码
  3. 将 pickle 模型复制为 model.pickle 到预测器应用程序根文件夹
  4. 将预测器 requirements.txt 与泡菜模型 requirements.txt 合并
  5. 创建 virtualenv,安装依赖项,将其作为 wheel 推送

作为流程的输出,我有一个包含 REST API 的包,它使用 pickle 模型并暴露给定义的端口。

对于如此复杂的构建步骤,我使用 Makefile for on-prem system, and on cloud-based MLOps using something like AWS CodeBuild with sagemaker

打包依赖项的示例如下,执行以下构建步骤需要三个文件 main.py 包含代码的驱动程序函数,Pipfile 包含您的 virtualenv 和模型的依赖项:

  1. main.py
def main():
      do_something()

if __name__ == "__main__":
      main()

  1. Pipfile
[[source]]
url = 'https://pypi.python.org/simple'
verify_ssl = true
name = 'pypi'

[requires]
python_version = '2.7'

[common-packages]
scipy >= "0.17.0"
pandas 

[model1-packages]
numpy >= "1.11.0"

[model2-packages]
numpy == "1.0.0"
  1. 生成文件
.DEFAULT_GOAL := run

init:
    pipenv --three install
    pipenv shell

analyze:
    flake8 ./src

run_tests:
    pytest --cov=src test/jobs/

run:

    # cleanup
    find . -name '__pycache__' | xargs rm -rf

    # run the job
    python main.py 

为您的用例自定义这 3 个文件后,可以使用以下命令执行该过程:

make run