BAT面試14: 談談 docker 在深度學習任務中的應用

1 軟件安裝之痛

Docker是一種容器技術,它就像一個沙盒把應用程序隔離開來,不管有沒有遇到過你至少聽到某些應用程序不能兼容,最常見的就是升級某個系統,老版本跟新版本不能兼容,必須把老版本完全卸載掉。比如說oracle服務,如果把oracle安裝到物理主機上,如果需要升級那將會比較痛苦。再比如說新手學習各種軟件,apache、mysql、Python搞的電腦上亂七八糟的環境,想要重新安裝都很痛苦。

2 docker出現

有沒有一種技術能夠把這個環境隔離開?有那就是虛擬機,如果你爲了一個小服務單獨開一個虛擬機是不是太奢侈?這時候docker出現了,docker是一種容器區別於虛擬機,使用docker你可以打包發佈運行任何應用程序,如果你經常碰到開發環境與生產環境不一致,或者經常需要配置複雜的環境,那你就可以考慮使用它,“它是一處打包到處運行“。再介紹一個使用環境,那就是我們熟悉的雲,很常見我們經常去阿里雲、騰訊雲購買服務器,當我們使用的時候完全就是一個物理主機的狀態,與其他服務器完全隔離,這些大廠不會爲了一個用戶單獨開啓一個虛擬機,因爲太奢侈。而容器就不一樣,用多少分配多少,如果虛擬機佔用10G資源,而可能有9G是空餘出來的,而容器如果佔用的10G那麼它就可能只空餘出來1G或者更少。按照筆者的理解,容器僅僅隔離應用程序,而其他資源是容器間共享的,虛擬機是一種完全霸佔的狀態(個人理解)。

3 運行機制

下圖是介紹docker運行機制,可以看出應用程序在相互獨立的同時,分享物理機的資源

Docker最先是一種開源產品,現在有了社區版和企業版docker-ce與docker-ee。社區版基本已經滿足我們。

筆者強烈推薦docker一個原因,那就是可以共享環境,只要有一個人把複雜的環境配置並打包成鏡像,類似git一樣,commit一個版本,那麼其他人就可以直接使用這個環境,而不需要做任何配置,減少人力物力不說,還霸道的使得所有人的生產環境一致。

正是這個原因,我想到了入門機器學習時候,需要配置caffe/tensorflow,並且cuda版本號要對應上,cuda與cudnn版本也要對應上。當時就設想能不能使用docker來解決這個問題,遺憾的是不行,docker無法使用GPU。

但是辦法總比困難多,docker又發佈出一個插件nvidia-docker,nvidia-docker是基於docker安裝的,可以使得深度學習任務也能隔離開,這就意味着,我可以在一臺物理主機上跑各種框架的深度學習任務,環境隨機配,你開心就好。唯一的限制就是物理機上的cuda版本號要與docker容器中的cuda版本號一致,我覺得這個要求不過分。

下圖是nvidia-docker的運行機制,我們可以看到他們直接的層次結構。應用程序共享GPU,且被隔離開。

4 安裝步驟

安裝docker這裏不再累贅,官網安裝地址:

https://docs.docker.com/install/linux/docker-ce/ubuntu/。

nvidia-docker 安裝官網地址:

https://github.com/NVIDIA/nvidia-docker。

現在我需要一個ubuntu16.04+cuda9.2+cudnn7的開發環境,我可以選擇下載鏡像再去配置各種驅動,安裝cuda、安裝cudnn。但是我要秀一下更“懶的方式”。

在docker hub裏面查詢cuda9.2,找到星星最多的一個鏡像

裏面很多鏡像,我找到一個符合我自己要求的。

拉取鏡像:sudo docker pull nvidia/cuda:9.2-cudnn7-runtime-ubuntu16.04

查看拉取的鏡像:sudo docker ps

基於這個鏡像啓動容器:

sudo nvidia-docker run -ti nvidia/cuda:9.2-cudnn7-runtime-ubuntu16.04 bash

現在我已經進來了,完全就是一個乾淨的開發環境,等下,看看顯卡驅動配置好了沒。

開心的不行,如果你對版本沒有這個高的要求,那我們來github裏面找找看看還有什麼鏡像,搜索 tensoflow.

5 總結

GPU與CPU任你選,很開心有沒有?好了,docker在深度學習中的應用就介紹到這,安裝配置細節網絡一大堆,筆者已經在使用docker解放勞動力的興奮狀態中無法自拔,順便對windows用戶用安慰一句,nvidia-docker不支持windows,但是好消息是,其他的都支持。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章