使用 Docker 安裝深度學習環境

教程|使用 Docker 安裝深度學習環境

用 Docker 安裝深度學習環境,輕量、方便!整個系統大小僅需2~3G,用完還能帶著走!一人裝環境,全都能用,還有 NVIDIA 官方提供的 GPU 鏡像等著你哦~

1.什么是 Docker2.關于 Docker 的幾個概念3.為什么用 Docker4.實戰:使用 Docker 創建并分享一個深度學習環境

深度學習環境的配置一直是一個令人頭疼的問題,尤其是對使用 Windows 平臺的用戶來說,在安裝一些開源深度學習框架的時候,經常會遇到一起奇奇怪怪的問題。更有一些深度學習框架(比如 PyTorch),目前沒有提供對 Windows 平臺的官方支持。

為了避免出現環境問題,有些同學選擇使用 VMware、VirtualBox 運行 Linux 虛擬機的方式進行深度學習實驗。但是像 VMware、VirtualBox 這類“重”虛擬機運行起來常會拖慢系統,并且這些虛擬機目前是不支持 GPU 虛擬化的。

所以今天要分享給大家的是使用 Docker 配置安裝深度學習環境。

使用Docker安裝環境的優點如下:

  1. 無需自己配置環境,通過 Docker 鏡像可以使用各種已配置好的深度學習環境。

  2. 輕量便捷。一個 Docker 客戶端+一個鏡像,總共大約3~4G即可組成一個深度學習系統環境。

  3. 便于分享。可以將自己的環境通過鏡像庫或直接以文件拷貝的方式傳播。

  4. 官方支持。很多深度學習框架&項目提供官方 Docker 鏡像。

英偉達專門提供的支持GPU虛擬化的Docker鏡像:

教程|使用 Docker 安裝深度學習環境

1.什么是Docker?

已經熟悉 Docker 的同學肯定已經有了自己的理解。

我這里給出一種簡單(但不一定嚴謹)的描述,以供初學者快速理解。

Docker 類似于我們使用的虛擬機軟件(VMware,VritualBox),可以創建、運行虛擬系統。

網上可以找到大量的 Docker 虛擬系統(鏡像)。我們只需要搜索想要的系統環境(比如Python3.6+PyTorch),然后使用 Docker 運行它,就可以在其中調試深度學習程序。

那 Docker 與之前說的“重量級”虛擬機軟件有什么不同的地方?

別急,在下面我們會專門說明這個問題,且慢慢往下看~

2.關于Docker的幾個概念

關于 Docker 的組成部分,有那么幾個小概念需要大家提前了解一下。

鏡像

Docker 鏡像就是系統環境的載體。

Docker 鏡像是 Docker 容器運行時的只讀模板,類似于虛擬主機本體。

從 Docker 鏡像倉庫中可以找到大量可用的鏡像,你可以按照自己的需求自行搜索,比如尋找一個安裝了 PyTorch+Jupyter Notebook 的系統鏡像。

容器

每一個 Docker 容器都是從 Docker 鏡像中創建的。

之所以有容器的存在,因為鏡像是只讀的。當我們通過鏡像運行一個系統環境(虛擬機)時,Docker 就會創建一個容器來容納這個系統環境。我們在這個環境中進行的修改(包括創建文件、安裝新軟件包等等),相當于都是在容器中進行的,不會影響到原來的鏡像。

在我們想分享修改后(比如安裝了新軟件包)的系統時,我們可以執行“commit”命令。這時被我們修改過的容器,就會提交到鏡像中,形成新版本的鏡像。這個過程特別像GitHub的使用。我們從GitHub上clone下代碼,修改,然后直到 commit 提交。

簡單來說,容器可以視為鏡像的“運行態”。

Docker Hub

官方的鏡像發布網站,你在這里可以找到自己需要的鏡像。

然而在國內,我們往往使用國內的鏡像庫,比如阿里云、網易蜂巢等等。

3.為什么要用 Docker?

有同學可能有疑問:既然 Docker 也是一種虛擬機,那我用 VMware,VritualBox 不是一樣嗎?

我們使用 Docker 搭建深度學習環境的理由有三個:

1.輕量級便捷。使用 VMware 等軟件還需要經歷一個漫長的“安裝操作系統”的過程。使用 Docker 只需要從網上找到合適的鏡像下載到本地就好了。

2.便于分享。使用 Docker 建立的鏡像很小巧,很適合分享。比如你配置好了一個 PyTorch 的鏡像,可以直接拷貝給實驗室的其它小伙伴。

3.易于部署。如果你在 Docker 容器中訓練好一個模型,并且為它搭建了一個 web 可訪問的使用接口。那么你可以把這個容器打包成Docker鏡像,直接將這個鏡像部署到服務器上,無需在服務器上重復布置軟件環境。

另外 Docker 運行本身對系統的拖累很低,一般運行鏡像并不會導致系統卡頓。此外 Docker 還有良好的資源隔絕機制,以及 Docker 鏡像有著“鏡像層級版本”的機制。這些都是 Docker 的特性,但目前我們還用不到,所以我們在這不做過多的討論。

4.實戰:9步創建深度學習環境

如何使用 Docker 創建并分享一個深度學習環境呢?需要9個步驟:

  1. 使用 阿里云 鏡像站點加速服務

  2. Docker-machine?

  3. 從阿里云鏡像獲取一個與需求相似的鏡像

  4. 把鏡像從庫里拖拽過來!

  5. 查看并運行鏡像

  6. 將容器的修改提交到鏡像中

  7. 將鏡像上傳到阿里云鏡像倉庫中

  8. 將鏡像打包為獨立文件

  9. 測試分享出的 Docker 鏡像

1.使用 阿里云 鏡像站點加速服務

在安裝 Docker 后,理論上我們就可以去 Docker Hub 上尋找我們想用的鏡像了。不過在國內訪問國外的 Docker Hub 速度是非常慢的,所以我選擇使用阿里云的鏡像倉庫。

訪問:https://cr.console.aliyun.com/#/accelerator

注冊阿里賬戶并登錄。

教程|使用 Docker 安裝深度學習環境

選擇 Docker 鏡像加速器。

在這個界面里我們可以看到屬于自己的鏡像加速器地址。我們要把這個加速地址配置到 Docker 里,從而讓 Docker 默認從加速地址中尋找并下載鏡像。

教程|使用 Docker 安裝深度學習環境

Linux 操作系統的配置都是通過修改 daemon 配置文件完成的,這個配置看起來比較簡單。

Mac 以及 Windows 操作系統由于系統限制,必須使用 docker-machine 來配置加速地址。

教程|使用 Docker 安裝深度學習環境

2.Docker-machine?

docker-machine 本質上是又是另一種虛擬機(怎么那么多虛擬機),我們暫且把它理解為一個自帶 Docker 的 VirtualBox 虛擬機。

上圖配置中第一條命令的意義是:使用阿里的加速地址創建一個 docker-machine 虛擬機并啟動。

后三條命令的意義是:通過配置環境變量(只在本終端中有效)用 docker-machine 虛擬機中的 Docker 環境覆蓋宿主機系統環境。

執行這三條命令后:

在 Docker-machine 運行期間,在當前的宿主機終端中執行的 Docker 命令,實際上都是由 docker-machine 虛擬機中的 Docker 環境執行的,因為只有 docker-machine 虛擬機配置了阿里的加速地址。

3.從阿里云鏡像獲取一個與需求相似的鏡像

在鏡像加速器地址配置完畢后,我們就可以去尋找需要的 Docker 鏡像了。

我想找個已經安裝好 Python3.6 的鏡像,以便進一步安裝最新的 PyTorch 以及其它相關的軟件包,那么我搜索“python36”。

教程|使用 Docker 安裝深度學習環境

4.把鏡像從庫里拽過來!

教程|使用 Docker 安裝深度學習環境

可以點擊鏡像詳情,查看鏡像的外網地址,然后把鏡像拽到本地上來(之前必須已經配置好阿里加速器)。

docker pull registry.cn-shenzhen.aliyuncs.com/chenxl/python3.6

5.查看并運行鏡像

我們可以使用命令 docker images 查看鏡像信息:

教程|使用 Docker 安裝深度學習環境

使用 docker run 命令將鏡像運行為可交互的 shell:

教程|使用 Docker 安裝深度學習環境

在命令中:

  • -t:在新容器內指定一個偽終端或終端。

  • -i:允許你對容器內的標準輸入 (STDIN) 進行交互。

在命令運行后,我們可以觀察到當前 shell 里的提示符已經從“Alex-MacBook-Pro”已經改成了“root@f8ad6eb17624”,這證明我們已經在 Docker 容器的系統環境中了。

我們按照常規的方式安裝深度學習環境,比如用 pip 命令安裝 PyTorch、torchvision 等軟件包,并將項目源碼拷貝到運行的容器中。

在宿主機與 Docker 容器間拷貝數據可使用 docker cp 命令。

在容器里進行一系列的操作后,我們的工作完成,可以運行 exit 命令退出當前 shell。

此時我們可以觀察一下當前的容器(docker ps -al)與之前的鏡像(docker images),可以看到容器與鏡像同時獨立存在,并且可以看到在容器中正在運行的項目(交互shell,即/bin/bash)。

教程|使用 Docker 安裝深度學習環境

6.將容器的修改提交到鏡像中

假設我們在容器里安裝了新的軟件包并且跑通了自己的項目,現在打算把容器提交成鏡像分享給其它小伙伴。

需要操作的流程如下:

首先查看容器的ID(docker ps -al):

教程|使用 Docker 安裝深度學習環境

將容器提交到鏡像中,同時我們給它指定新的名字(docker commit [ID] [NEW_name]):

教程|使用 Docker 安裝深度學習環境

提交完成后我們再查看本機存在的鏡像(docker images):

教程|使用 Docker 安裝深度學習環境

可以看到經我們修改后的新鏡像“python36/pytorch”獨立存在。

有句話叫“取之于民,用之于民”。

我們可以把這個包含最新版 PyTorch 環境的鏡像上傳到阿里云的鏡像庫中,讓更多的人可以使用我們的鏡像。

7.將鏡像上傳到阿里云鏡像倉庫中

我們首先在阿里云上創建一個鏡像倉庫:

教程|使用 Docker 安裝深度學習環境

然后我們需要在當前的終端中登錄阿里云倉庫(之前必須配置了阿里云加速器):

docker login --username=USER_NAME registry.cn-hangzhou.aliyuncs.com

要把鏡像上傳到指定的鏡像庫,需要先對鏡像進行命名。整個名字由冒號“:”分成兩部分,前部分是我們在上一步建立的鏡像倉庫的地址,后部分是對當前鏡像打的標簽(TAG)。TAG的存在是為了允許一個鏡像庫里存在多個版本的鏡像。

教程|使用 Docker 安裝深度學習環境

好,這時候萬事具備了,我們運行 push 命令將鏡像推送到云鏡像庫中。

教程|使用 Docker 安裝深度學習環境

在上傳結束后,我們就可以在云鏡像庫的web管理界面看到我們的鏡像了。

教程|使用 Docker 安裝深度學習環境

8.將鏡像打包為獨立文件

除了上傳云鏡像庫,我們也可以直接將鏡像打包成一個獨立文件,拷貝分享給別人使用。

同樣,我們使用命令 docker images 查看鏡像的名字:

教程|使用 Docker 安裝深度學習環境

再使用 docker save -o 將目標鏡像打包成文件。

教程|使用 Docker 安裝深度學習環境

9.測試分享出的 Docker 鏡像

現在讓我們測試下之前導出的鏡像。

首先嘗試導入剛剛在本地打包的鏡像:

教程|使用 Docker 安裝深度學習環境

導入成功。

再試下從阿里云鏡像庫中把之前建立的鏡像 pull 下來:

教程|使用 Docker 安裝深度學習環境
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容