跳到主要内容

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

常见部署场景​

本节介绍使用 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