前景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
以下圖所示:
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-$(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": []
}
}
}
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 -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的願景就是:「讓每一家企業都擁有本身的雲。」