跳到主要内容

MT GPU Operator 安装指南

MT GPU Operator 是摩尔线程提供的 Kubernetes GPU 管理组件,用于在 Kubernetes 集群中管理和使用摩尔线程 GPU 设备。本文档介绍支持平台、安装模式及操作步骤,包括 DCGM 及 DCGM Exporter 的容器化安装。

硬件及平台支持

GPU、MUSA SDK 支持列表参考 MT Container Toolkit 安装指南

CPU 及 OS 支持

CPUOS
IntelUbuntu 22.04
IntelAlibaba Cloud Linux 3 (Soaring Falcon)
IntelDebian 12
AMD64Ubuntu 22.04
Hygon4Ubuntu 22.04
Hygon4Kylin V10/V11

系统依赖组件

  • Kubernetes 1.19 ~ 1.32。

  • 如使用 GPU Operator Core 安装模式,参考 MT Container Toolkit 安装指南 安装 Container Toolkit。

  • 如使用 GPU Operator Full 安装模式,会自行安装 Container Toolkit。

GPU Operator 安装模式

MT GPU Operator 提供两种安装模式,以适应不同的使用场景:

模式描述适用场景
Core只包含 Device Plugin 和 DCGM,暴露 GPU 为可调度资源并提供基础监控能力。最大化手动控制或利用已有的自动化管理平台。
需要预装驱动和容器运行时。
高级功能手动配置,节点扩容手动更新。
轻量部署,资源开销小。
Full包含 MT GPU Operator 的全部功能,提供完整的 GPU 管理和监控能力。GPU 全栈自动化部署、配置与生命周期管理。
需要自动化的驱动部署与升级。
需要 GPU 调度器、sGPU 等高级功能自动配置。
部署较复杂,资源开销较高。

先决条件

在安装 MT GPU Operator 前,您应该确保 Kubernetes 集群满足以下先决条件:

  1. Prometheus 监控:要在 Kubernetes 中收集 GPU 使用数据,必须在集群中部署 Prometheus。
$ export VERSION=$(curl -s https://api.github.com/repos/prometheus-operator/prometheus-operator/releases | grep tag_name | grep -v -- '-rc' | grep -v -- '-alpha' | sort -r | head -1 | awk -F': ' '{print $2}' | sed 's/,//' | xargs)
$ echo $VERSION
$ kubectl create -f https://github.com/prometheus-operator/prometheus-operator/releases/download/${VERSION}/bundle.yaml
  1. 驱动自动安装依赖包:对于 Full 安装模式,支持自动安装 GPU 驱动程序,必须在集群内的每个节点上手动安装以下软件包。对于 Core 安装模式请忽略此项。
  • LightDM 是一个跨桌面显示管理器,可以使用以下命令进行安装:
$ sudo apt install -y lightdm
  • libdrm2 是内核直接渲染管理器 (DRM) 服务的用户空间接口,可以使用以下命令进行安装:
$ sudo apt install -y libdrm2

注意:libdrm2 所需的最低版本是 2.4.99

Core 模式安装

集群部署 device-plugin

1. 为有摩尔线程 GPU 的节点打标签

$ kubectl label node <node-name> mthreads.com/gpu=enable

2. 部署组件 进入 GPU-Operator/gpu-operator-core 目录,通过 yaml 文件部署相关组件。

$ kubectl apply -f deployments.yaml

注意:因 DCGM-exporter 的功能已覆盖 mt-gpu-exportermt-gpu-exporter 不再提供产品化支持,已在上面的资源配置文件中删除。

3. 验证组件状态

$ kubectl get po -n mt-gpu-operator
mt-universal-gpu-device-controller-99bdj 1/1 Running 0 13m
mt-universal-gpu-device-controller-sgh59 1/1 Running 0 13m

4. 检查节点上是否有摩尔线程的 GPU 资源

$ kubectl describe node <node-name>
...
Capacity:
mthreads.com/gpu: 1 #这就是摩尔线程的gpu资源
...

集群部署 DCGM & DCGM-Exporter 组件

DCGM 和 DCGM exporter 是两个组件:

  • DCGM(Data Center GPU Manager):是一个专为数据中心 GPU 服务器和多 GPU 集群环境设计的 GPU 监控与管理工具套件,适用于对 MTHREADS GPU 的健康监测、性能分析、故障检测和生命周期管理。DCGM 虽然可以宿主机安装,但在 Kubernetes 平台一般使用容器化安装。

  • DCGM-Exporter:是一个 Prometheus Exporter,专门将 MTHREADS GPU 的运行状态指标(如温度、功耗、利用率等)导出供 Prometheus 抓取。

1. 为有摩尔线程 GPU 的节点打标签

$ kubectl label node <node-name> mthreads.com/gpu=enable

2. 部署组件

$ kubectl apply -f dcgm-and-exporter.yaml

注意:DCGM 指标配置已内嵌在 dcgm-and-exporter.yaml 中,不需要额外执行 dcgm-metrics-config.yaml

3. 验证组件状态 DCGM 和 DCGM-Exporter 运行在两个 pod 中。用户可通过 dcgmi 命令工具访问完整的 DCGM 功能,DCGM-Exporter 则通过网络连接 DCGM 获取 GPU 指标。

$ kubectl get po -n mt-gpu-operator
mt-dcgm-exporter-rjxh9 1/1 Running 0 1m
mt-dcgm-htdxg 1/1 Running 0 1m

4. 检查 DCGM 功能

$ kubectl exec -it mt-dcgm-htdxg -n mt-gpu-operator -- /usr/local/mtdcgm/bin/dcgmi discovery -l
Defaulted container "mt-dcgm-ctr" out of: mt-dcgm-ctr, toolkit-validation (init)
1 GPU found.
+--------+----------------------------------------------------------------------+
| GPU ID | Device Information |
+--------+----------------------------------------------------------------------+
| 0 | Name: MTT S5000 |
| | PCI Bus ID: 00000000:01:00.0 |
| | Device UUID: e16190dd-4ffb-d424-1e9a-b12d5f519e43 |
+--------+----------------------------------------------------------------------+

5. 检查 DCGM-Exporter 的 metrics

$ kubectl get svc mt-dcgm-exporter -n mt-gpu-operator
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mt-dcgm-exporter ClusterIP 10.233.36.113 <none> 9400/TCP 2m

$ curl http://10.233.36.113:9400/metrics
# HELP DCGM_FI_DEV_CPU_AFFINITY_0 cpu affinity 0-63
# TYPE DCGM_FI_DEV_CPU_AFFINITY_0 gauge
DCGM_FI_DEV_CPU_AFFINITY_0{gpu="0",UUID="e16190dd-4ffb-d424-1e9a-b12d5f519e43",device="mtgpu0",modelName="MTT S3000",Hostname="cd-worker-zxxu",DCGM_FI_DEV_BRAND="MTT",DCGM_FI_DEV_VBIOS_VERSION="2.1.8",DCGM_FI_DRIVER_VERSION="2.7.0",DCGM_FI_MTML_VERSION="2.0.0",container="",namespace="",pod=""} 4095
....
# HELP DCGM_FI_DEV_GPU_UTIL GPU utilization (in %).
# TYPE DCGM_FI_DEV_GPU_UTIL gauge
DCGM_FI_DEV_GPU_UTIL{gpu="0",UUID="e16190dd-4ffb-d424-1e9a-b12d5f519e43",device="mtgpu0",modelName="MTT S3000",Hostname="cd-worker-zxxu",DCGM_FI_DEV_BRAND="MTT",DCGM_FI_DEV_VBIOS_VERSION="2.1.8",DCGM_FI_DRIVER_VERSION="2.7.0",DCGM_FI_MTML_VERSION="2.0.0",container="",namespace="",pod=""} 0
....

卸载 device-plugin, DCGM 等组件

$ kubectl delete -f dcgm-and-exporter.yaml
$ kubectl delete -f deployments.yaml

Full 模式安装

准备部署包

  1. 进入 gpu-operator-full 文件夹,然后解压:
$ cd GPU-Operator/gpu-operator-full
$ tar -xvzf mt-gpu-operator-2.2.0.tgz
$ tar -xvzf mt-gpu-operator-custom-resources-2.2.0.tgz
  1. (本步可选)用户可直接使用摩尔线程提供的公网镜像仓库 registry.mthreads.com,也可以使用部署包中提供的镜像同步脚本,将公网镜像同步到自己的内网 harbor 中:
$ ./sync_image.sh registry.mthreads.com/mcconline <your.registry.com/repo>

部署包中提供了脚本 change_image_repo.sh 来为用户修改部署包下所有文件中的镜像仓库地址,使用方式如下:

$ ./change_image_repo.sh registry.mthreads.com/mcconline <your.registry.com/repo>

使用 Helm 安装 MT GPU Operator

MT GPU Operator Helm charts 提供了多个可自定义的选项,可以根据您的环境进行配置。

Chart 自定义选项

使用 Helm chart 时可以使用以下选项。这些选项可以与 --set 一起使用。

mt-gpu-operator

参数描述默认值
namespaceMT GPU Operator 部署在哪个命名空间下。mt-gpu-operator

mt-gpu-operator-custom-resources

参数描述默认值
mtGpuClusterPolicyClusterpolicy.nfd.enabled将节点功能发现插件部署为 DaemonSet。如果 NFD 已在集群中运行,请将此变量设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.driverToolkit.enabled默认情况下,GPU Operator 将 MT 驱动程序部署为系统上的容器。在预装 MT 驱动程序的系统上使用 GPU Operator 时,应将此值设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.containerToolkit.enabled默认情况下,GPU Operator 将 MT Container Toolkit 部署为系统上的容器。在预装 MT Container Toolkit 的系统上使用 GPU Operator 时,请将此值设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.kured.enabled将 kured 插件部署为 DaemonSet。如果 kured 已在集群中运行,则将此变量设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.nodeProblemDetector.enabled将节点问题检测器 (NPD) 插件部署为 DaemonSet。如果 NPD 已在集群中运行,请将此值设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.aiOps.enabled默认情况下,GPU Operator 将 MT AIOps 部署为系统上的容器。如果不需要此组件,请将此值设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.gpuScheduler.enabled默认情况下,GPU Operator 不部署 GPU Scheduler。如果您想使用 sGPU,请将此变量设置为 truefalse
mtGpuClusterPolicyClusterpolicy.gpuWebhook.enabled默认情况下,GPU Operator 不部署 GPU Webhook。如果您想使用 sGPU,请将此变量设置为 truefalse
mtGpuClusterPolicyClusterpolicy.kubevirt.enabled默认情况下,GPU Operator 部署 KubeVirt 补丁以启用 GPU 直通。如果要启用虚拟机工作负载,请将此值设置为 truefalse
mtGpuClusterPolicyClusterpolicy.dcgm.enabled默认情况下,GPU Operator 会部署 DCGM 组件,该组件是一套 GPU 管理和监控的核心组件。如果不需要该功能,请将此值设置为 falsetrue
mtGpuClusterPolicyClusterpolicy.dcgmExporter.enabled默认情况下,GPU Operator 会部署 DCGM Exporter 组件,该组件是基于 DCGM 的 Prometheus Exporter。如果不需要该功能,请将此值设置为 falsetrue

常见部署场景

本节介绍使用 Helm chart 安装 MT GPU Operator 时的一些常见部署方案。

1. 自动化安装驱动和 MT 容器工具包

如果需要自动化安装驱动和 MT Container Toolkit,将 GPU 驱动、mtml、sgpu dkms 包下载到各设备节点本地目录,或者上传至各设备节点可访问的对象存储服务上,然后参考 GPU Operator 使用指南 中的 驱动配置 章节修改 mt-gpu-operator-custom-resources/values.yaml 中 drivers 相关文件的访问方式。

使用以下命令安装 MT GPU Operator:

$ helm install --wait mt-gpu-operator mt-gpu-operator
$ helm install --wait mt-gpu-operator-custom-resources mt-gpu-operator-custom-resources

2. 机器上预装了驱动程序和 MT 容器工具包

如果节点上已预安装 GPU 驱动和 MT Container Toolkit,在安装 MT GPU Operator 之前,请先确认默认的容器运行时已成功替换为 mthreads。 安装 MT GPU Operator 的命令添加如下选项:

$ helm install --wait mt-gpu-operator mt-gpu-operator
$ helm install --wait mt-gpu-operator-custom-resources mt-gpu-operator-custom-resources \
--set mtGpuClusterPolicyClusterpolicy.driverToolkit.enabled=false \
--set mtGpuClusterPolicyClusterpolicy.containerToolkit.enabled=false

3. 自定义 sGPU 配置

默认情况下,sGPU 相关功能处于禁用状态。如果您想在 Kubernetes 中使用 sGPU,需要开启 GPU scheduler 组件和 GPU Webhook 组件,安装 MT GPU Operator 的命令添加如下选项:

$ helm install --wait mt-gpu-operator mt-gpu-operator
$ helm install --wait mt-gpu-operator-custom-resources mt-gpu-operator-custom-resources \
--set mtGpuClusterPolicyClusterpolicy.gpuScheduler.enabled=true \
--set mtGpuClusterPolicyClusterpolicy.gpuWebhook.enabled=true

4. 配置默认监控指标 使用以下命令配置 DCGM-Exporter的默认指标:

$ kubectl apply -f dcgm-metrics-config.yaml

使用 YAML 安装 MT GPU Operator

如果不使用 Helm,以下是使用 YAML 文件安装 MT GPU Operator 的过程。

安装 GPU Operator 相关部件

进入 gpu-operator-full 文件夹,部署 Operator:

$ kubectl apply -f mt-gpu-operator.yaml

等待 mt-controller-manager pod ready:

$ kubectl get po -n mt-gpu-operator
NAME READY STATUS RESTARTS AGE
mt-controller-manager-68fc5978f5-c2rpf 2/2 Running 0 24s

通常情况下,mthreads_v1beta2_clusterpolicy 文件中的 containerToolkit、driverToolkit、gpuScheduler、gpuWebhook 的 enabled 字段需按需修改。然后创建该 CR:

$ kubectl apply -f mthreads_v1beta2_clusterpolicy.yaml

如果需要自动化安装驱动和 MT Container Toolkit,将 GPU 驱动、mtml、sgpu dkms 包下载到各设备节点本地目录,或者上传至各设备节点可访问的对象存储服务上,然后参考 GPU Operator 使用指南 中的 驱动配置 章节,修改 mthreads_v1alpha4_clusterconfig.yaml 文件,然后运行如下命令:

$ kubectl apply -f mthreads_v1alpha4_clusterconfig.yaml

关闭 mt-gpu-exporter(功能下线)

DCGM-exporter 的功能已覆盖 mt-gpu-exporter后者不再提供产品化支持。本版本 Operator 源码暂未删除该功能,可通过如下方式关闭。

在创建 ClusterPolicy / custom-resources 前给目标 GPU 节点设置标签:

kubectl label node <gpu-node-name> mthreads.com/gpu.deploy.exporter=false --overwrite

多 GPU 节点可使用:

kubectl label nodes -l mthreads.com/gpu=enable mthreads.com/gpu.deploy.exporter=false --overwrite

部署顺序要求:

  • YAML 方式部署:在 kubectl apply -f mthreads_v1beta2_clusterpolicy.yaml 前设置标签。

  • Helm Chart 方式部署:在安装 mt-gpu-operator-custom-resources 前设置标签。

如果部署后才补标签,通常不需要手动 rollout restart,但需要观察 mt-gpu-exporter DaemonSet 是否收敛为不再调度到目标节点。

验证 GPU Operator 安装

通过 Helm Chart 或者 YAML 方式安装后,检查 MT GPU Operator 管理的组件状态是否都是 Running

$ kubectl get po -n mt-gpu-operator
NAME READY STATUS RESTARTS AGE
kured-xzgk9 1/1 Running 0 28m
mt-aiops-784789fd44-6cwdf 1/1 Running 0 17m
mt-container-toolkit-daemonset-28466 1/1 Running 0 35s
mt-controller-manager-77674d7677-sgx99 2/2 Running 0 29m
mt-dcgm-8gwtd 1/1 Running 0 32s
mt-dcgm-exporter-zbrb4 1/1 Running 0 35s
mt-driver-toolkit-wxcsz 1/1 Running 0 28m
mt-gpu-exporter-jsjwk 1/1 Running 0 33s
mt-gpu-feature-discovery-zrlhn 1/1 Running 0 34s
mt-node-status-exporter-kdgb4 1/1 Running 0 33s
mt-operator-validator-qt4tg 1/1 Running 0 32s
mt-universal-gpu-device-controller-bx29w 1/1 Running 0 34s
nfd-master-8699f4456b-jszpc 1/1 Running 0 28m
nfd-worker-7k9g8 1/1 Running 0 28m
nfd-worker-htsbc 1/1 Running 0 28m
nfd-worker-szsjd 1/1 Running 0 28m
node-problem-detector-26tgc 1/1 Running 0 28m
node-problem-detector-ntsx7 1/1 Running 0 28m
node-problem-detector-vsjnx 1/1 Running 0 28m

卸载 MT GPU Operator

使用 Helm 卸载 MT GPU Operator

可以通过运行以下命令卸载 MT GPU Operator Custom resource 的 chart:

$ helm uninstall mt-gpu-operator-custom-resources

然后执行以下命令卸载 MT GPU Operator 的 chart:

$ helm uninstall mt-gpu-operator

运行 helm uninstall 不会删除 CRD。您可以使用以下命令删除 CRD:

$ kubectl delete --ignore-not-found=true crd clusterconfigs.mthreads.com clusterpolicies.mthreads.com nodeconfigs.mthreads.com

使用 YAML 卸载 MT GPU Operator

$ kubectl delete -f mthreads_v1alpha4_clusterconfig.yaml
$ kubectl delete -f mthreads_v1beta2_clusterpolicy.yaml
$ kubectl delete -f mt-gpu-operator.yaml