生產中的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
每個專案中有四個不同的版本控制中心: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
歡迎關注磐創AI部落格站: http://panchuang.net/
sklearn機器學習中文官方文件: http://sklearn123.com/
歡迎關注磐創部落格資源彙總站: http://docs.panchuang.net/
相關文章
- docker建立beego映象DockerGo
- docker建立web映象DockerWeb
- docker 映象建立與使用Docker
- docker2-映象原理及建立新的映象Docker
- 細述docker容器中建立SSH服務映象Docker
- Spring Boot 建立 Docker 映象Spring BootDocker
- docker 映象中的uidDockerUI
- 建立 Docker 映象倉庫指令碼Docker指令碼
- 從頭基於空映象scratch建立一個新的Docker映象Docker
- docker映象中json的作用DockerJSON
- 細述docker容器建立MariaDB映象Docker
- Docker框架使用系列教程(六)建立映象Docker框架
- 建立映象釋出到映象倉庫【不依賴docker環境】Docker
- docker生產——容器通訊Docker
- Docker生產實踐(六)Docker
- 兩種方式建立支援SSH服務的docker映象Docker
- 使用Dockerfile建立帶Apache服務的Centos Docker映象DockerApacheCentOS
- Docker框架使用系列教程(七)Dockerfile映象建立Docker框架
- Docker - 02 建立映象 Dockerfile 指令速查表Docker
- 如何編寫 Dockerfile 檔案建立 Docker 映象Docker
- docker alpine映象中遇到 not foundDocker
- 為你的Go應用建立輕量級Docker映象?GoDocker
- Docker容器和映象的建立/匯出/刪除/匯入Docker
- 影片生產大映象最佳化實踐
- docker 映象Docker
- Docker刪除倉庫中的映象問題Docker
- Docker中ubuntu映象配置apt阿里源DockerUbuntuAPT阿里
- 三個生產環境中使用Docker的案例Docker
- docker映象的釋出Docker
- Docker的映象使用-WindowDocker
- Docker映象的基本操作Docker
- docker 映象的遷移Docker
- Docker映象的構成__docker commitDockerMIT
- docker 生產環境基礎應用Docker
- Docker中mysql映象的使用和外網訪問DockerMySql
- Docker私有映象Docker
- 聊聊Docker映象Docker
- yamlapi docker 映象YAMLAPIDocker