Kubernetes1.11.1 使用Nvidia顯卡配置方法

1、安裝

1.一、kubernetes硬件支持問題說明

Kubernetes目前主要在很小程度上支持CPU和內存的發現。Kubelet自己處理的設備很是少。
Kubernetes對於硬件都使用都依賴於硬件廠商的自主研發kubernetes插件,經過硬件廠商的插件從而讓kubernetes進行硬件支持。git

實現的邏輯以下:
github

1.二、適用於Kubernetes的NVIDIA設備插件說明

Kubernetes的NVIDIA設備插件是一個Daemonset,容許您自動:docker

公開羣集的每一個節點上的GPU數量
跟蹤GPU的運行情況
在Kubernetes集羣中運行啓用GPU的容器。
該存儲庫包含NVIDIA的Kubernetes設備插件的官方實現。json

1.三、使用Kubernetes的NVIDIA設備插件條件(官方)

運行Kubernetes NVIDIA設備插件的先決條件列表以下所述:ubuntu

  • NVIDIA驅動程序〜= 361.93
  • nvidia-docker version> 2.0(請參閱如何安裝及其先決條件)
  • docker配置了nvidia做爲默認運行時。
  • Kubernetes版本>= 1.11

運行nvidia-docker 2.0 先決條件列表以下所述:centos

  • 內核版本> 3.10的GNU / Linux x86_64
  • Docker> = 1.12
  • 採用架構的NVIDIA GPU> Fermi(2.1)
  • NVIDIA驅動程序〜= 361.93(舊版本未經測試)

1.四、刪除nvidia-docker 1.0

在繼續以前,必須完全刪除nvidia-docker軟件包的1.0版。
您必須中止並刪除全部使用nvidia-docker 1.0啓動的容器。api

1.4.一、Ubuntu發行版刪除nvidia-docker 1.0

docker volume ls -q -f driver = nvidia-docker | xargs -r -I {} -n1 docker ps -q -a -f volume = {} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker

1.4.二、CentOS發行版刪除nvidia-docker 1.0

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo yum remove nvidia-docker

1.五、安裝nvidia-docker 2.0

確保已爲您的發行版安裝了NVIDIA驅動程序和受支持的Docker 版本(請參閱先決條件)。
若是有自定義/etc/docker/daemon.json,則nvidia-docker2程序包可能會覆蓋它,先作好相關備份架構

1.5.一、Ubuntu發行版安裝nvidia-docker 2.0

安裝nvidia-docker2軟件包並從新加載Docker守護程序配置:學習

sudo apt-get install nvidia-docker2
sudo pkill -SIGHUP dockerd

1.5.二、CentOS發行版安裝nvidia-docker 2.0

安裝nvidia-docker2軟件包並從新加載Docker守護程序配置:測試

sudo yum install nvidia-docker2
sudo pkill -SIGHUP dockerd

1.5.三、較舊版本的Docker安裝nvidia-docker 2.0(不推薦

若是必需要使用舊版本的docker進行安裝nvidia-docker 2.0
必須固定nvidia-docker2以及nvidia-container-runtime安裝時的版本,例如:

sudo apt-get install -y nvidia-docker2=2.0.1+docker1.12.6-1 nvidia-container-runtime=1.1.0+docker1.12.6-1

使用

apt-cache madison nvidia-docker2 nvidia-container-runtime

yum search --showduplicates nvidia-docker2 nvidia-container-runtime

列出可用版本。

基本用法
nvidia-docker向Docker守護程序註冊一個新的容器運行時。使用時必須選擇nvidia運行時docker run:

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
nvidia-docker 2.0安裝和使用方法詳見《docker在Ubuntu下1小時快速學習》

2、配置

2.一、配置docker

須要啓用nvidia運行時做爲節點上的默認運行時。須要編輯docker守護進程配置文件,該文件一般出如今/etc/docker/daemon.json,配置內容以下:

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
若是runtimes不存在,請從新安裝nvidia-docker,或參考nvidia-docker官方頁面

2.二、Kubernetes啓用GPU支持

在您但願使用的全部 GPU節點上啓用此選項後,您能夠經過部署如下Daemonset在羣集中啓用GPU支持:

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

2.三、運行GPU做業

可使用資源屬性nvidia.com/gpu配置,來經過容器級資源使用NVIDIA GPU要求:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
    - name: cuda-container
      image: nvidia/cuda:9.0-devel
      resources:
        limits:
          nvidia.com/gpu: 2 #請求2個GPU
    - name: digits-container
      image: nvidia/digits:6.0
      resources:
        limits:
          nvidia.com/gpu: 2 #請求2個GPU
警告: 若是在使用帶有NVIDIA映像的設備插件時,未配置GPU請求個數,則宿主機上全部GPU都將暴露在容器內。

2.四、Kubernetes運行GPU容器

2.4.一、使用告示

  • Nvidia的GPU設備插件功能是Kubernetes v1.11的測試版
  • NVIDIA設備插件仍被視爲測試版而且缺失
    • 更全面的GPU健康檢查功能
    • GPU清理功能
    • ...
  • 僅爲官方NVIDIA設備插件提供支持。

2.4.二、kubernetes在依賴Docker下運行GPU容器

一、獲取鏡像

方法1,從Docker Hub中提取預構建的映像:

docker pull nvidia/k8s-device-plugin:1.11

方法2,不使用鏡像,採用官方build方法:

docker build -t nvidia/k8s-device-plugin:1.11 https://github.com/NVIDIA/k8s-device-plugin.git#v1.11

方法3,採用自定義build文件方法:

git clone https://github.com/NVIDIA/k8s-device-plugin.git && cd k8s-device-plugin
docker build -t nvidia/k8s-device-plugin:1.11 .

二、在本地運行

docker run --security-opt=no-new-privileges --cap-drop=ALL --network=none -it -v /var/lib/kubelet/device-plugins:/var/lib/kubelet/device-plugins nvidia/k8s-device-plugin:1.11

三、kubernetes部署爲守護進程集:

kubectl create -f nvidia-device-plugin.yml

2.4.三、kubernetes不依賴Docker下運行GPU容器

一、構建

C_INCLUDE_PATH=/usr/local/cuda/include LIBRARY_PATH=/usr/local/cuda/lib64 go build

二、在本地運行

./k8s-device-plugin
相關文章
相關標籤/搜索