<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在 Kubernetes 上調(diào)度 GPU 資源

          共 3437字,需瀏覽 7分鐘

           ·

          2021-10-18 08:49

          Kubernetes 支持對(duì)節(jié)點(diǎn)上的 AMD 和 NVIDIA 的 GPU 進(jìn)行管理,目前處于實(shí)驗(yàn)狀態(tài)。

          • 用戶如何在不同的 Kubernetes 版本中使用 GPU,以及當(dāng)前存在的一些限制。


          1. 使用設(shè)備插件

          Kubernetes 實(shí)現(xiàn)了 Device Plugins[1] 以允許 Pod 訪問類似 GPU 這類特殊的硬件功能特性。作為運(yùn)維管理人員,你要在節(jié)點(diǎn)上安裝來自對(duì)應(yīng)硬件廠商的 GPU 驅(qū)動(dòng)程序,并運(yùn)行來自 GPU 廠商的對(duì)應(yīng)的設(shè)備插件。

          • AMD - deploying-amd-gpu-device-plugin[2]
          • NVIDIA - deploying-nvidia-gpu-device-plugin[3]

          當(dāng)以上條件滿足時(shí),Kubernetes 將暴露 amd.com/gpunvidia.com/gpu 為可調(diào)度的資源,可以通過請求 .com/gpu 資源來使用 GPU 設(shè)備。不過,使用 GPU 時(shí),在如何指定資源需求這個(gè)方面還是有一些限制的:

          • GPUs 只能設(shè)置在 limits 部分,這意味著:
            • 不可以僅指定 requests 而不指定 limits
            • 可以同時(shí)指定 limitsrequests,不過這兩個(gè)值必須相等
            • 可以指定 GPUlimits 而不指定其 requestsK8S 將使用限制值作為默認(rèn)的請求值
          • 容器(Pod)之間是不共享 GPU 的,GPU 也不可以過量分配
          • 每個(gè)容器可以請求一個(gè)或者多個(gè) GPU,但是用小數(shù)值來請求部分 GPU 是不允許的
          #?need?2?GPUs
          apiVersion:?v1
          kind:?Pod
          metadata:
          ??name:?gpu-pod
          spec:
          ??containers:
          ????-?name:?cuda-container
          ??????image:?nvcr.io/nvidia/cuda:9.0-devel
          ??????resources:
          ????????limits:
          ??????????nvidia.com/gpu:?2
          ????-?name:?digits-container
          ??????image:?nvcr.io/nvidia/digits:20.12-tensorflow-py3
          ??????resources:
          ????????limits:
          ??????????nvidia.com/gpu:?2

          2. 部署 AMD GPU 設(shè)備插件

          節(jié)點(diǎn)需要使用 AMDGPU 資源的話,需要先安裝 k8s-device-plugin[4] 這個(gè)插件,并且需要 K8S 節(jié)點(diǎn)必須預(yù)先安裝 AMD GPULinux 驅(qū)動(dòng)。

          #?安裝顯卡插件
          $?kubectl?create?-f?https://raw.githubusercontent.com/RadeonOpenCompute/k8s-device-plugin/r1.10/k8s-ds-amdgpu-dp.yaml

          3. 部署 NVIDIA GPU 設(shè)備插件

          節(jié)點(diǎn)需要使用 NVIDIAGPU 資源的話,需要先安裝 k8s-device-plugin 這個(gè)插件,并且需要事先滿足下面的條件:

          • Kubernetes 的節(jié)點(diǎn)必須預(yù)先安裝了 NVIDIA 驅(qū)動(dòng)
          • Kubernetes 的節(jié)點(diǎn)必須預(yù)先安裝 nvidia-docker2.0
          • Docker 的默認(rèn)運(yùn)行時(shí)必須設(shè)置為 nvidia-container-runtime,而不是 runc
          • NVIDIA 驅(qū)動(dòng)版本大于或者等于 384.81 版本
          #?安裝nvidia-docker2.0工具
          $?distribution=$(.?/etc/os-release;echo?$ID$VERSION_ID)
          $?curl?-s?-L?https://nvidia.github.io/nvidia-docker/gpgkey?|?sudo?apt-key?add?-
          $?curl?-s?-L?https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list?|?sudo?tee?/etc/apt/sources.list.d/nvidia-docker.list
          $?sudo?apt-get?update?&&?sudo?apt-get?install?-y?nvidia-docker2
          $?sudo?systemctl?restart?docker

          #?安裝nvidia-container-runtime運(yùn)行時(shí)
          $?cat?/etc/docker/daemon.json
          {
          ????"default-runtime":?"nvidia",
          ????"runtimes":?{
          ????????"nvidia":?{
          ????????????"path":?"/usr/bin/nvidia-container-runtime",
          ????????????"runtimeArgs":?[]
          ????????}
          ????}
          }

          #?安裝顯卡插件
          $?kubectl?create?-f?https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml

          也可以使用 helm 或 docker 安裝:

          $?helm?repo?add?nvdp?https://nvidia.github.io/k8s-device-plugin
          $?helm?repo?update
          $?helm?install?--version=0.9.0?--generate-name?nvdp/nvidia-device-plugin

          #?也可以使用docker安裝
          $?docker?run?-it?\
          ????--security-opt=no-new-privileges?\
          ????--cap-drop=ALL?--network=none?\
          ????-v?/var/lib/kubelet/device-plugins:/var/lib/kubelet/device-plugins?\
          ????nvcr.io/nvidia/k8s-device-plugin:devel

          4. 結(jié)論總結(jié)陳述

          顯卡插件,就是在我們通過在配置文件里面指定如下字段之后,啟動(dòng) pod 的時(shí)候,系統(tǒng)給為我們的服務(wù)分配對(duì)應(yīng)需要數(shù)量的顯卡數(shù)量,讓我們的程序可以使用顯卡資源。

          • amd.com/gpu
          • nvidia.com/gpu

          需要注意的是,第一次安裝顯卡驅(qū)動(dòng)的話,是不用重啟服務(wù)器的,后續(xù)更新驅(qū)動(dòng)版本的話,則是需要的。但是建議第一次安裝驅(qū)動(dòng)之后,最好還是重啟下,防止意外情況的出現(xiàn)和發(fā)生。

          原文鏈接:https://www.escapelife.site/posts/b7a3f647.html

          參考資料

          [1]

          Device Plugins: https://kubernetes.io/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/

          [2]

          AMD - deploying-amd-gpu-device-plugin: https://kubernetes.io/zh/docs/tasks/manage-gpus/scheduling-gpus/#deploying-amd-gpu-device-plugin

          [3]

          NVIDIA - deploying-nvidia-gpu-device-plugin: https://kubernetes.io/zh/docs/tasks/manage-gpus/scheduling-gpus/#deploying-nvidia-gpu-device-plugin

          [4]

          k8s-device-plugin: https://github.com/RadeonOpenCompute/k8s-device-plugin

          瀏覽 107
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.666.日本高清 | 国产中文另类 | 欧美日韩电影一区二区三区 | 亚洲第一毛片 | 九七免费人妻 |