私有云如何運行深度學習?看ZStack+Docker支撐GPU業務實踐

QQ截圖20201123115905.jpg

 

前景linux

ZStack所聚焦的IaaS,做爲雲計算裏的底座基石,可以更好的實現物理資源隔離,以及服務器等硬件資源的統一管理,爲上層大數據、深度學習Tensorflow等業務提供了穩定可靠的基礎環境。c++

近年來,雲計算髮展探索出了有別於傳統虛擬化、更貼近於業務的PaaS型服務,該類型依賴於docker實現,如K8S等典型的容器雲,能夠直接從鏡像商店下載封裝好業務軟件的鏡像,更加快捷地實現業務部署。git

此外,GPU場景也是客戶業務的典型場景,相比於CPU的運算特色,在數據分析、深度學習有着明顯的優點。github

ZStack是如何與容器結合,以IaaS+PaaS的組合拳,爲上層業務提供支撐的呢?本篇文章帶你們瞭解一下,如何在ZStack 上部署 centos7.6 虛擬機,在虛擬機裏部署docker,以及如何使用nvidia-docker實如今容器裏調用GPU的業務場景。docker

 

環境json

虛機系統:Centos 7.6ubuntu

虛機內核:Linux 172-18-47-133 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linuxcentos

docker版本:docker-ce 19.03bash

nvidia-docker版本:nvidia-docker-1.0.11.x86_64服務器

顯卡:RTX6000

Cuda版本:10.1

顯卡驅動:418

以下圖所示:

 

QQ截圖20201123115356.jpg

 

Part 01

顯卡驅動安裝

 

1、下載對應版本的CUDA,並以此安裝驅動。CUDA已經緊密結合了NVIDIA,如下驅動在centosubuntu上面都可執行,並自帶絕大部分NVIDIA型號的顯卡驅動,實用性很是強。

wget http://plan.zstack.io/storage/iso/nvidia/cuda_10.1.168_418.67_linux.run

chmod+x http://plan.zstack.io/storage/iso/nvidia/cuda_10.1.168_418.67_linux.run

GPU透傳給虛擬機的操做步驟,詳見在zstack.io官網可搜索到的《GPU實踐手冊》。

特別提醒:平臺CPU模式必定要設置成passthrough!不然後續沒法正常調用GPU作任何操做。

 

2、安裝驅動,會自動禁止使用默認顯卡驅動。特殊狀況如需手動禁用,可以使用以下操做:

QQ截圖20201123115404.jpg

echo 「blacklist nouveau」 >>/usr/lib/modprobe.d/dist-blacklist.conf

echo 「options nouveau modeset=0」 >>/usr/lib/modprobe.d/dist-blacklist.conf

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

dracut /boot/initramfs-$(uname -r).img $(uname -r)

reboot

lsmod|grep nouveau (爲空則不加載默認顯卡驅動)

 

3./cuda_10.1.168_418.67_linux.run (安裝時除了最後一項外,其餘均需選擇)

 

QQ截圖20201123115413.jpg

QQ截圖20201123115426.jpg

4、安裝完成就表示驅動已安裝完畢,能夠執行nvidia-smi命令查看

QQ截圖20201123115449.jpg

5驅動安裝完畢後,建議採用CUDA自帶的測試工具來測試,若是測試結果顯示PASS,表示CUDA安裝成功。

yum install gcc-c++

yum install cpp

cd /root/NVIDIA_CUDA-10.1_Samples/1_Utilities/bandwidthTest/

make

./bandwidthTest

 

QQ截圖20201123115458.jpg

 

Part 02

DOCKER-CE安裝:

1、若是安裝docker,需先卸載,再安裝docker-ce

yum remove docker docker-common docker selinux docker-engine

2、配置docker-ce repo源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

3、列出能夠安裝的版本:

yum list docker-ce --showduplicates | sort -r

4、默認安裝便可,當前爲19.03版本:

yum install docker-ce (默認安裝的是Docker version 19.03.13, build 4484c46d9d

5、啓動服務及開機自啓配置:

systemctl start docker

systemctl enable docker

6、從鏡像商店搜索一個帶有GPU驅動的鏡像:

docker search nvidia (鏡像商店能夠搜索帶nvidia驅動的鏡像,用第一個便可)

QQ截圖20201123115506.jpg

7、修改配置文件:

cat >> /etc/docker/daemon.json <<EOF

{

    "runtimes": {

        "nvidia": {

            "path": "/usr/bin/nvidia-container-runtime",

            "runtimeArgs": []

        }

    }

}

EOF

 

Part 03

nividia-docker 安裝

1、配置nvidia-docker相關源:

curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

2、搜索nvidia-docker包的版本:

yum search --showduplicates nvidia-docker

3、安裝nvidia-docker

yum install nvidia-docker-1.0.1-1.x86_64

4、啓動服務,和配置開機自啓動:

systemctl start nvidia-docker; 

systemctl enable nvidia-docker;

 systemctl status nvidia-docker

(需確保nvidia-docker狀態一直正常運行,不然無正常使用)

5、檢查相關依賴軟件包是否已安裝,若是缺失,可執行如下命令安裝:

QQ截圖20201123115515.jpg

yum install libnvidia-container1

yum install nvidia-container-toolkit

yum install libnvidia-container-tools

6重啓一下docker服務:

systemctl restart docker

 

完成測試

nvidia-docker run --rm --gpus all nvidia/cuda:10.1

-base nvidia-smi (以下圖所示,即爲安裝成功。此處必須加gpus all參數 如此纔可調用GPU)

QQ截圖20201123115527.jpg

 

使用備註(躺坑日記)

a、若是須要向容器裏傳文件,參考一下方式傳CUDA軟件進容器,前面是本地文件,後面是容器id以及內部目錄位置。反過來就是從容器裏傳文件出來。

docker cp /root/cuda_10.1.168_418.67_linux.run ffb6138f3299:/mnt/1.run

b、排除容器問題,一次性清理全部容器,則使用以下命令:

docker rm -f $(docker ps -aq)

c、重裝驅動步驟:

yum remove nvidia-container-runtime

yum remove nvidia-container-toolkit

yum remove libnvidia-container-tools

yum remove nvidia-docker

./cuda_10.1.168_418.67_linux.run 

yum install nvidia-docker-1.0.1-1.x86_64

systemctl start nvidia-docker; systemctl enable nvidia-docker; systemctl status nvidia-docker

yum install libnvidia-container1

yum install nvidia-container-toolkit

yum install libnvidia-container-tools

nvidia-docker run --rm --gpus all nvidia/cuda:10.1-base nvidia-smi 再跑就能夠了

d、進入容器內部,執行操做使用以下命令:

docker -it nvidia/cuda:10.1-base /bin/bash

envidia-docker 服務異常systemctl status nvidia-docker,報錯error cuda all cuda-capable device are busy

此時問題爲,平臺CPU模式沒有改爲直通,修改後須要重啓虛擬機才能生效。經過lscpu,查看並確認虛擬機CPU必須爲物理CPU型號,而非QEMU型號CPU

fnvidia-docker 服務異常systemctl status nvidia-docker, 服務啓動後本身中止,緣由多是GPU驅動沒有裝好。必定要通過CUDA自帶腳本測試,測試經過才能認爲顯卡狀態可用。

QQ截圖20201123115535.jpg

2nvidia-docker run時報錯:若是顯示 no options [gpus] , --gpu all ,這個參數無效,報錯緣由是docker版本太低,建議使用19.03。低版本如17.03docker-ce ,由於調用 GPU參數不一樣,因此可能被識別無效。

3、報錯提示爲缺乏nvidia-container-runtime-hook,以下圖,須要執行安裝:yum install libnvidia-container1; yum install nvidia-container-toolkit-1.3.0-2.x86_64; yum install libnvidia-container-tools-1.3.0-1.x86_64

QQ截圖20201123115544.jpg

 

結語

歷經一天時間,完成了ubuntu下和centos下的docker+ GPU +nvidia-docker的實踐安裝使用,中間簡單的安裝了一個Rancher PaaS平臺,進行容器管理。

IaaSPaaS都有着各自鮮明的優點,不少人總有這麼一個疑問:到底該選擇IaaS的資源隔離,來更好的管控硬件、迎合將來的混合雲市場?仍是選擇PaaS,讓應用更輕便、以釋放人力到本身的核心業務上呢?最佳答案是:爲什麼不全都要呢。ZStack IaaS結合PaaS實現IT改造,增長對IT的每個細節掌控,共同撐起雲計算的將來。

ZStack的願景就是:「讓每一家企業都擁有本身的雲。」

相關文章
相關標籤/搜索