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
如果
STATUS
为Running
,表示启动成功。查看 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,需满足以下条件:
安装
moffett-ctk
,具体请参见 MOFFETT Container Toolkit 用户手册。Kubernetes 版本 ≥ 1.28,且 Kubernetes 容器引擎开启
DevicePluginCDIDevices
特性。详细信息请参见 DevicePluginCDIDevices。
获取 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
如果 STATUS
为 Completed
,表示任务已执行完成。
验证 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-daemonset
和 kube-system
分别对应 moffett-qual-list.yml 文件的 metadata 字段下 name 和 namespace 的值。