ZStack實踐匯 | ZStack+Docker支撐GPU業務實踐

背景

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

如下圖所示:

在這裏插入圖片描述

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、安裝驅動,會自動禁止使用默認顯卡驅動。特殊情況如需手動禁用,可使用如下操作:
在這裏插入圖片描述

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-( u n a m e − r ) . i m g / b o o t / i n i t r a m f s − (uname -r).img /boot/initramfs-(unamer).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 (安裝時除了最後一項外,其他均需選擇)

在這裏插入圖片描述
在這裏插入圖片描述

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

在這裏插入圖片描述

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

yum install gcc-c++

yum install cpp

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

make

./bandwidthTest
在這裏插入圖片描述

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驅動的鏡像,用第一個即可)
在這裏插入圖片描述

7、修改配置文件:

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

{

"runtimes": {

    "nvidia": {

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

        "runtimeArgs": []

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

}

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、檢查相關依賴軟件包是否已安裝,如果缺失,可執行以下命令安裝:
在這裏插入圖片描述

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)
在這裏插入圖片描述

使用備註(躺坑日記)

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 exec -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自帶腳本測試,測試通過才能認爲顯卡狀態可用。
在這裏插入圖片描述

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
在這裏插入圖片描述

結語

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

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

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

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