什么是 gpu-operator
用于给集群环境调度 gpu ,由 n 个子组件组成。分别如下
- gpu-operator
描述: GPU Operator 是一个 Kubernetes Operator,用于自动化 NVIDIA GPU 的配置和管理。它可以部署、管理和监控 GPU 驱动、容器工具包、设备插件等组件。
作用: 负责协调和管理整个 GPU Operator 的运行,确保 GPU 相关的组件都正确部署和配置。 - gpu-operator-1723203113-node-feature-discovery-gc
描述: 这个组件通常与 Node Feature Discovery (NFD) 相关,可能用于清理或管理节点特征信息。
作用: 负责管理与 GPU 相关的节点特征信息,可能包括定期清理过期或不再使用的特征。 - gpu-operator-1723203113-node-feature-discovery-master
描述: 这个组件是 Node Feature Discovery (NFD) 的主控制器。
作用: 负责收集、处理和传播节点上的硬件特征信息,如 GPU 信息,以便在调度和资源分配时使用。 - gpu-operator-1723203113-node-feature-discovery-worker
描述: 这是 Node Feature Discovery 的工作节点组件。
作用: 直接在节点上运行,检测硬件特征并将其报告给主控制器。 - nvidia-mig-manager
描述: 这个组件负责管理 NVIDIA 的多实例 GPU (MIG) 功能。
作用: 允许单个 GPU 分割成多个虚拟 GPU 实例,以便更好地利用 GPU 资源。 - gpu-feature-discovery
描述: GPU Feature Discovery 是一个组件,用于检测 GPU 特性并将其报告给 Kubernetes。
作用: 发现节点上的 GPU 特性,以便在调度工作负载时使用这些信息。 - nvidia-dcgm-exporter
描述: NVIDIA DCGM (Data Center GPU Manager) Exporter 用于将 GPU 性能和健康指标导出到 Prometheus 监控系统。
作用: 提供 GPU 的性能监控,包括温度、内存使用、功耗等。 - nvidia-device-plugin-mps-control-daemon
描述: 这是一个管理 Multi-Process Service (MPS) 的组件。
作用: 管理 MPS,让多个进程可以共享 GPU 资源,从而提高 GPU 的利用率。 - nvidia-device-plugin-daemonset
描述: NVIDIA Device Plugin 是一个 DaemonSet,负责在 Kubernetes 节点上暴露 GPU 设备。
作用: 使得 Kubernetes 可以识别和使用节点上的 GPU 资源。 - nvidia-container-toolkit-daemonset
描述: 这个 DaemonSet 部署 NVIDIA Container Toolkit。
作用: 提供容器化环境中访问 GPU 的工具和库,如 nvidia-container-runtime。 - nvidia-driver-daemonset
描述: 这是一个 DaemonSet,负责在节点上安装和管理 NVIDIA GPU 驱动程序。
作用: 确保每个节点都安装并运行正确版本的 GPU 驱动,以便容器能够使用 GPU 资源。
这些组件一起工作,以确保你的 Kubernetes 集群能够正确识别、管理和利用 NVIDIA GPU 资源。
首先是 gpu-operator 的 deployment 启动,调度其他 deployment 和 daemonSet ,首先 gc(上述2) 和 master、node 的 nfd (上述3、4)启动,而后 driver(上述11) 启动为集群每台机器安装 驱动(如果检测到本机已经预先安装,会自动停止),再由 toolkit 安装 容器运行时的工具包,再就是 plugein 来将集群机器的 gpu 暴露给集群调度,gdf 和 dcgm 分别手机 gpu 信息 和 状态,而 dcgm 就是个大坑,害群之马,会导致 NVLINK 不可用,也就是把本机的 nvidia-smi 一些显卡变成 err 状态。只要不安装即可,在安装 gpu-operator 的 helm install 命令指定就行。mig 是将一个 GPU 让多个节点调度到。如果没有 mig ,每个 pod 分配 GPU 的单位是 整数。
安装步骤
sudo helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator\
--version v24.3.0 \
--set dcgmExporter.enabled=false \
--set driver.enabled=false\
--set migManager.enabled=true\
--set driver.vgpu.enabled=true
具体参数根据自己需要配置。
卸载步骤
kubectl delete crd nvidiadrivers.nvidia.com
helm delete -n gpu-operator $(helm list -n gpu-operator | grep gpu-operator | awk '{print $1}')
kubectl get pods -n gpu-operator
kubectl get crd clusterpolicies.nvidia.com
kubectl get nvidiadrivers.nvidia.com
kubectl get clusterpolicies.nvidia.com
kubectl delete nvidiadrivers.nvidia.com --all
kubectl delete clusterpolicies.nvidia.com --all
kubectl delete crd clusterpolicies.nvidia.com
kubectl delete namespace gpu-operator
sudo rm -rf /usr/local/nvidia
sudo rmmod nvidia_uvm
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
如果卸载驱动模块过程有阻碍,就把对应的进程 kill 掉。
如果在删除 namespace 时卡死,那就是有 pod 无法删除,删除后又会自动创建,强制删除即可:
kubectl delete pod nvidia-operator-validator-47g2j --grace-period=0 --force -n gpu-operator