天天看點

Ubuntu實作K8S排程NVIDIA GPU小記

場景需求

最近新到貨一台GPU伺服器,系統是Ubuntu20.04,需要在伺服器中搭建個K8S叢集來做一些容器相關的業務場景,雖然他的CPU配置蠻高,但是它的GPU也不能浪費,是以本文就記錄下利用起他GPU的全流程。

nvidia-docker

nvidia-docker是英偉達出品的一款産品,我相信能找到我這篇藏在犄角旮旯裡的破文章的人,肯定已經了解了他和docker之間的異同,這裡提供個傳送門知道英偉達官網的相關介紹>>>戳這裡<<<(其實就是我懶得寫了)。

英偉達驅動

要想使用GPU資源,那麼你首先得有GPU,有了GPU,還需要安裝相對應的驅動才能正常使用。

檢視GPU型号

在Ubuntu中,可以使用以下指令檢視GPU型号:

ubuntu-drivers devices
           

這裡我的運作結果如下:

Ubuntu實作K8S排程NVIDIA GPU小記

(還是一塊RTX2070 SUPER!!想拆下來帶回家裝到我的電腦上玩吃雞)

其中可以看到倒數第三行的recommended(推薦的意思),這表明推薦安裝的驅動是:

nvidia-driver-470 - distro non-free

下載下傳驅動

這裡需要到英偉達的官方網站下載下傳驅動>>>NVIDIA驅動官網<<<,進入頁面之後按照各自查詢到的顯示卡型号填寫:

Ubuntu實作K8S排程NVIDIA GPU小記

點選搜尋之後可以看到具體的驅動說明,點選下載下傳即可:

Ubuntu實作K8S排程NVIDIA GPU小記

安裝驅動

一般預設的Ubuntu會為GPU安裝一個開源版本的驅動(可能有可能沒有,沒有就不用管了),現在我們有了專用的驅動,是以就需要将開源驅動給禁用掉:

sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
           

或者直接解除安裝也不是不可以:

apt-get remove --purge nvidia*
           

完事之後重新開機電腦,接下來就可以安裝驅動了,以下的驅動檔案名根據你自己的而定:

chmod 755 NVIDIA-Linux-x86_64-470.74.run
./NVIDIA-Linux-x86_64-470.74.run
           

安裝驅動時,可能會因為缺少一些依賴而導緻安裝失敗,可以在安裝失敗之後執行

apt install -f

自動安裝依賴。安裝過程中一路同意即可。

安裝過程中可能的問題:

WARNING: Unable to find suitable destination to install 32-bit compatibility libraries

執行以下指令裝以來即可:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386
           

nvidia-docker安裝

安裝nvidia-docker可以參考官網的教程>>>安裝教程<<<,我這裡實在實在實在是懶得做搬遷了:-)

建立K8S叢集

本人為了圖友善,搭建k8S使用的是rancher,之前的文章中有相關的流程,這裡不在贅述,直接到搭建完K8S叢集之後的步驟,關于搭建K8S的流程這裡給一個傳送門>>>Rancher安裝以及建立K8S叢集<<<(備用位址:>>>CSDN:Rancher安裝以及建立K8S叢集<<<)

安裝K8S的英偉達GPU插件

相關的排程方法其實K8S官網也有>>>K8S<<<,其實就是在K8S叢集中安裝一個相關的插件:

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml
           

測試

我們到dockerhub中,拉取一個tensorflow-gpu鏡像,這裡使用opensciencegrid/tensorflow-gpu:latest,這裡我使用Rancher管理界面建立了一個負載,GPU配置設定1:

Ubuntu實作K8S排程NVIDIA GPU小記

之後我們在這個負載容器内使用tensorflow來測試下是否能調取到GPU:

首先執行python3進入python互動終端,輸入一下代碼:

import tensorflow as tf
print('GPU', tf.test.is_gpu_available())
           

若顯示GPU True則表明排程成功。

Ubuntu實作K8S排程NVIDIA GPU小記

如果在以上步驟中,沒有安裝驅動、沒有安裝K8S的英偉達支援插件等等都會導緻無法排程,顯示GPU False。

以上就是簡單的記錄,後續有時間将會更新文中未搬遷過來的内容,完結撒花。