NPU-Exporter
MindCluster NPU Exporter支持对接Prometheus或Telegraf。
- 对接Prometheus时,支持通过容器部署和二进制部署两种方式安装MindCluster NPU Exporter,部署差异可参考容器和二进制部署差异。
- 对接Telegraf时,参考《MindX DL 集群调度用户指南》中的“资源监测 > 通过Telegraf使用”章节,安装MindCluster NPU Exporter和Telegraf。
当前只支持Atlas 800T A2 训练服务器设备通过Telegraf使用资源监测特性。
使用约束
在安装MindCluster NPU Exporter前,需要提前了解相关约束,具体说明请参见表1。
操作步骤
MindCluster NPU Exporter支持两种安装方式,用户可根据实际情况选择其中一种进行安装。该组件仅提供HTTP服务,如需使用更为安全的HTTPS服务,请自行修改源码进行适配。
容器化方式运行
- 以root用户登录各计算节点,并执行以下命令,查看MindCluster NPU Exporter镜像和版本号是否正确。
- 将软件包中获取的yaml文件拷贝到K8s管理节点上。
- 如果使用默认的MindCluster NPU Exporter启动参数“-containerMode=docker”,可跳过本步骤。
如果是Containerd场景,需要将containerMode设置为containerd,即“-containerMode=containerd”。
apiVersion: apps/v1 kind: DaemonSet metadata: name: npu-exporter namespace: npu-exporter spec: selector: matchLabels: app: npu-exporter ... spec: ... volumeMounts: ... - name: docker-shim # 仅使用containerd时需要删除 mountPath: /var/run/dockershim.sock readOnly: true - name: docker # 仅使用containerd时删除 mountPath: /var/run/docker readOnly: true - name: cri-dockerd # 当k8s版本为1.24+且容器运行时为docker时保留 mountPath: /var/run/cri-dockerd.sock readOnly: true - name: containerd mountPath: /run/containerd readOnly: true - name: isulad # 使用containerd或者docker时删除 mountPath: /run/isulad.sock readOnly: true ... volumes: ... - name: docker-shim # 仅使用containerd时删除 hostPath: path: /var/run/dockershim.sock - name: docker # 仅使用containerd时删除 hostPath: path: /var/run/docker - name: cri-dockerd # 当k8s版本为1.24+且容器运行时为docker时保留 hostPath: path: /var/run/cri-dockerd.sock - name: containerd hostPath: path: /run/containerd - name: isulad # 使用containerd或者docker时删除 hostPath: path: /run/isulad.sock ...
- 如不修改组件的其他启动参数,可跳过本步骤。否则,请根据实际情况修改yaml文件中MindCluster NPU Exporter的启动参数。启动参数如表2所示,也可执行./npu-exporter -h查看参数说明。
- 在管理节点的yaml所在路径,执行以下命令,启动MindCluster NPU Exporter。
kubectl apply -f npu-exporter-v{version}.yaml
- K8s集群中使用了Atlas 200I SoC A1 核心板节点,执行以下命令。
kubectl apply -f npu-exporter-310P-1usoc-v{version}.yaml
- K8s集群中使用了其他类型节点,执行以下命令。
kubectl apply -f npu-exporter-v{version}.yaml
如果K8s集群同时使用了Atlas 200I SoC A1 核心板和其他类型的节点,请分别执行对应命令。
启动示例如下:root@ubuntu:/home/ascend-npu-exporter# kubectl apply -f npu-exporter-v5.0.0.2.yaml namespace/npu-exporter unchanged networkpolicy.networking.K8s.io/exporter-network-policy unchanged daemonset.apps/npu-exporter created
执行kubectl get pod -n npu-exporter命令,出现Running表示组件启动成功。若状态为CrashLoopBackOff,可能是因为目录权限不正确导致,可以参见NPU-Exporter检查动态路径失败,日志出现check uid or mode failed章节进行处理。NAME READY STATUS RESTARTS AGE ... npu-exporter-hqpxl 1/1 Running 0 11s
MindCluster NPU Exporter的使用对进程环境有要求,以容器形式运行时,请确保“/sys”目录和容器运行时通信socket文件挂载至MindCluster NPU Exporter容器中。若通过调用MindCluster NPU Exporter的Metrics接口,没有获取到NPU容器的相关信息,该问题可能是因为socket文件路径不正确导致,可以参见日志出现connecting to container runtime failed章节进行处理。
- K8s集群中使用了Atlas 200I SoC A1 核心板节点,执行以下命令。
二进制方式运行
MindCluster NPU Exporter组件以容器化方式运行时需使用特权容器、root用户和挂载了docker-shim或Containerd的socket文件,如果容器被人恶意利用,有容器逃逸风险。当安全性要求较高时,请直接在物理机上通过二进制方式运行。

以二进制方式运行MindCluster NPU Exporter需要将日志目录权限修改为非root,可以执行chown hwMindX:hwMindX /var/log/mindx-dl/npu-exporter命令修改日志权限。
- 使用root用户登录服务器。
- 将软件包上传至服务器的任意目录(如“/home/ascend-npu-exporter”)并进行解压操作。
- 执行以下命令,创建npu-exporter.service文件。
vi /home/ascend-npu-exporter/npu-exporter.service
- 参考如下内容,写入npu-exporter.service文件中。
[Unit] Description=Ascend npu exporter Documentation=hiascend.com [Service] ExecStart=/bin/bash -c "/usr/local/bin/npu-exporter -ip=127.0.0.1 -port=8082 -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log>/dev/null 2>&1 &" Restart=always RestartSec=2 KillMode=process Environment="GOGC=50" Environment="GOMAXPROCS=2" Environment="GODEBUG=madvdontneed=1" Type=forking User=hwMindX Group=hwMindX [Install] WantedBy=multi-user.target
- MindCluster NPU Exporter默认情况只侦听127.0.0.1,可通过修改的启动参数“-ip”和“npu-exporter.service”文件的“ExecStart”字段修改需要侦听的IP地址。
... [Service] ExecStart=/bin/bash -c "/usr/local/bin/npu-exporter -ip=127.0.0.1 -port=8082 -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log &" Restart=always RestartSec=2 ...
- 在节点上将hwMindX用户加入到HwBaseUser、HwDmUser用户组中。如果部署节点为Atlas 200I SoC A1 核心板,可跳过该步骤。可执行如下命令进行操作:
usermod -a -G HwBaseUser hwMindX usermod -a -G HwDmUser hwMindX
- 依次执行以下命令,启用MindCluster NPU Exporter服务。
cd /home/ascend-npu-exporter cp npu-exporter /usr/local/bin cp npu-exporter.service /etc/systemd/system chattr +i /etc/systemd/system/npu-exporter.service chmod 500 /usr/local/bin/npu-exporter chown hwMindX:hwMindX /usr/local/bin/npu-exporter chattr +i /usr/local/bin/npu-exporter systemctl enable npu-exporter systemctl start npu-exporter
如果需要获取容器相关指标,MindCluster NPU Exporter需要临时提权以便于和CRI、OCI的socket建立连接,需要执行以下命令。chattr -i /usr/local/bin/npu-exporter setcap cap_setuid+ep /usr/local/bin/npu-exporter chattr +i /usr/local/bin/npu-exporter systemctl restart npu-exporter

- 安装组件后,组件的Pod状态不为Running,可参考组件Pod状态不为Running章节信息。
- 安装组件后,组件的Pod状态为ContainerCreating,可参考集群调度组件Pod处于ContainerCreating状态章节信息。
- 启动组件失败,可参考启动集群调度组件失败,日志打印“get sem errno =13”章节信息。
- 组件启动成功,找不到组件对应的Pod,可参考组件启动yaml执行成功,找不到组件对应的Pod章节信息。
参数说明
参数 |
类型 |
默认值 |
说明 |
---|---|---|---|
-port |
int |
8082 |
侦听端口,范围1025~40000。 |
-updateTime |
int |
5 |
信息更新周期1~60秒。如果设置的时间过长,一些生存时间小于更新周期的容器可能无法上报。 |
-ip |
string |
无 |
参数无默认值,必须配置。 侦听IP地址,在多网卡主机上不建议配置成0.0.0.0。 |
-version |
bool |
false |
打印程序版本号。 |
-concurrency |
int |
5 |
HTTP服务的限流大小,默认5个并发,取值范围为[1,512]。 |
-logLevel |
int |
0 |
日志级别:
|
-maxAge |
int |
7 |
日志备份时间限制,取值范围为[7,700],单位为天。 |
-logFile |
string |
/var/log/mindx-dl/npu-exporter/npu-exporter.log |
日志文件。 说明:
单个日志文件超过20 MB时会触发自动转储功能,文件大小上限不支持修改。转储后文件的命名格式为:npu-exporter-触发转储的时间.log,如:npu-exporter-2023-10-07T03-38-24.402.log。 |
-maxBackups |
int |
30 |
转储后日志文件保留个数上限,取值范围为(0,30],单位为个。 |
-containerMode |
string |
docker |
设置容器运行时类型。
|
-containerd |
string |
|
containerd daemon进程endpoint,用于与Containerd通信。
一般情况下使用默认值即可。若用户自行修改了Containerd的sock文件路径则需要进行相应路径的修改。 可通过ps aux | grep containerd命令查询Containerd的sock文件路径是否修改。 |
-endpoint |
string |
|
CRI server的sock地址:
一般情况下使用默认值即可,除非用户自行修改了dockershim或者Containerd的sock文件路径。 |
-limitIPConn |
int |
5 |
每个IP的TCP限制数的取值范围为[1,128]。 |
-limitTotalConn |
int |
20 |
程序总共的TCP限制数的取值范围为[1,512]。 |
-limitIPReq |
string |
20/1 |
每个IP的请求限制数,20/1表示1秒限制20个请求,“/”两侧最大只支持三位数。 |
-cacheSize |
int |
102400 |
[1,1024000]缓存key的数量限制。 |
-h或者-help |
无 |
不涉及 |
显示帮助信息。 |
-platform |
string |
Prometheus |
指定对接平台,取值如下:
|
-poll_interval |
duration(int) |
1 |
Telegraf数据上报的间隔时间,单位:秒。此参数在对接Telegraf平台时才起作用,即需要指定-platform=Telegraf时才生效,否则该参数不生效。 |