RFC: NPU软切分相关功能实现规范
1. 文档概述
本文档为NPU软切分相关功能的RFC(Request for Comments)描述文件,明确6个核心功能点的需求背景、实现思路及核心约束,用于指导开发、测试及部署工作,确保各功能模块协同适配,满足NPU资源软切分、调度及任务管理的业务需求。
适用范围:device plugin、ascend for volcano、ascend operator相关开发及运维人员,相关功能的测试验证人员。
2. 功能点详细描述
2.1 功能点1:【device plugin】支持按照NPU的占比上报可用芯片信息
2.1.1 需求描述
device plugin需支持按照NPU资源占比,将可用芯片信息上报至configmap中;kubelet侧上报时,需按照“芯片数量×100”的规则进行数值转换上报。
2.1.2 实现思路
-
configmap资源管理规则:当已使用资源≥100%时,该芯片信息从devicelist中移除;当资源释放后,该芯片信息重新移入devicelist。
-
kubelet上报规则:根据芯片型号,上报数值固定为800(对应800T A2服务器)或1600(对应A3服务器);例如8张物理卡对应上报800,若某物理卡损坏,上报总数减少100。
-
资源请求优先级:若任务的request配置与annotation配置不一致,以request配置为准。
-
资源配置要求:片上内存和NPU的request信息统一放入request配置中,同步完成对应资源名称的修改。
2.2 功能点2:【device plugin】支持将软切所需的配置文件挂载到容器中
2.2.1 需求描述
device plugin需支持将NPU软切分所需的各类配置文件、目录,按照指定权限和路径挂载到容器内部,满足软切任务运行的依赖需求。
2.2.2 实现思路
-
软切配置文件挂载:将软切所需的npu-info.config文件所在目录挂载至容器内,挂载权限设为只读。
-
共享目录自动挂载:
-
device plugin支持根据芯片信息自动挂载对应目录;与芯片无关的固定挂载路径,通过任务yaml的mount机制完成挂载。
-
device plugin启动时支持配置“根路径”参数,dp将在该根路径下自动创建共享目录(挂载至dp内部);8张物理卡对应创建8个独立子文件夹,任务使用哪张芯片,就将该芯片对应的子文件夹挂载至容器。
-
挂载权限与目录命名:共享目录挂载权限设为读写;子文件夹需提前创建,命名规范为“/share_device/{deviceId}”,其中“/share_device”由用户在dp启动时配置,deviceId由dp根据容器挂载的芯片id自动生成(用于共享内存设备)。
-
目录映射规则:服务器宿主机路径由“用户配置的根路径 + dp创建的deviceId子文件夹”拼接而成,该路径映射至容器内的“/share_device”路径。
-
-
libvruntime.so文件挂载:保持现有机制不变,通过任务yaml的mount映射完成挂载。
2.3 功能点3:【ascend for volcano】支持按照资源利用率进行软切分任务调度
2.3.1 需求描述
volcano调度器需维护并感知NPU资源的实时状态(包括NPU使用率、片上内存使用率、共享策略),并根据软切分任务的需求(NPU使用率、片上内存使用率、共享策略),选择最优的NPU资源进行任务调度,确保资源利用率最大化。
2.3.2 实现思路
-
任务校验:在调度初期,对软切分任务的资源请求、共享策略等参数进行合法性校验,确保任务符合调度要求。
-
节点过滤:
-
节点标签维护:由调度器自行维护节点标签,无特殊配置要求。
-
资源判断规则:在节点过滤阶段,判断节点是否至少有1张可用芯片,满足以下任一条件即通过过滤:
-
节点存在至少1张完全空闲的物理芯片;
-
节点无完全空闲芯片,但存在1张芯片的共享策略与任务一致,且该芯片的NPU使用率与片上内存使用率之和≤100%;
-
除上述两种情况外,均不通过过滤(补充约束:资源占比阈值0.25)。
-
-
-
节点优选:按照优先级排序,为通过过滤的节点/芯片打分,得分最高者作为最优调度目标,优先级及打分规则如下:
-
第一优先级:切分策略与任务一致,且芯片剩余空间刚好满足任务需求,得分最高(200分,与第二优先级基础分一致);
-
第二优先级:切分策略与任务一致,且芯片剩余空间大于任务需求,基础得分为200分,最终得分=200 - 剩余NPU比例(得分可被更高优先级覆盖);
-
第三优先级:芯片处于空闲状态,但该节点的其他芯片已被软切分任务使用,打分规则为“被使用的芯片数量×1分”,最高得分为15分(对应15张芯片被使用);
-
第四优先级:芯片处于空闲状态,且该节点无其他芯片被软切分任务使用,得分为0分。
-
2.4 功能点4:【ascend for volcano】支持拉起多副本的软切分任务
2.4.1 需求描述
volcano调度器需支持拉起多副本的软切分任务,约束条件为:一个任务副本下只能包含一个软切分的vNPU。
2.4.2 实现思路
在任务校验流程中,删除对软切分任务副本数的限制,允许配置多副本;同时确保每个副本仅关联一个vNPU,避免副本内多vNPU冲突。
2.5 功能点5:【ascend for volcano】支持软切分任务的job重调度
2.5.1 需求描述
volcano调度器需支持软切分任务的job重调度功能,当物理芯片发生故障时,该物理芯片上运行的所有软切分任务需自动触发重调度,确保任务正常运行。
2.5.2 实现思路
目前该功能的测试验证已通过,无需额外开发,保持现有重调度机制即可,后续可根据实际运行反馈优化细节。
2.6 功能点6:【ascend operator】任务支持配置软切分所需参数
2.6.1 需求描述
ascend operator需支持软切分任务的参数配置:acjob类型任务拉起时,可配置软切分所需参数,且参数会自动带入pg(Pod Group)创建过程;其他类型任务,支持通过pod配置将软切分参数映射至pg。
2.6.2 实现思路
软切分任务的yaml配置中,request字段的配置内容,对应软切分所需的aicore请求参数,operator自动读取该参数并完成后续传递与配置。
3. 核心约束与注意事项
-
资源上报:kubelet上报数值严格按照“芯片数量×100”规则,物理卡损坏时需及时扣减对应数值,确保上报信息准确。
-
目录挂载:共享目录需提前创建,deviceId需与容器挂载的芯片id严格对应,避免挂载路径错误导致任务异常。
-
调度规则:节点过滤与优选需严格遵循优先级顺序,确保资源调度的合理性与高效性。
-
任务约束:多副本软切分任务需保证每个副本仅对应一个vNPU,避免资源冲突。
-
参数配置:软切分参数需通过指定字段(request)配置,确保参数能正确传递至pg,保障任务正常启动。
4. 后续演进方向
-
资源超配:后续支持片上内存资源超配功能,优化资源利用率;
-
调度优化:根据实际运行数据,优化节点优选的打分规则,提升调度效率;
-
监控增强:增加NPU软切分资源的实时监控能力,支持使用率、任务状态等信息的可视化展示。