一.前言:

相信之前有看小編部落格假設環境的朋友一定不陌生下面這些文章


1.caffe 安裝教學 GPU 版本 --nvidia1070 ubuntu14.04
2.安裝 tensorflow 教學 GPU:Nvidia1070_from source
3.Ubuntu 16.04 nvidia-1070ti cuda9.0

 

那時小編從一個連Linux是什麼都不懂得新手開始學習搭建深度學習環境,一路跌跌撞撞,一邊解決Linux系統的bug,另一邊又解決相依程式的bug,等全部都弄好了之後一個禮拜的寶貴時間就已經悄悄的飛走了。

等後來慢慢接觸到Anaconda這套集合數據包後才讓我節省不少解決相依程式bug的時間,那時搭建一套深度學習環境已經可以讓我在一天內解決了

但今天小編要介紹的是可以讓您在五分鐘之內搭建好您的深度學習環境
沒錯! 你沒有聽錯就是五分鐘(取決你的網路速度)

今天要介紹的就是近年非常流行的虛擬機技術–Docker,它可以把所有環境都打包起來(包括安裝cuda相關程式),只要打包一次就可以快速佈署在任一台電腦中

會接觸到這套程式是因為別的團隊要把程式丟給小編跑,但後來卻發現頻頻出現錯誤,那時候只能猜想是環境不同,因此就一一的確認軟體環境版本慢慢的除錯,實在是曠日又費時,後來上網搜尋資料後才發現有docker這套利器,請對方把程式連同環境一起打包後再傳給我,如此保證運行出相同的結果。

Build once, deploy anywhere
即是本程式非常著名的流行語

二.Docker介紹


網路上的資料常常拿Virtual Machine與 Docker做對比,在Docker還沒出現之前VM大概是最方便的虛擬機了,只要在電腦上安裝VM就可以裝無數個系統在電腦中並且執行想要做的事情,下圖是兩種虛擬技術的對比。左邊的圖是docker的系統架構,相對於VM來說,docker把安裝作業系統整合成一個本地端的作業系統即可,不用像以前的VM一樣,每安裝一個虛擬機就要再安裝一個作業系統,這麼做的好處可以大大的減少硬碟的空間,也就是docker非常強調的–輕量化

想要了解docker,底下有兩個東西一定要先搞清楚,這是docker的基本核心概念

1.Image:

相當於以前VM的那塊安裝光碟,因此只要有這塊光碟就可以馬上造出很多一模一樣的環境。能快速打造深度學習環境的關鍵就是這塊光碟,因為官方通常都會把各種版本的光碟打包好,這時只要輕輕的下指令就把光碟下載下來並且快速安裝。

底下是Tensorflow官方針對各個版本建立的Image伺服器庫: https://hub.docker.com/r/tensorflow/tensorflow/

  • Layer by Layer

Docker Images的另一個特點是採取Layer的方式來建立的,類似git的機制,相同的東西就不會重覆建構只會紀錄不一樣的內容,舉個例子讓大家比較可以實際理解這個過程,例如Base Image可能是Ubuntu的光碟,Layer A可能是Nvidia官方建立的cuda環境Image,Layer B可能是Tensorflow官方建立的環境Image。Nvidia在構建cuda環境的的時候不會從頭到尾自己建立,一定會從某個基礎版本開始往上構建,而這個基礎的版本就是Ubuntu,底下是我截自nvidia官方網站的dockerfile,從紅線的地方就可以清楚的知道這個Image是基於哪個版本往上構建的。至於Tensorflow Image也是同樣的概念,大家有興趣可以自己找找是從哪一個Base Layer為基礎開始建立的。

像這樣一層一層的建立Image方式可以節省許多空間,舉例來說,今天如果要從官網上拉下Tensorflow的Image,但docker已經偵測到底層的base image–Ubuntu已經存在你的電腦中了,那麼docker就不會再下載ubuntu-image的相關內容,只會下載你電腦中沒有的項目,無形中就會大大提升下載Image的速度。

2.Container:

中文稱做容器,對比於VM來說就是一個一個的虛擬機,只要擁有一個Image,分分鐘鐘就能建造好幾個容器出來,每個容器都還能執行各自不同的作業

三.安裝nvidia-docker環境

由於我們要使用的硬體裝置不只有基本的硬碟、CPU…等基本裝置,我們需要的是跑深度學習最重要的–GPU顯示卡,這部分原始版本的docker並不能滿足自由調控Nvidia-GPU的需求,因此必須從遵照nvidia官網的指示下載nvidia-docker,而nvidia-docker又是以docker-ce or ee為基礎建立的,因此在裝nvidia-docker之前還必須裝docker-ce or docker-ee版本才能順利運行,以下是安裝的詳細步驟

1.移除舊版本docker

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers 
# step 1: 
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f 
# step 2: 
sudo apt-get purge -y nvidia-docker 

2.安裝docker ce

# step1:增加docker套件庫來源 
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common 
# step2: 
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 
# step3: 
sudo apt-get update 
# step4:安裝docker-ce,需指定版本,不然安裝nvidia-docker2時會報錯 
sudo apt-get install docker-ce=18.03.1~ce-0~ubuntu 

3.安裝nvidia docker

# step 1:Add the package repositories 
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 
# step 2: 
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ 
sudo tee /etc/apt/sources.list.d/nvidia-docker.list 
# step 3: 
sudo apt-get update 
# step 4:Install nvidia-docker2 
sudo apt-get install -y nvidia-docker2 
# step 5:Reload the Docker daemon configuration 
sudo pkill -SIGHUP dockerd 

4.Test nvidia-docker

# Test nvidia-smi with the latest official CUDA image 
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi 

看到以下畫面就代表安裝成功了,這時候就可以上官網抓取想要的Image來佈署了

四.使用Docker

1.抓取Tensorflow Image


假設我要抓的是Tensorflow的最新GPU版本,那麼只要執行以下命令即可

docker pull tensorflow/tensorflow:latest-gpu-py3

下圖就是顯示正在抓的畫面,可以看到Image是採取Layer by Layer的方式建立,那些顯示Already exists的就是代表這些資料本地端已經存在了,不需要再下載,而其它的就是需要慢慢下載的項目

2.執行Image,產生container

sudo docker run -it tensorflow/tensorflow:latest-gpu-py3 /bin/bash

如下圖所示,執行docker run指令之後就可以直接進入容器中,而容器內的組成就是一整個Ubuntu系統

sudo docker ps

執行docker ps指令後可以看到本機端上所有的container狀態

五.參考資料

1.https://medium.com/@wrre/在ubuntu安裝docker及nvidia-docker-a35c1994d51e
2.https://philipzheng.gitbooks.io/docker_practice/content/image/create.html
3.https://ithelp.ithome.com.tw/articles/10191016
4.https://joshhu.gitbooks.io/dockercommands/content/index.html
5.http://www.runoob.com/docker/docker-command-manual.html

arrow
arrow
    文章標籤
    nvidia-docker
    全站熱搜

    Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()