作者|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 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命令附加功能
- 從舊版和以前無用的鏡像和容器版本中恢復磁盤空間:
!docker system prune
- 查看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
- 如果你啟動或重新啟動,你可能會在任何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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/140500.html
標籤:其他
