在Kubernetes環(huán)境下使用Docker實(shí)現(xiàn)GPU支持的完整方案
一、背景說(shuō)明
Kubernetes 從 v1.20+ 開(kāi)始逐步默認(rèn)使用 containerd 作為運(yùn)行時(shí),不再推薦直接使用 Docker。然而,在一些已有的生產(chǎn)環(huán)境中,Docker 仍然是默認(rèn)運(yùn)行時(shí)。如果你希望在這樣的環(huán)境下運(yùn)行支持 GPU 的 AI/計(jì)算類工作負(fù)載,就需要正確配置 Docker 和 NVIDIA 的相關(guān)支持組件。
二、目標(biāo)
保留 Docker 作為容器運(yùn)行時(shí)
支持容器使用 NVIDIA GPU
允許 Kubernetes 調(diào)度 GPU 資源
能夠通過(guò) YAML 定義 GPU Pod 并正常運(yùn)行
三、環(huán)境準(zhǔn)備
Ubuntu 20.04+/CentOS 7.9+
安裝了 NVIDIA 驅(qū)動(dòng)(
nvidia-smi
正常)Kubernetes 已安裝(使用 Docker 作為運(yùn)行時(shí))
能訪問(wèn)外網(wǎng)或使用國(guó)內(nèi)代理
四、安裝 NVIDIA Container Toolkit(nvidia-docker2)
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
五、配置 Docker 支持 NVIDIA Runtime
編輯 Docker 配置文件:
sudo nano /etc/docker/daemon.json
添加以下內(nèi)容:
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } }
重啟 Docker:
sudo systemctl restart docker
六、測(cè)試 Docker 能否使用 GPU
運(yùn)行命令:
sudo docker run --rm --gpus all nvidia/12.8.1-cudnn-devel-ubuntu22.04 nvidia-smi
輸出顯卡信息即表示配置成功。
七、部署 Kubernetes GPU 支持插件
NVIDIA 官方提供了 Kubernetes GPU 插件作為 DaemonSet 運(yùn)行:
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
八、部署一個(gè) GPU Pod 測(cè)試
創(chuàng)建 YAML 文件 gpu-pod.yaml
:
apiVersion: v1 kind: Pod metadata: name: gpu-test spec: containers: - name: cuda image: nvidia/cuda:12.8.1-base resources: limits: nvidia.com/gpu: 1 command: ["nvidia-smi"]
部署:
kubectl apply -f gpu-pod.yaml kubectl logs gpu-test
成功輸出 GPU 信息,即可證明 Kubernetes GPU 配置生效。
九、常見(jiàn)問(wèn)題排查
問(wèn)題 | 原因及解決方案 |
---|---|
--gpus all 報(bào)錯(cuò) | 沒(méi)有配置 nvidia 為 Docker 的默認(rèn)運(yùn)行時(shí) |
Pod 提交后一直 Pending | 沒(méi)有可用 GPU 節(jié)點(diǎn);未部署 device plugin |
鏡像拉取超時(shí) | 網(wǎng)絡(luò)問(wèn)題或 Docker Hub 被墻,可配置國(guó)內(nèi)鏡像加速器 |
使用 containerd 的情況如何配置 GPU? | 需改用 NVIDIA Container Toolkit + containerd + hosts.toml 配置 |
十、小結(jié)
雖然 Kubernetes 官方推薦使用 containerd,但在已有 Docker 環(huán)境中,仍可以通過(guò) nvidia-docker2
和 device plugin
組合,快速支持 GPU 任務(wù)調(diào)度與運(yùn)行。只要配置得當(dāng),不更換運(yùn)行時(shí)也能實(shí)現(xiàn) GPU 加速能力。
以上就是在Kubernetes環(huán)境下使用Docker實(shí)現(xiàn)GPU支持的完整方案的詳細(xì)內(nèi)容,更多關(guān)于Kubernetes Docker實(shí)現(xiàn)GPU支持的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用 docker部署tomcat并接入skywalking的使用
這里主要介紹了使用 docker 部署 tomact 并接入 skywalking 的使用,因?yàn)樵诰W(wǎng)上并沒(méi)有查到太多相關(guān)的信息,所以這里記錄下來(lái),需要對(duì)有需求的小伙伴提供一些幫助2021-04-04Docker基于macvlan實(shí)現(xiàn)跨主機(jī)容器通信
這篇文章主要介紹了Docker基于macvlan實(shí)現(xiàn)跨主機(jī)容器通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05使用Docker將容器目錄掛載到主機(jī)上的實(shí)現(xiàn)方法
本文主要介紹了使用Docker將容器目錄掛載到主機(jī)上的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05docker部署springBoot項(xiàng)目實(shí)操(docker是什么)
Docker可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化,這篇文章主要介紹了docker部署springBoot項(xiàng)目實(shí)操,需要的朋友可以參考下2025-03-03Docker 實(shí)現(xiàn)瀏覽器里開(kāi)發(fā)Android應(yīng)用的功能
這篇文章主要介紹了Docker 實(shí)現(xiàn)瀏覽器里開(kāi)發(fā)Android應(yīng)用的功能的相關(guān)資料,這里對(duì)布置環(huán)境做了詳細(xì)的步驟,也許你能用到這樣的功能,需要的朋友可以參考下2016-11-11如何使用Docker部署FTP和Nginx并通過(guò)HTTP訪問(wèn)FTP里的文件
本文介紹了如何使用Docker部署FTP服務(wù)器和Nginx,并通過(guò)HTTP訪問(wèn)FTP中的文件,通過(guò)將FTP數(shù)據(jù)目錄掛載到Nginx容器內(nèi),Nginx可以提供文件列表和下載功能,推薦使用Docker Compose來(lái)管理容器2025-03-03優(yōu)化 Docker 鏡像大小常見(jiàn)的方式
這篇文章主要介紹了如何優(yōu)化 Docker 鏡像大小,幫助大家更好的理解和使用docker容器,感興趣的朋友可以了解下。2020-09-09