【问题标题】:How to use requirements.txt or similar for a pickle object如何为泡菜对象使用 requirements.txt 或类似文件
【发布时间】:2019-10-02 16:19:42
【问题描述】:

问题

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

pickle 对象一般是从笔记本生成的。

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

背景

我正在努力实现的目标

我正在尝试构建 MLOps 流程。快速解释:MLOps 是一个流行词,与 用于机器学习的 DevOps 同义。不同的公司为其提供了不同的 PaaS/SaaS 解决方案,它们通常解决以下问题:

  • 从模型创建 Web API 的自动化
  • 处理需求/依赖关系
  • 存储和运行用于模型生成、模型二进制和数据集的脚本。

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

我的目标是什么

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

  • 必须明确定义依赖关系
  • 必须支持其他 pickle 对象(而不是 sk-learn)。
  • 数据科学家的工作流程如下所示:
    • 数据科学家使用requirements.txt上传pickle模型。
    • 数据科学家提交如下定义文件:
     apiPort: 8080
     apiName: name-tagger
     model: model-repository.internal/model.pickle
     requirements: model-repository.internal/model.requirements
     predicterVersion: 1.0
    
    • 其中 predicter 是一个带有自己的requirements.txt 的 FLASK 应用程序。它是 pickle 模型的 API 包装器/层,可将模型加载到内存中并提供来自 rest 端点的预测。

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

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

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

【问题讨论】:

    标签: python dependencies pickle data-science devops


    【解决方案1】:

    对于如此复杂的构建步骤,我将 Makefile 用于本地系统,并在基于云的 MLOps 上使用 AWS CodeBuild with sagemaker 之类的东西。

    一个示例如下,用于打包依赖项并执行以下构建步骤将需要三个包含代码驱动功能的 ma​​in.py 文件,Pipfile包含您的 virtualenv 和模型的依赖项:

    1. ma​​in.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
    

    【讨论】:

    • 不要只是给出一个链接,你最好提供一些例子
    • @NikolayShevchenko 我为你的学习添加了一些通用代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    相关资源
    最近更新 更多