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

        共 3437字,需瀏覽 7分鐘

         ·

        2021-10-18 08:49

        Kubernetes 支持對節(jié)點上的 AMD 和 NVIDIA 的 GPU 進行管理,目前處于實驗狀態(tài)。

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


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

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

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

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

        • GPUs 只能設(shè)置在 limits 部分,這意味著:
          • 不可以僅指定 requests 而不指定 limits
          • 可以同時指定 limitsrequests,不過這兩個值必須相等
          • 可以指定 GPUlimits 而不指定其 requestsK8S 將使用限制值作為默認(rèn)的請求值
        • 容器(Pod)之間是不共享 GPU 的,GPU 也不可以過量分配
        • 每個容器可以請求一個或者多個 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é)點需要使用 AMDGPU 資源的話,需要先安裝 k8s-device-plugin[4] 這個插件,并且需要 K8S 節(jié)點必須預(yù)先安裝 AMD GPULinux 驅(qū)動。

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

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

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

        • Kubernetes 的節(jié)點必須預(yù)先安裝了 NVIDIA 驅(qū)動
        • Kubernetes 的節(jié)點必須預(yù)先安裝 nvidia-docker2.0
        • Docker 的默認(rèn)運行時必須設(shè)置為 nvidia-container-runtime,而不是 runc
        • NVIDIA 驅(qū)動版本大于或者等于 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運行時
        $?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é)陳述

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

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

        需要注意的是,第一次安裝顯卡驅(qū)動的話,是不用重啟服務(wù)器的,后續(xù)更新驅(qū)動版本的話,則是需要的。但是建議第一次安裝驅(qū)動之后,最好還是重啟下,防止意外情況的出現(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
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 港澳毛片 | 肏逼网欧美黄片免费观看 | 欧美日韩精品人妻一区二区三区 | 免费电影日本黄色 | 午夜的福利 |