讓 Kubernetes (K8s) 集群 使用 GPU

要讓?Kubernetes (K8s) 集群?使用?GPU,并且節點是?KVM 虛擬化?出來的,需要確保以下幾點:

  1. KVM 虛擬機透傳 GPU(PCIe Passthrough)

  2. 宿主機和 K8s 節點正確安裝 NVIDIA 驅動

  3. K8s 集群安裝?nvidia-device-plugin

  4. Pod 配置 GPU 資源請求


1. KVM 虛擬機透傳 GPU(PCIe Passthrough)

要讓 KVM 虛擬機直接訪問 GPU,必須啟用?PCIe Passthrough(VFIO 直通)。

步驟 1:宿主機啟用 IOMMU

編輯?/etc/default/grub,修改?GRUB_CMDLINE_LINUX

GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"  # Intel CPU
# 或
GRUB_CMDLINE_LINUX="amd_iommu=on iommu=pt"    # AMD CPU

更新 GRUB 并重啟:

sudo update-grub
sudo reboot

驗證 IOMMU 是否啟用:

dmesg | grep -i iommu
# 應看到類似輸出:
# DMAR: IOMMU enabled

步驟 2:屏蔽宿主機 GPU 驅動

echo "options vfio-pci ids=10de:13c2,10de:0fbb" | sudo tee /etc/modprobe.d/vfio.conf  # 替換 `ids` 為你的 GPU PCI ID(用 `lspci -nn | grep NVIDIA` 查)
echo "vfio-pci" | sudo tee /etc/modules-load.d/vfio-pci.conf
sudo update-initramfs -u
sudo reboot

驗證 GPU 是否綁定到?vfio-pci

lspci -nnk -d 10de:
# 應顯示 `Kernel driver in use: vfio-pci`

步驟 3:KVM 虛擬機配置 GPU 直通

使用?virt-manager?或?virsh?給虛擬機添加 PCI 設備:

virsh edit <vm-name>

添加:

<hostdev mode='subsystem' type='pci' managed='yes'><source><address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/></source>
</hostdev>

(替換?bus/slot/function?為?lspci?查到的 GPU PCI 地址)


2. K8s 節點安裝 NVIDIA 驅動

在?每個 K8s 節點(包括 KVM 虛擬機)?上安裝 NVIDIA 驅動:

# Ubuntu/Debian
sudo apt install -y nvidia-driver-535 nvidia-dkms-535  # 替換為適合的驅動版本
sudo reboot# 驗證
nvidia-smi

如果?nvidia-smi?無輸出,檢查:

  • KVM 直通是否成功(lspci -nnk | grep NVIDIA

  • 驅動是否正確安裝(dkms status


3. K8s 集群安裝?nvidia-device-plugin

方法 1:使用 Helm(推薦)

helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
helm install --generate-name nvidia/nvidia-device-plugin

方法 2:直接部署 DaemonSet

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

檢查是否正常運行:

kubectl get pods -n kube-system | grep nvidia
kubectl describe node <node-name> | grep nvidia.com/gpu

4. 在 Pod 中使用 GPU

在 Pod 的?resources.requests?中申請 GPU:

apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:containers:- name: cuda-containerimage: nvidia/cuda:12.2.0-base-ubuntu22.04command: ["sleep", "infinity"]resources:limits:nvidia.com/gpu: 1  # 申請 1 個 GPU

部署并驗證:

kubectl apply -f gpu-pod.yaml
kubectl exec -it gpu-pod -- nvidia-smi

5. 驗證 K8s GPU 支持

檢查節點 GPU 資源:

kubectl describe node <node-name> | grep -A 10 "Capacity"

輸出應包含:

Capacity:nvidia.com/gpu:  1
Allocatable:nvidia.com/gpu:  1

常見問題

Q1:?nvidia-device-plugin?Pod CrashLoopBackOff

  • 檢查 KVM 直通是否成功(nvidia-smi?是否能在虛擬機內運行)。

  • 檢查?kubectl logs <nvidia-device-plugin-pod>?是否有錯誤。

Q2: Pod 無法調度(0/1 nodes are available: 1 Insufficient nvidia.com/gpu

  • 確認節點有 GPU(kubectl describe node)。

  • 檢查?nvidia-device-plugin?是否正常運行。

Q3: KVM 虛擬機無法識別 GPU

  • 檢查?lspci -nn | grep NVIDIA?是否顯示 GPU。

  • 確保?vfio-pci?正確綁定(dmesg | grep vfio)。


總結

步驟操作
1. KVM GPU 直通啟用 IOMMU +?vfio-pci
2. 節點安裝驅動nvidia-driver?+?nvidia-smi?驗證
3. K8s 安裝插件nvidia-device-plugin
4. Pod 申請 GPUresources.limits: nvidia.com/gpu: 1

如果你的 KVM 虛擬機成功識別 GPU,并且 K8s 節點能運行?nvidia-smi,那么 K8s 集群就可以調度 GPU 任務!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86553.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86553.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android第十七次面試總結(Java數據結構)

一、Java 集合體系核心架構與高頻考點 1. 集合體系架構圖 Java集合框架 ├─ Collection&#xff08;單列集合&#xff09; │ ├─ List&#xff08;有序、可重復&#xff09; │ │ ├─ ArrayList&#xff08;動態數組&#xff0c;隨機訪問快&#xff09; │ │ ├─…

Linux 刪除登錄痕跡

本文介紹相對徹底的刪除 Linux 的登錄痕跡&#xff0c;操作前確保已經可以拿到能提權ROOT令牌的系統管理權限。 當然&#xff0c;仍可以先查閱以下文章。 Linux 刪除用戶終端命令行操作記錄-CSDN博客 1、清楚當前會話記錄 history -c # 清空當前終端內存中的歷史命令 2、永…

Lighttpd 配置選項介紹

根據提供的 Lighttpd 配置選項文檔&#xff08;https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ConfigurationOptions &#xff09;&#xff0c;以下是所有配置選項的詳細解釋、作用及適用場景&#xff0c;按模塊分組說明&#xff1a; 以下是對 Lighttpd 配置選項 …

解決本地部署 SmolVLM2 大語言模型運行 flash-attn 報錯

出現的問題 安裝 flash-attn 會一直卡在 build 那一步或者運行報錯 解決辦法 是因為你安裝的 flash-attn 版本沒有對應上&#xff0c;所以報錯&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下載對應版本&#xff0c;cu、torch、cp 的版本一定要對…

Python 訓練營打卡 Day 40-訓練和測試的規范寫法

一.單通道圖片的規范寫法 以之前的MNIST數據集為例 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加載數據的工具 from torchvision import datasets, transforms # t…

Java 枚舉(Enum)的使用說明

在 Java 中&#xff0c;枚舉&#xff08;Enum&#xff09;是一種特殊的數據類型&#xff0c;用于定義一組固定的命名常量。它比傳統的常量&#xff08;如 public static final&#xff09;更安全、更靈活&#xff0c;且支持面向對象特性。以下是枚舉的詳細用法&#xff1a; 1. …

Docker部署Nginx-UI

使用如下命令拉取運行nginx-ui軟件 docker run -dit \ --namenginx-ui \ --restartalways \ -e TZAsia/Shanghai \ -v /mnt/user/appdata/nginx:/etc/nginx \ -v /mnt/user/appdata/nginx-ui:/etc/nginx-ui \ -v /var/run/docker.sock:/var/run/docker.sock \ -…

OkHttp 3.0源碼解析:從設計理念到核心實現

本文通過深入分析OkHttp 3.0源碼&#xff0c;揭示其高效HTTP客戶端的實現奧秘&#xff0c;包含核心設計理念、關鍵組件解析、完整工作流程及實用技巧。 一、引言&#xff1a;為什么選擇OkHttp&#xff1f; 在Android和Java生態中&#xff0c;OkHttp已成為HTTP客戶端的標準選擇…

洛谷P12170 [藍橋杯 2025 省 Python B] 攻擊次數

題目傳送門 思路 首先定義一個數 n n n ,初值為 2025 2025 2025,從第一回合開始,三個英雄持續攻擊,攻擊方式為: 第一個英雄: 每回合攻擊 5 5 5

百度之星2021——BD202104 萌新

輸入格式&#xff1a; 本題有多組測試數據。 第一行一個數 T (1 ≤ T ≤ 1000) 表示一共有 T 組數據。對于每一組數據&#xff0c;輸入一行兩個數 a,b (1 ≤ a,b ≤ 1000000000)。 輸出格式&#xff1a; 對每組數據&#xff0c;輸出一行兩個數分別表示最小與最大的 c&#xff0…

R語言ICU患者死亡率預測實戰

【圖書推薦】《R語言醫學數據分析實踐》-CSDN博客 《R語言醫學數據分析實踐 李丹 宋立桓 蔡偉祺 清華大學出版社9787302673484》【摘要 書評 試讀】- 京東圖書 (jd.com) 預測ICU患者死亡率對比較藥物的療效、比較護理的有效性、比較手術的有效性有重要意義&#xff0c;利用機…

leetcode240-搜索二維矩陣

leetcode 240 思路 1. 矩陣特性 首先&#xff0c;利用矩陣的特性是解題的關鍵&#xff1a; 每行的元素遞增每列的元素遞增 這意味著&#xff0c;如果我們在矩陣中從右上角或左下角開始搜索&#xff0c;可以有效縮小搜索范圍 2. 從右上角開始搜索 將搜索的起點定位在矩陣…

Linux相關概念和易錯知識點(42)(TCP的連接管理、可靠性、面臨復雜網絡的處理)

目錄 1.TCP的連接管理機制&#xff08;1&#xff09;三次握手①握手過程②對握手過程的理解 &#xff08;2&#xff09;四次揮手&#xff08;3&#xff09;握手和揮手的觸發&#xff08;4&#xff09;狀態切換①揮手過程中狀態的切換②握手過程中狀態的切換 2.TCP的可靠性&…

【web應用】若依框架:若依框架中的頁面跳轉簡介

文章目錄 ?前言1. 后端控制器跳轉2. 前端路由跳轉3. 菜單配置跳轉4. 權限控制跳轉5. 常見跳轉路徑 ?一、主目錄頁面跳轉?二、菜單目錄跳轉?總結 標題詳情作者JosieBook頭銜CSDN博客專家資格、阿里云社區專家博主、軟件設計工程師博客內容開源、框架、軟件工程、全棧&#x…

MS9292+MS9332 HD/DVI轉VGA轉換器+HD環出帶音頻

MS9292MS9332是一款HD/DVI轉VGA轉換器HD環出帶音頻的視頻轉換方案。支持HD/DVI輸入&#xff0c;VGA輸出和HD環出&#xff0c;HD/DVI輸入最高支持1920120060Hz&#xff0c;VGA輸出最高支持1920120060Hz&#xff0c;HD環出最高支持4K30Hz。該方案已實現量產&#xff0c;并提供完善…

C++初階-list的模擬實現(難度較高)

1.list&#xff08;容器&#xff0c;不是類&#xff09;模擬實現基本結構 這個實現是和源碼的實現不同的&#xff0c;不要進行強制類型轉換了&#xff0c;很麻煩。我們把定義放在.h文件中&#xff0c;在.cpp中放測試代碼。 注&#xff1a;這個基本結構之后會改變&#xff0c;…

【ROS】Nav2源碼之nav2_behavior_tree-行為樹節點列表

1、行為樹節點分類 在 Nav2(Navigation2)的行為樹框架中,行為樹節點插件按照功能分為 Action(動作節點)、Condition(條件節點)、Control(控制節點) 和 Decorator(裝飾節點) 四類。 1.1 動作節點 Action 執行具體的機器人操作或任務,直接與硬件、傳感器或外部系統…

【iOS】cell的復用以及自定義cell

【iOS】cell的復用以及自定義cell 文章目錄 【iOS】cell的復用以及自定義cell前言cell的復用手動&#xff08;非注冊&#xff09;自動&#xff08;注冊&#xff09; 自定義cell 前言 cell的復用及自定義cell是UITableView或UICollectionView的一個重要優化機制,當用戶滾動視圖…

深度學習之模型壓縮三駕馬車:基于ResNet18的模型剪枝實戰(2)

前言 《深度學習之模型壓縮三駕馬車&#xff1a;基于ResNet18的模型剪枝實戰&#xff08;1&#xff09;》里面我只是提到了對conv1層進行剪枝&#xff0c;只是為了驗證這個剪枝的整個過程&#xff0c;但是后面也有提到&#xff1a;僅裁剪 conv1層的影響極大&#xff0c;原因如…

傳輸層協議:UDP

目錄 1、概念 2、報文結構 3、核心特性 3.1 無連接 3.2 不可靠交付 3.3 面向數據報 3.4 輕量級&高效 3.5 支持廣播和組播 4、典型應用場景 5、優缺點分析 6、與TCP的區別 1、概念 UDP&#xff08;User Datagram Protocol&#xff0c;用戶數據報協議&#xff09…