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

華夏大視野發表於2020-11-24

QQ截圖20201123115905.jpg


前景

ZStack 所聚焦的IaaS ,作為雲端計算裡的底座基石,能夠更好的實現物理資源隔離,以及伺服器等硬體資源的統一管理,為上層大資料、深度學習Tensorflow 等業務提供了穩定可靠的基礎環境。

近年來,雲端計算發展探索出了有別於傳統虛擬化、更貼近於業務的PaaS 型服務,該型別依賴於docker 實現,如K8S 等典型的容器雲,可以直接從映象商店下載封裝好業務軟體的映象,更加快捷地實現業務部署。

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

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


環境

虛機系統: Centos 7.6

虛機核心: 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/Linux

docker 版本: docker-ce 19.03

nvidia-docker 版本: nvidia-docker-1.0.11.x86_64

顯示卡: RTX6000

Cuda 版本: 10.1

顯示卡驅動: 418

如下圖所示:

 

QQ截圖20201123115356.jpg


Part 01

顯示卡驅動安裝

 

1 、下載對應版本的CUDA ,並以此安裝驅動。CUDA 已經緊密結合了NVIDIA ,以下驅動在centos ubuntu 上面均可執行,並自帶絕大部分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 

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 | 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

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

此時問題為,平臺CPU 模式沒有改成直通,修改後需要重啟虛擬機器才能生效。透過lscpu ,檢視並確認虛擬機器CPU 必須為物理CPU 型號,而非QEMU 型號CPU

f nvidia-docker  服務異常 systemctl status nvidia-docker , 服務啟動後自己停止,原因可能是 GPU 驅動沒有裝好。一定要經過 CUDA 自帶指令碼測試,測試透過才能認為顯示卡狀態可用。

QQ截圖20201123115535.jpg

2 nvidia-docker run 時報錯:如果顯示 no options [gpus] , --gpu all  ,這個引數無效,報錯原因是docker 版本過低,建議使用19.03 。低版本如17.03 docker-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 平臺,進行容器管理。

IaaS PaaS 都有著各自鮮明的優勢,很多人總有這麼一個疑問:到底該選擇IaaS 的資源隔離,來更好的管控硬體、迎合未來的混合雲市場?還是選擇PaaS ,讓應用更輕便、以釋放人力到自己的核心業務上呢?最佳答案是:為何不全都要呢。ZStack IaaS 結合PaaS 實現IT 改造,增加對IT 的每一個細節掌控,共同撐起雲端計算的未來。

ZStack的願景就是:“讓每一家企業都擁有自己的雲。”



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984952/viewspace-2736367/,如需轉載,請註明出處,否則將追究法律責任。

相關文章