一、背景概述

在计算任务运行过程中,除芯片故障外,往往需要关注芯片的网络和算力使用情况,以便确认任务运行过程中的性能瓶颈,找到提升任务性能的方向。MindCluster提供了部署在计算节点的NPU Exporter组件,用于上报从驱动中获取到的芯片、网络的各项数据信息。

二、组件上下游依赖

NPU Exporter逻辑接口如下图所示:

在这里插入图片描述

① 从驱动中获取芯片以及网络信息,并放入本地缓存

② 从K8s标准化接口CRI中获取容器信息,并放入本地缓存

③ 实现Prometheus或者Telegraf的接口,供二者周期性获取缓存中的数据信息

1、NPU Exporter与下游接口dcmi/hccn tool对接

代码链接如下:

https://gitcode.com/Ascend/mind-cluster/blob/master/component/npu-exporter/collector/metrics/collector_for_npu.go

1)初始化

在这里插入图片描述

这段代码实现的功能是:初始化错误码指标描述符(80~83);初始化容器相关标签(85~88);序列号相关指标(90~93);NPU名称指标(95~98)

2)chipCache结构体

在这里插入图片描述

这段代码实现的功能是:缓存单个NPU芯片的采集数据,避免重复采集。采集的数据包括:芯片健康状态、芯片错误码列表、AI核心利用率、整体利用率、矢量核心利用率、温度、功耗、电压、AI核心当前频率、网络健康状态、进程信息

3)BaseInfoCollector收集器主体

在这里插入图片描述

这段代码实现的功能是:结构体定义,继承通用的指标收集器适配器

在这里插入图片描述

这段代码的功能是:向Prometheus声明本收集器提供的所有指标

在这里插入图片描述

这段代码实现的功能是:采集核心数据,包括:采集频率信息、温度信息、电压信息、错误码信息、创建缓存对象(188~195)、采集功耗、利用率、网络状态、进程信息

在这里插入图片描述

这段代码实现的功能是:更新各项指标,包括:获取容器信息(225~226)、更新各项指标到Prometheus(227~228)、更新容器信息、进程信息、错误码信息、序列号信息、框架、机器NPU数量指标

2、NPU Exporter与下游接口CRI对接

代码链接如下:

https://gitcode.com/Ascend/mind-cluster/blob/master/component/npu-exporter/collector/container/runtime_ops.go

1)初始化

在这里插入图片描述

该段代码实现的功能有:将非root用户权限提升到root权限(102~117);检查socket文件权限(118~1121);初始化客户端连接(123~125)

2)客户端初始化

在这里插入图片描述

这段代码实现的功能有:建立连接(134);重试备用地址(135~143);创建具体客户端(144~154)

3)GetContainers方法

在这里插入图片描述

这段代码实现的功能有:类型断言和版本适配(219~226);isula客户端处理(227~229)

4)版本兼容性处理

在这里插入图片描述

该段代码实现的功能有:检查gRPC状态错误(239~242);检查错误字符串(243~246)

3、NPU Exporter与上游接口Prometheus或者Telegraf对接

与Prometheus对接代码链接如下:

https://gitcode.com/Ascend/mind-cluster/blob/master/component/npu-exporter/platforms/prom/prometheus_collector.go

1)核心结构体定义

在这里插入图片描述

这个结构体实现的功能是:Prometheus收集器的主要入口点

2)构造函数

在这里插入图片描述

这段代码实现的功能是:创建Prometheus收集器实例

3)Prometheus接口实现(Describe方法)

在这里插入图片描述

这段代码实现的功能是:向Prometheus描述所有可能的指标(指标的元数据)

4)Prometheus接口实现(Collect方法)

在这里插入图片描述

这段代码实现的功能是:收集当前的指标数据并发送给Prometheus

与Telegraf对接代码链接如下:

https://gitcode.com/Ascend/mind-cluster/blob/master/component/npu-exporter/platforms/inputs/npu/npu.go

1)WatchNPU结构体

在这里插入图片描述

这个结构体实现了Telegraf的Input接口,包含一个NPU收集器实例,负责实际的数据收集工作

2)Telegraf插件接口实现

在这里插入图片描述

Gather函数是接口实现的核心代码,他实现的功能有:准备数据存储结构(51~52);确定设备标签值(54~60);配置动态日志(61);获取容器NPU信息和芯片列表(63~64);通过不同收集链收集数据(66~68);添加通用设备指标(70~71);处理具体设备指标(74~84)

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐