zoukankan      html  css  js  c++  java
  • 生产中的NLP:创建Docker镜像

    作者|Bruce H. Cottman, Ph.D.
    编译|VK
    来源|Towards Data Science

    产品生命周期

    在过去两年半的工作中,我们开发和维护了几个自然语言处理项目。我们为每个项目中的每个版本控制中心创建了Docker镜像:Dev、Test和Stage。我将详细介绍Docker解决方案来创建生产NLP项目。

    代码开发、重构、bug修复和单元测试都是由Dev完成的。在提交Github Dev repo(sitory)之前,代码必须通过单元测试。其他开发团队在合并到Test Github repo(sitory)之前执行代码评审、集成测试。

    项目阶段管理(Project stage management)触发从开发人员到Test 存储库的推送。项目发布管理(Project release management)触发从Test 到Stage 存储库的推送。市场发布管理(Marketing release management)触发了从stage到Prod存储库的推送和半自动连续部署(CD)的推出。

    什么是Docker

    1. 每个项目中有四个不同的版本控制中心:Dev,Test和Stage,Prod。只有需要支持三个不同的Docker镜像,因为最终阶段版本被推送到Prod,一旦Stage版本通过了安全和验收测试。Stage和Prod使用相同的Docker镜像。

    2. Python和R用户希望Jupyter和RStudio Notebook和Nbextensions首选项出现在Docker镜像中。

    3. 大多数Dev和所有Test都在本地使用PyCharm进行代码更新、调试和运行工具:单元测试(pytest)、类型检查(mypy)、覆盖率(cove)rage、PEP-8格式(黑色)和代码质量(pylint)。

    4. Github操作用于CI/CD部署。Prod Docker镜像专门用于特定云的安全性、日志记录或计量服务。

    注意:云扩展和故障转移管理需要修改。我们这里不讨论这些。

    同时使用Docker和Docker Compose

    Docker是用于管理应用程序的单个容器镜像。

    Docker Compose用于同一应用程序同时管理多个容器。此工具提供与Docker相同的功能,但允许你有更复杂的应用程序。

    Docker的Spacy和nltk:需要额外的步骤

    根据上述说明,在上述文章中,spacy和nltk都是通过在Dev、Test和Stage的dockerfile的中间添加以下内容来导入的:

    .
    .
    .
    RUN python -m spacy download en
    RUN python -m spacy download en_core_web_sm
    RUN python -m spacy download en_core_web_lg
    RUN python -m nltk.downloader stopwords && python -m nltk.downloader punkt  && 
        python -m nltk.downloader averaged_perceptron_tagger && 
        python -m nltk.downloader wordnet
    .
    .
    .
    

    将Jupyter支持添加到Dev dockerfile中:

    .
    .
    .
    RUN python -m pip install --upgrade --no-deps --force-reinstall notebook
    #
    RUN python -m pip install jupyterthemes
    RUN python -m pip install --upgrade jupyterthemes
    RUN python -m pip install jupyter_contrib_nbextensions
    RUN jupyter contrib nbextension install --user
    RUN jupyter nbextensions_configurator enable --user
    RUN jupyter nbextension enable jupyter-js-widgets/extension
    RUN jupyter nbextension enable jupyter-notebook-gist/notebook-extension
    RUN jupyter nbextension enable contrib_nbextensions_help_item/main
    RUN jupyter nbextension enable autosavetime/main
    RUN jupyter nbextension enable codefolding/main
    RUN jupyter nbextension enable code_font_size/code_font_size
    RUN jupyter nbextension enable code_prettify/code_prettify
    RUN jupyter nbextension enable collapsible_headings/main
    RUN jupyter nbextension enable comment-uncomment/main
    RUN jupyter nbextension enable equation-numbering/main
    RUN jupyter nbextension enable execute_time/ExecuteTime 
    RUN jupyter nbextension enable gist_it/main 
    RUN jupyter nbextension enable hide_input/main 
    RUN jupyter nbextension enable spellchecker/main
    RUN jupyter nbextension enable toc2/main
    RUN jupyter nbextension enable toggle_all_line_numbers/main
    

    Dev、Test和Stage的requirements.txt:

    ###### Requirements without Version Specifiers ######
    numpy
    matplotlib
    progressbar2
    Pillow
    keras
    nilearn==0.5.0
    pandas
    xlrd
    plotly
    statsmodels
    prettytable
    requests
    seaborn
    joblib
    dask
    distributed==v2.22.0
    bs4
    spacy
    textacy
    nltk
    spacy-transformers
    spacymoji
    pdfminer
    urllib3==1.25.10
    

    注:该要求.txt上面显示的文件是为我们的Dev、Test和Stage准备的。你可能不需要所有这些软件包,也可能需要其他软件包。。如果需要,可以随意删除或添加软件包。

    注意:Pycharm配置了开发和测试工具pytest、pylint、black、mypy等。Jupyter用户可以使用!pip install 进行安装,然后安装可能需要的重要的额外包或工具。

    存储库目录结构

    一般的存储库结构是

    |-- <project--repo-name>
            |-- docker
                |-- dev
                  |--- Dockerfile
                  |--- docker-compose.yml
                  |--- requirements.txt
                |-- test
                  |--- Dockerfile
                  |--- docker-compose.yml
                  |--- requirements.txt
                |-- stage
                  |--- Dockerfile
                  |--- docker-compose.yml
                  |--- requirements.txt
            |-- src
            |-- test
            |--- requirements.txt
            |--- README.md
    .
    .
    

    添加Jupyter Notebook扩展到Docker镜像

    支持Jupyter的简要步骤:

    • 在Jupyter用户Dockerfile中添加所需的Nbextensions.Nbextensions文件上面给出了名称和如何启用它们。

    • 编辑dockerfile.yaml volume: - ./../../.。,如有必要。jupyter的后续启动使用./../../.作为其顶层目录。当你使用updev命令(在本文后面描述)时,docker-compose命令volume: - ./../../.使<path-to-projects>映射到/docker,该目录是docker镜像的内部目录。jupyter的后续发布版本使用<path-to-projects>作为其顶层目录。请使用上面显示的示例目录结构,或将本地目录结构替换为- ./../../.

    • 最后,Juptyter Notebook启动Nbextensions。

    常见问题解答:Docker命令附加功能

    1. 从旧版和以前无用的镜像和容器版本中恢复磁盘空间:
    !docker system prune
    
    1. 查看Docker服务器中运行的Docker容器,每秒更新一次:
    !docker stats
    =>
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    5d98fb8e8a66        dev_dev_1           0.11%               327.2MiB / 36.24GiB   0.88%               182MB / 9.62MB      0B / 0B             13
    
    1. 如果你启动或重新启动,你可能会在任何Docker命令上看到以下错误消息:
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    

    修复方法是等待2-3分钟,等待Docker守护进程完成,然后再试一次。如果不是这样,Docker守护进程的启动就有问题,必须进行诊断和修复。一个可能的问题是检查Docker镜像内存或CPU分配是否适合底层主机硬件。

    结尾

    我详细介绍了我们如何为生产NLP应用程序生命周期设计和实现Docker解决方案。我展示了Dev、Test和Stage的目录结构和Docker代码。

    本文中显示的所有代码都在这里:https://github.com/bcottman/NLP/tree/master/docker

    原文链接:https://towardsdatascience.com/natural-language-processing-in-production-creating-docker-images-84bd86e161b4

    欢迎关注磐创AI博客站:
    http://panchuang.net/

    sklearn机器学习中文官方文档:
    http://sklearn123.com/

    欢迎关注磐创博客资源汇总站:
    http://docs.panchuang.net/

  • 相关阅读:
    讨论Android开发中的MVC设计思想
    关于AppFromwork集成XMPP开发的使用详解
    Android 强大的开发支持库组件AppFromwork框架详解
    Z语音概述from百度
    《软件形式规格说明语言-Z》 缪淮扣 学习笔记 10-12
    形式化规格技术和验证技术小结
    编译TS发生 Property or signature expected
    electron 启动错误
    java学习第三章4.运算
    java学习第三章3.基本类型的转换和直接量
  • 原文地址:https://www.cnblogs.com/panchuangai/p/13752507.html
Copyright © 2011-2022 走看看