背景
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-(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 (安裝時除了最後一項外,其他均需選擇)
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的願景就是:“讓每一家企業都擁有自己的雲。”