場景需求
最近新到貨一台GPU伺服器,系統是Ubuntu20.04,需要在伺服器中搭建個K8S叢集來做一些容器相關的業務場景,雖然他的CPU配置蠻高,但是它的GPU也不能浪費,是以本文就記錄下利用起他GPU的全流程。
nvidia-docker
nvidia-docker是英偉達出品的一款産品,我相信能找到我這篇藏在犄角旮旯裡的破文章的人,肯定已經了解了他和docker之間的異同,這裡提供個傳送門知道英偉達官網的相關介紹>>>戳這裡<<<(其實就是我懶得寫了)。
英偉達驅動
要想使用GPU資源,那麼你首先得有GPU,有了GPU,還需要安裝相對應的驅動才能正常使用。
檢視GPU型号
在Ubuntu中,可以使用以下指令檢視GPU型号:
ubuntu-drivers devices
這裡我的運作結果如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iY5ATOyQGO4gjYmFjY0kDZ4QWZ5QWOxQWN0MjM5MDNm9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
(還是一塊RTX2070 SUPER!!想拆下來帶回家裝到我的電腦上玩吃雞)
其中可以看到倒數第三行的recommended(推薦的意思),這表明推薦安裝的驅動是:
nvidia-driver-470 - distro non-free
下載下傳驅動
這裡需要到英偉達的官方網站下載下傳驅動>>>NVIDIA驅動官網<<<,進入頁面之後按照各自查詢到的顯示卡型号填寫:
點選搜尋之後可以看到具體的驅動說明,點選下載下傳即可:
安裝驅動
一般預設的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:
之後我們在這個負載容器内使用tensorflow來測試下是否能調取到GPU:
首先執行python3進入python互動終端,輸入一下代碼:
import tensorflow as tf
print('GPU', tf.test.is_gpu_available())
若顯示GPU True則表明排程成功。
如果在以上步驟中,沒有安裝驅動、沒有安裝K8S的英偉達支援插件等等都會導緻無法排程,顯示GPU False。
以上就是簡單的記錄,後續有時間将會更新文中未搬遷過來的内容,完結撒花。