已关闭
[RFC]: Ascend Device Plugin热复位功能插件化 #245
wuweilin创建于  4月30日关闭于  9月8日
wuweilin成员
4月30日 创建

提交提案之前,请先检索仓库内是否已有相同的提案,如已有请在同一提案中进行讨论。

需求背景

外部诉求

用户A:希望Ascend Device Plugin在热复位前后,记录时间点及最终结果,方便上层监控芯片复位过程
用户B:希望Ascend Device Plugin在复位前,调用一个工具采集,采集一下NPU中的信息,因为复位后这些信息就丢失了,不利于后续的问题根因分析

内部架构优化

Ascend Device Plugin热复位现状
-hotReset=0 开启推理离线复位
-hotReset=1 开启训练在线复位
-hotReset=2 开启训练离线复位

离线复位:当芯片处于空闲状态时,执行芯片复位命令
在线复位:不删除容器,和容器内的管理进程通信,停止进程后执行芯片复位命令。有了Clusterd的grpc通道的进程级重调度后,该功能非必要,也不易用。
推理训练的区分:在设计之初,推理卡是310系列,训练卡是910系列,因此设计了两个不同分支的代码。当前训练推理都是910系列芯片,复位的区别只是一次复位芯片范围的不同。重复代码过多,可以优化

需求描述

  1. 删除在线热复位,不再支持
  2. 离线复位代码合成一套
  3. 在离线复位前后开放一整套钩子函数,支持热复位自定义插件

价值

  1. 开源开放,支持热复位插件
  2. 重构代码,避免架构继续腐化

提议方案

方案设计

1. 梳理新流程单线程、非并发

  1. 判断芯片变为健康,则删除(故障后,芯片空闲的时间),如果节点上有运维标识则删除(通过内部缓存判断,不要一直查询apiserver)。
  2. 判断是否打开了热复位开关,如果没打开,或者打开了但是是L6级别故障,则在节点上标识需要外部运维。
  3. 判断芯片是否故障,除了(nothandler、prespNpu)以外,都进入
  4. 判断芯片是否正处于复位状态,处于则中止
  5. 获取芯片复位的芯片ID的范围
  6. 判断环上是否有pod、或者dcmi 进程
  7. 确认芯片是否有(故障后,芯片空闲的时间),没有的话就以当前时间为准存入
  8. 判断(故障后,芯片空闲的时间)是否已超过了60秒,超过的话则继续复位流程
  9. 将数组中所有芯片的令牌桶,都消耗一个,如果没有令牌,则中止复位流程,并在节点上标识需要外部运维。(令牌桶每6小时生成3张令牌)
  10. 从驱动中查询芯片状态是否还是不健康,是则->消耗一次热复位次数,将复位环上的芯片都置为复位状态,如果已经在复位状态了,那就中止
    -> PreReset([]deviceList) //10s
  11. 调用驱动接口,执行热复位,监控复位结果
    -> CustomReset([]deviceList, err error) err error (A3的特殊处理)//5分钟
  12. 将芯片置为非复位状态
    -> AfterReset([]deviceList, err error) // 10s

2. 添加插件机制

  1. 定义钩子函数
  2. 插件都要有整体开关,通过监听容器中的某个配置文件,确认是否需要打开。文件可以通过configmap映射产生,实现动态更新。
PreReset([]deviceList) : 正式复位前执行,允许在复位前记录一下日志、NPU状态。
CustomReset([]deviceList, err error) err error: 自定义复位操作,入参为执行复位的芯片ID列表,以及内部复位的结果,若内部的复位操作失败,可以用此方法通过其他方式去修复芯片,若修复成功,则将返回值error置为空就行。
AfterReset([]deviceList, err error):复位完成后执行。入参为执行复位的芯片ID列表,以及最终的复位结果,可以在此记录复位的结果。

3. 实现插件

  1. A3的带外复位,基于customReset实现
  2. 记录复位过程及结果,基于preReset、afterReset实现

健壮性设计

钩子函数的执行有时间限制,超过则停止

PreReset([]deviceList) :10秒
CustomReset([]deviceList, err error) err error:5分钟
AfterReset([]deviceList, err error):10秒

考虑兼容性,仍然支持hotReset=0、hotReset=2的启动配置

验收标准

  1. Ascend Device Plugin在芯片故障后,根据芯片故障的级别,正常的触发芯片复位
  2. 无论故障发送的多频繁,Ascend Device Plugin每6小时最多执行三次热复位
  3. A3的带外复位流程,能正常通过插件实现
  4. 记录复位前后时间点及结果功能,能正常通过插件实现

意见征集周期

2026-5-8

抄送名单

其他补充说明

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
Wwuweilin成员
4月30日 添加了label:rfc
Atlas_zxp
Atlas_zxp成员
4月30日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
4月30日 添加了label:triaged
此处折叠了27条事件消息 查看更多
lirui2381lirui2381成员
9月8日 关闭了 issue