作者|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
- 每个我的项目中有四个不同的版本控制核心:Dev,Test和Stage,Prod。只有须要反对三个不同的Docker镜像,因为最终阶段版本被推送到Prod,一旦Stage版本通过了平安和验收测试。Stage和Prod应用雷同的Docker镜像。
- Python和R用户心愿Jupyter和RStudio Notebook和Nbextensions首选项呈现在Docker镜像中。
- 大多数Dev和所有Test都在本地应用PyCharm进行代码更新、调试和运行工具:单元测试(pytest)、类型查看(mypy)、覆盖率(cove)rage、PEP-8格局(彩色)和代码品质(pylint)。
- 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 enRUN python -m spacy download en_core_web_smRUN python -m spacy download en_core_web_lgRUN 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 jupyterthemesRUN python -m pip install --upgrade jupyterthemesRUN python -m pip install jupyter_contrib_nbextensionsRUN jupyter contrib nbextension install --userRUN jupyter nbextensions_configurator enable --userRUN jupyter nbextension enable jupyter-js-widgets/extensionRUN jupyter nbextension enable jupyter-notebook-gist/notebook-extensionRUN jupyter nbextension enable contrib_nbextensions_help_item/mainRUN jupyter nbextension enable autosavetime/mainRUN jupyter nbextension enable codefolding/mainRUN jupyter nbextension enable code_font_size/code_font_sizeRUN jupyter nbextension enable code_prettify/code_prettifyRUN jupyter nbextension enable collapsible_headings/mainRUN jupyter nbextension enable comment-uncomment/mainRUN jupyter nbextension enable equation-numbering/mainRUN 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/mainRUN jupyter nbextension enable toc2/mainRUN jupyter nbextension enable toggle_all_line_numbers/main
Dev、Test和Stage的requirements.txt:
###### Requirements without Version Specifiers ######numpymatplotlibprogressbar2Pillowkerasnilearn==0.5.0pandasxlrdplotlystatsmodelsprettytablerequestsseabornjoblibdaskdistributed==v2.22.0bs4spacytextacynltkspacy-transformersspacymojipdfminerurllib3==1.25.10
注:该要求.txt下面显示的文件是为咱们的Dev、Test和Stage筹备的。你可能不须要所有这些软件包,也可能须要其余软件包。。如果须要,能够随便删除或增加软件包。留神:Pycharm配置了开发和测试工具pytest、pylint、black、mypy等。Jupyter用户能够应用!pip install <package>进行装置,而后装置可能须要的重要的额定包或工具。
存储库目录构造
个别的存储库构造是
|-- <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命令附加性能
- 从旧版和以前无用的镜像和容器版本中复原磁盘空间:
!docker system prune
- 查看Docker服务器中运行的Docker容器,每秒更新一次:
!docker stats=>CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS5d98fb8e8a66 dev_dev_1 0.11% 327.2MiB / 36.24GiB 0.88% 182MB / 9.62MB 0B / 0B 13
- 如果你启动或重新启动,你可能会在任何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/N...
原文链接:https://towardsdatascience.co...
欢送关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/