MOFFETT Device Plugin 用户手册

概述

MOFFETT Device Plugin(moffett-device-plugin)是基于 Kubernetes 的 DaemonSet,支持以下功能:

  • 自动将集群中各节点的墨芯 AI 计算卡设备展示给 Kubernetes。

  • 实时监控墨芯 AI 计算卡设备的健康状态。

  • 在 Kubernetes 集群中运行支持墨芯 AI 计算卡的容器。

部署 moffett-device-plugin 后,在创建 Pod 时 Kubernetes 集群会自动申请使用墨芯 AI 计算卡的设备,并跟踪设备的健康状况。

关于 Kubernetes DaemonSet 的详细信息,请参见 DaemonSet

前提条件

  • 已安装 SOLA ToolKit,且 SOLA ToolKit 的版本 ≥ 3.11.0。关于如何安装 SOLA ToolKit,请参见 SOLA Toolkit 安装指南

  • 已安装 Docker,且 Docker 版本 ≥ 25.0.0。

  • 已安装 Kubernetes,且 Kubernetes 版本 ≥ 1.10。

    说明

    查看 Kubernetes 版本,执行 kubectl version 命令。

部署 MOFFETT Device Plugin

以下操作示例基于 SOLA ToolKit 3.11.0 和 Docker 25.0.0。

获取 MOFFETT Device Plugin 镜像

选择以下其中一种方式获取 moffett-device-plugin 镜像:

  • 通过墨芯 Docker 镜像仓库获取镜像:

    docker pull moffett/k8s-device-plugin:v0.3.0
    
  • 通过镜像存储地址下载并加载镜像:

    wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/CloudNative/moffett-k8s-device-plugin-v0.3.0.tar
    docker load -i moffett-k8s-device-plugin-v0.3.0.tar
    

创建 MOFFETT Device Plugin 的 DaemonSet 规范文件

moffett-device-plugin 的 DaemonSet 规范文件是一个 YAML 文件,用于启动 moffett-device-plugin

注意

  • moffett-device-plugin 需要以特权(privileged)模式运行。

  • 对墨芯 AI 计算卡的修改操作,请直接在主机上执行,并在完成后重启 moffett-device-plugin

  • moffett-device-plugin 及 SOLA 容器运行过程中,卸载或升级主机上的 SOLA ToolKit 会失败,请删除或暂停相关容器后再对主机的 SOLA 进行变更操作。

以下示例的 moffett-device-plugin.yml 文件定义了一个 DaemonSet,用于在 Kubernetes 集群中每个设备上部署并运行 moffett-device-plugin

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: moffett-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: moffett-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: moffett-device-plugin-ds
    spec:
      tolerations:
      - key: moffett.ai/spu
        operator: Exists
        effect: NoSchedule
      priorityClassName: "system-node-critical"
      containers:
      - image: moffett/k8s-device-plugin:v0.3.0
        name: moffett-device-plugin-ctr
        securityContext:
          privileged: true
        volumeMounts:
        - name: device-plugin
          mountPath: /var/lib/kubelet/device-plugins
      volumes:
      - name: device-plugin
        hostPath:
          path: /var/lib/kubelet/device-plugins

安装 MOFFETT Device Plugin

kubectl create -f moffett-device-plugin.yml 

查看 MOFFETT Device Plugin 是否部署成功

查看 moffett-device-plugin 是否成功安装并启用,执行以下命令:

  • 查看安装的 DaemonSet。

    kubectl get daemonset -n kube-system
    
  • 查看 Pod 状态(STATUS)。

    kubectl get pods -l name=moffett-device-plugin-ds -n kube-system
    

    如果 STATUSRunning,表示启动成功。

  • 查看 Pod 运行的日志。

    kubectl logs -n kube-system $(kubectl get pods -n kube-system -o name | grep moffett | head -n 1)
    

    如果命令输出的日志显示 Registered device plugin for 'moffett.ai/spu' with Kubelet,表示 moffett-device-plugin 安装成功。

  • 查看节点(Node)的状态及算力资源情况。

    kubectl get nodes
    NAME             STATUS                        ROLES                  AGE    VERSION
    idc-master-108   Ready,SchedulingDisabled      control-plane,worker   201d   v1.31.0
    idc-node-100     NotReady,SchedulingDisabled   worker                 151d   v1.31.0
    idc-node-110     Ready                         worker                 201d   v1.31.0
    kubectl describe node idc-node-110 | grep Capacity -A7
    Capacity:
      cpu:                160
      ephemeral-storage:  1843654236Ki
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             527789976Ki
      moffett.ai/spu:     3
      pods:               110
    

创建并运行 Pod

moffett-device-plugin 支持 Kubernetes 使用容器设备接口(Container Device Interface,CDI)运行 Pod。如果启用 CDI,需满足以下条件:

获取 SOLA 基础镜像

选择以下其中一种方式获取 SOLA 基础镜像:

说明

SOLA 镜像的版本需和主机上安装的 SOLA 版本一致。

  • 通过墨芯 Docker 镜像仓库获取镜像:

    docker pull moffett/macs-base:sola-3.11.0
    
  • 通过镜像存储地址下载镜像并加载:

    wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/images/macs/macs-base-sola-3.11.0.tar
    docker load -i macs-base-sola-3.11.0.tar
    

创建 Pod 配置文件

Pod 的配置文件是一个 YAML 文件,用于启动 Pod。

说明

  • 使用墨芯 AI 计算卡设备的 Pod 不推荐使用特权模式,由此可以更好地控制容器中设备的可见性。若必须使用特权模式,请确保 Pod 指定的设备与主机中的设备一致。

  • 如果需要在主机中获取正在运行的程序的 PID 和进程名,请在配置文件中添加参数 hostPID: true

以下示例的 moffett-qual-list.yml 文件定义了一个 Pod,用于在 Kubernetes 集群上运行一个容器,容器启动时执行 mx-qual list 命令。

apiVersion: v1
kind: Pod
metadata:
  name: qual-list-pod
spec:
  restartPolicy: Never
  containers:
  - name: sola-container
    image:  moffett/macs-base:sola-3.11.0
    args: ['mx-qual', 'list'] # 指定容器中自动运行的命令
    resources:
      limits:
        moffett.ai/spu: 1 # 指定容器使用一个 CDI 设备
  tolerations:
  - key: moffett.ai/spu
    operator: Exists
    effect: NoSchedule

启动 Pod

启动 qual-list-pod

kubectl create -f moffett-qual-list.yml 

查看 Pod 状态

查看 qual-list-pod 的状态:

kubectl get pod qual-list-pod

如果 STATUSCompleted,表示任务已执行完成。

验证 Pod 执行结果

查看 qual-list-pod 中命令的执行结果:

kubectl logs qual-list-pod
Device 0: "00S30-00A"
  Serial number:      2024083080112
  PCI Bus ID:         0000:67:00.0
  Runtime version:    3.11.0
  Driver version:     3.11.0
  Firmware version:   1.0.17

清理环境

删除 Pod

删除 qual-list-pod

kubectl delete pod qual-list-pod

删除 MOFFETT Device Plugin

kubectl delete daemonset moffett-device-plugin-daemonset -n kube-system

其中,moffett-device-plugin-daemonsetkube-system 分别对应 moffett-qual-list.yml 文件的 metadata 字段下 name 和 namespace 的值。