Skip to content

[Feature] 支持 A5 HBG URMA,并对齐已交付的 TMR 能力 #2997

Open

Description

@ChaoZheng109

Summary

为 A5 host_build_graph 接通 URMA 请求提交与原生异步完成路径,复用已有通信域和 URMA 后端能力,并逐步对齐已交付的 tensormap_and_ringbuffer(TMR)功能与验收。

归属 #2722(L3+ 多卡通信与后端能力),总追踪 #2716。本 Issue 维护一个完整交付目标,可分多个 PR 实施;最小通路合入后继续保持开放,完成约定的能力对齐与验收后再关闭。

Motivation / Use Case

A5 HBG 已通过 #2967 支持非阻塞 defer_wait,但目前支持的是 counter 和 SDMA completion,不代表 URMA 已可用。现有 URMA GET/PUT、多 AIV、多 jetty、分块及通信域生命周期测试主要限定在 TMR。

基于主线 0569c7796b86ca3c98ebeb96ab481a6e8bd4695a 的源码核对,当前不是仅放开 runtime 限制并添加用例即可:

  1. Worker._domain_config() 明确拒绝 HBG URMA workspace;Host-source 域也限定 TMR。
  2. TMR URMA helper 依赖稳定的 urma_sender_id 和有效 task_token;HBG resident AsyncCtx 没有该发送者字段,并以 invalid legacy task token 配合 resident writer 工作,现有提交及容量检查不能原样套用。
  3. HBG token_valid() 只接受 counter/SDMA record;已有单测明确验证 URMA engine 登记失败。
  4. HBG resident CHECK 没有 URMA CQE 观察、错误处理和 SQ/CQ tail 推进。TMR 的对应实现运行于 AICPU,不能直接视为已经适用于 HBG AICore。

通信域上层及平台资源管理本身是公共能力:建域、窗口/workspace 分配、使用登记、跨 Run 保留和 fence 后释放应复用,不为 HBG 新建另一套通信域或所有权模型。

以上为源码调查结论,本 Issue 创建时没有新增 HBG URMA 上板验证。

Proposed API / Behavior

公共边界

  • 保留现有通信域、workspace_engines、UrmaConfig、Tensor/CommContext 和任务依赖接口;在实际执行链路可用后放开对应 runtime 限制。
  • 抽取并复用 TMR 的 URMA 会话、分块、多 jetty、预检及错误处理逻辑,runtime 差异通过明确适配表达,避免复制两套随后独立演进的通信算法。
  • 为 HBG 的实际并发 AIV 提供稳定、无冲突的发送者身份及队列归属;不能使用可能重复的逻辑 block 编号或固定队列 0 代替。
  • 接入 HBG resident 条件预留/登记、CHECK/FINISH 和依赖退休;明确 CQ 观察、队列回收的所有者与并发规则,验证 AICore 访问、缓存可见性及门铃更新的硬件资格。
  • AIV 返回只释放执行资源,不代表通信完成。任务须在普通执行及所有登记的 URMA 条件均完成后释放下游依赖;后继消费者看到正确数据。
  • 容量检查、部分提交、登记失败、CQ 错误及超时必须有确定行为;无法确认外部访问已停止时保留相关资源,不能伪造完成或提前释放。
  • 通信域已有生命周期机制继续作为唯一基础;补 HBG 使用与回收验收,只有发现具体缺陷才修改公共实现。

阶段一:最小完整通路及测试

先交付同机双卡、Device-source 域、单 AIV/单 jetty 的 URMA GET/PUT:

  • 贯通建域/workspace 发布、HBG 请求提交、条件登记、CQ 完成检测、任务退休和正常资源释放。
  • 提交前完成必要校验及条件容量预留,保留已提交工作的跟踪。
  • 通过真实 pending 观测证明 kernel 返回后通信仍可未完成,独立任务继续推进;消费者只能在实际通信完成后启动。
  • 覆盖正常 GET/PUT、完整 payload 与边界校验、重复执行、基本域复用,以及登记/完成失败和安全收尾。

该阶段具备可独立使用的最小闭环,不以同步等待或 legacy runtime 回退冒充 HBG deferred completion。

阶段二:对齐已交付 TMR 能力

在同一 Issue 内扩展实现适配和验收:

  • 多 AIV 同 peer/多 peer 并发、MIX 兄弟 AIV、跨任务稳定身份,核对实际队列归属。
  • 单 AIV 多 jetty、超过单 WQE 上限的分块、非整块尾部、小请求既有队列分配行为、容量边界、队列回绕及累计完成目标。
  • HBG 实际支持的 SPMD、MIX、sync-start 和单层 native Graph 组合,验证所有相关执行/条件完成后才释放依赖及消费者数据可见性。
  • 通信域跨 Run 复用、独立域释放、同名域重建、pending close、部分提交/CQ 错误/超时及未知停止状态下的保留。
  • Host-source 分片通信域、首次创建 initializer、跨 Run 复用、远端 URMA 读取及消费者;核对 CPU 导出/更新和 backing 的真实最后使用边界。
  • 保留现有 TMR、HBG counter/SDMA 回归,防止公共适配改动破坏既有行为。

对齐范围以已有实现和声明的支持组合为准。SHARED_POOL、批量提交及尚未合入的子域扩展仍由原 Issue 推进,不作为本 Issue 默认前置;其后续集成按实际交付再核定。本 Issue 不接管 CCU、独立 SDMA/RDMA 重构、本地/整表 MAP 或未声明的跨机能力。

验收条件

  • HBG 最小 URMA GET/PUT 路径真实上板执行,payload、边界和下游计算正确。
  • 证明提交 kernel 返回后仍存在 pending 通信、独立任务继续推进,且消费者未提前执行;无同步 fallback。
  • HBG 发送者身份、条件登记、CQ 观察与队列回收均有正向和负向测试,不仅放宽白名单。
  • 多 AIV/MIX、多 jetty、分块、队列回绕和跨任务复用符合现有 TMR 合同,真实队列计数与完成目标吻合。
  • HBG 任务形状与 native Graph 的依赖释放、可见性和资源保活通过适用组合验收。
  • 域复用/释放/重建及故障路径通过;未确认停止时不提前释放、重置或复用资源。
  • Host-source 域及 initializer 经过 HBG 端到端验收,按实际设备互联声明支持范围。
  • 更新/参数化可复用用例并接入合适的回归入口,记录实际执行数和 skip 原因;测试存在或全 skip 不算验收。
  • 在同一版本和硬件条件下记录基本吞吐/时延与同步对照,功能正确性与性能结果分别报告,不预设 HBG 与 TMR 性能相同。
  • 相关 PR 合入,支持范围和剩余边界清楚;阶段一完成不自动关闭本 Issue。

A5 硬件验证使用隔离 checkout、项目 venv、架构预检与 task-submit 队列,记录 simpler/PTO-ISA/CANN 版本、构件、设备拓扑及用例结果。硬件故障注入与公共接口修改按现有模块职责协同,不因通信归属接管通用调度器。

Alternatives Considered

  • 仅删除 runtime 限制、迁移测试: 无法解决 AsyncCtx、完成条件类型和 CQ 观察缺口。
  • 复制 TMR runtime 或新建 HBG 通信域: 重复已有公共能力,应复用域管理和请求逻辑,仅补 runtime 接口适配。
  • kernel 内阻塞等待 URMA: 无法满足 HBG 非阻塞执行及后继依赖合同,不能作为本目标的交付替代。
  • 先拆成“通信域重做”和“补测试”两个 Issue: 当前没有证据需要另建通信域模型;实现与对应测试按同一完整目标分阶段交付。

Additional Context

Related: #2722、#2708、#2988。已有基础与范围:#2775/#2779、#2787/#2835、#2673/#2886、#2674/#2825、#2911/#2929、#2657/#2922/#2938。HBG defer wait 基础:#2967。

源码依据:

Activity

  1. self-assigned this
    on Nov 11, 2026
  2. HaoZhang1024 commented on Nov 11, 2026

    @HaoZhang1024
    Collaborator

    建议保留 5 个一级任务,将难度最高的 任务 1「HBG Device URMA 最小完整通路」拆成 1.1、1.2、1.3 三个子任务,其余任务 2–5 保留。共 7 个交付单元,对应 7 个 PR;每个 PR 同时包含实现、对应测试和支持范围说明。1.3 是首个可供用户使用的功能交付点,1.1–1.3 全部完成才算任务 1 完成。

    拆分依据为主线 0569c7796b86ca3c98ebeb96ab481a6e8bd4695a。复用已有通信域、窗口、HCCL 子 communicator、URMA workspace 和 fence 后释放机制;HBG resident 完成框架复用已合入的 #2967。以下编号是计划序号,不是已创建的 PR 编号。

    任务层级与七个 PR

    部分 目标与改动范围 验收标准 前置
    1.1 公共 URMA 请求适配 将 session 构建、分块、队列容量预检及 event→完成目标转换与 TMR 专属上下文分离;运行时负责上下文有效性、条件预留/登记、错误记录与发布。先接回 TMR,保留现有 kernel 调用入口。 TMR GET/PUT、多 jetty、分块、零长度、容量不足及部分提交失败回归通过;实际提交与完成目标保持原合同。 无新增功能前置
    1.2 HBG sender 与 resident 条件登记 为实际驻留 AIV 建立稳定 sender 身份;对接 reserve_conditions → commit_condition → finish_reservation,补 URMA token 校验与错误传播。sender 设计包含 MIX 兄弟 AIV 的区分,首期验证可以限定单 AIV。 容量不足、非法 sender/workspace 在提交前拒绝;reservation 身份/代次错误被拒绝;部分提交保留实际完成目标;登记数量和队列行匹配。以 writer、adapter 和受控提交器做确定性验证。 1.1
    1.3 HBG CQ 完成与最小通路启用 实现 AICore CQE 观察、队列 tail/doorbell 更新及其所有权,接入 CHECK/FINISH、错误处理与资源保留;完整路径可用后放开 Device-source HBG URMA 入口。 同机双卡、单 AIV/单 jetty GET/PUT 真机通过;完整 payload、边界和消费者正确;观察到 kernel 返回后仍 pending、独立任务继续推进、消费者等待实际完成;重复运行、基本域复用、正常释放通过;容量拒绝、部分提交、登记失败、CQ 错误、超时及未确认停止时保留资源均有确定性验证。 1.1、1.2
    2. 多 AIV 的发送与完成隔离 将已建立的 sender/队列机制扩展验收到多个驻留 AIV、MIX 兄弟 AIV、同 peer/多 peer;核对跨任务身份与多个完成组的队列访问规则。 不同 sender 的生产队列不冲突;跨任务身份稳定;同 peer/多 peer 并发及 MIX 双 AIV 通过;非法身份有确定拒绝行为。 1.3
    3. 多 jetty、分块与队列边界 复用 TMR 已有算法和 UrmaConfig,对齐 HBG 多队列条件预留、分块请求与累计完成目标,覆盖部分提交。 多 jetty、超过单 WQE 上限、非整块尾部、小请求、容量边界、队列回绕通过;BB/CQE 计数与目标吻合;中途失败仍保留已提交工作跟踪。 1.3;单 AIV 范围可独立于任务 2 推进
    4. HBG 任务组合与 Device 域生命周期 补适用 SPMD、MIX、sync-start、单层 native Graph 的执行/异步条件 join;扩展跨 Run、独立释放、重建和故障收尾验收。复用公共 owner 模型,发现具体缺陷再修改实现。 全部相关执行与通信条件完成后才放行消费者;跨 Run 复用、独立域释放、同名重建、pending close、部分提交/CQ 错误/超时通过;未知停止状态下保留资源。 1.3、2、3
    5. HBG Host-source URMA 接通已有 Host-source 分片域、首次 initializer、CPU 导出/更新与 backing 保活;端到端可用后放开对应 runtime 限制。 首次初始化、远端读取、消费者和跨 Run 复用通过;CPU 更新及 close 遵循 backing 的真实最后使用边界;按实际互联记录适用范围,保留 Device/TMR 回归。 基础适配依赖 1.3;完整组合验收依赖任务 2、3、4 的相应结果

    依赖、并行与合入顺序

    硬前置表示后续 PR 的实现/启用依赖前项合同;可在依赖分支上提前开发,但按前置顺序合入。组合验收依赖表示基础功能可先交付,完整能力声明还须等相应组合通过。

    任务 1:HBG Device URMA 最小完整通路(一个父任务,三个子任务)
      1.1 公共请求适配
       └─→ 1.2 HBG sender / resident 条件登记
             └─→ 1.3 CQ 完成 / 退休 / 最小功能启用
                      │
                      ├─→ 任务 2:多 AIV / MIX sender
                      ├─→ 任务 3:多 jetty / 分块 / 队列边界
                      └─→ 任务 5:Host-source 基础适配
    
    1.3 + 任务 2 + 任务 3 ─→ 任务 4:任务组合 / Device 生命周期
    任务 5 + 任务 2/3/4 的适用结果 ─→ Host-source 完整组合验收
    全部七个交付单元 + 原 Issue 验收矩阵 ─→ 整体完成判断
    
    任务 硬前置及原因 可提前或并行做的工作 合入/完成条件
    1.1 已合入的 TMR URMA 和公共域实现;接口定型前完成 HBG CQ 所有权及 AICore 访问资格的分析 公共接口及现有回归梳理;与 1.3 的硬件访问调查交叉核对 公共抽取接回 TMR,原行为与错误合同验证通过即可独立合入
    1.2 1.1 提供 runtime 适配边界 sender 映射分析、resident writer 测试设计可提前 依赖 1.1 合入;完成身份、预留、登记及部分失败的确定性验证;公共 HBG URMA 入口仍关闭
    1.3 1.2 提供稳定身份和实际完成目标;间接依赖 1.1 CQ ownership 与 AICore 访问资格分析在 1.1 接口定型前完成;需要运行判定的假设先做最小资格实验,结果回填 1.1/1.2 合同 依赖 1.2 合入;完成真实异步 GET/PUT、安全收尾及硬件验收后启用 Device 入口;任务 1 至此完成
    2 1.3 提供可用提交与完成闭环 可与任务 3、5 分别推进,不强制等待它们 验收多 AIV 的独立队列和并发完成;涉及多 jetty 组合时复用任务 3 的结果
    3 1.3 提供完成记录和回收协议 单 AIV 多 jetty/分块可与任务 2 并行 本任务先完成单 AIV 范围;多 AIV × 多 jetty 的交叉组合在任务 4 汇总验收
    4 1.3、2、3,确保组合所需能力均已具备 基础 close/重建用例可提前准备和验证 相关实现合入后完成 SPMD/MIX/sync-start/native Graph 及 Device 生命周期组合;包含跨任务、队列回绕与故障保留
    5 基础 Device 通路 1.3;复用已有 Host-source 域实现 可与任务 2、3 并行做单 AIV/单 jetty Host-source 基础 Host-source PR 可先合入并准确限定支持范围;本任务最终验收还须覆盖所声明的多 AIV、多 jetty、任务形状组合及 backing 最后使用边界

    前置按实际接口和行为判断,不只看文件是否冲突。任务 2、3、5 若同时修改公共 adapter、条件容量或队列完成协议,先确定同一份接口合同和修改归属,再选择串行或依赖分支;本方案不表示自动并行派工。

    任务 5 若提前合入,后续组合验收可参数化复用任务 4 的用例并将结果回填本 Issue;发现必须修复的代码再更新相关 PR或追加必要修复,不为了固定七个 PR 而遗漏缺陷。第一轮计划仍按七个交付单元组织。

    CQ 所有权、同队列多完成组协调和 AICore 访问资格属于 1.1 接口定型前的设计前置,实际 observer 与完整功能仍由 1.3 交付;这不新增 PR。分析发现依赖硬件判别的未知时,先验证最小假设,再固定公共适配合同。

    任务 5 分别记录“基础功能已交付”和“完整组合验收完成”:基础 PR 合入不等于任务 5 完成。最终覆盖本 Issue 约定及实际声明支持的组合,不通过缩小声明省略约定能力。

    首期必须闭合的合同

    1. 提交前预留,提交后准确跟踪。 完成容量不足时不提交;部分提交失败时保留已提交工作的完成目标。子任务 1.3 明确覆盖容量拒绝、部分提交、登记失败、CQ 错误、超时及未确认停止时的资源保留。任务 4 扩展多任务、多域及复杂任务形状下的故障交互。所有阶段均遵守未确认外部访问停止时,不释放、不重置、不复用相关资源的合同。

    2. 稳定 sender 从子任务 1.2 建立。 来源是实际驻留 AIV 映射,跨任务保持一致;不以可能重复的逻辑 block 编号或固定队列 0 代替。

    3. 明确队列完成推进权。 TMR CQ poller 具有更新 CQ/SQ tail 和 doorbell 的副作用。HBG 的 condition-group lease 只证明当前 group 的排他访问;同一 sender 跨任务复用队列后,多个未完成 group 可能引用同一队列。子任务 1.3 须明确并验证同一队列的观察/回收协调规则,包含旧完成目标晚于新目标被观察时计数不回退。

    4. 先验证 AICore 硬件访问,再验证完整异步闭环。 子任务 1.3 内部依次验证 CQE 读取、缓存可见性与 doorbell 更新,以及 CHECK/FINISH、消费者数据可见性和资源回收。CQ 检查与 tail 更新作为同一个协议交付。

    5. 首期开放范围有实际准入边界。 1.3 启用时列明可用配置和任务形状。暂不支持的组合在能够判定的最早入口、提交 URMA 请求前明确拒绝;已有通用实现且准备开放的组合,在该 PR 内完成对应验证。文档说明与实际可进入的路径保持一致。

    回归、性能与范围

    • 每部分包含对应实现和测试,更新/参数化可复用用例并接入实际回归入口;相关改动保留 TMR、HBG counter/SDMA 回归。记录实际执行数和 skip 原因;测试存在、零执行或全 skip 均不算验收完成。
    • 各相关 PR 的 A5 硬件验证均使用隔离 checkout、项目 venv、架构预检和 task-submit 队列;固定并记录 simpler/PTO-ISA/CANN 版本、实际加载构件、设备拓扑和用例结果。硬件故障注入与公共接口修改按现有模块职责协同。
    • 子任务 1.3 在同一 simpler/PTO-ISA/CANN 版本、同一硬件条件下记录基本时延/吞吐与同步对照;固定输入、匹配构件和计时边界,记录同步/异步模式差异。任务 2、3 按同样条件补其新增并发及请求规模的测量。性能结果与功能正确性分别报告,不预设 HBG/TMR 性能关系。
    • Add: support ordered Device URMA subgroups on A5 #2970 的有序/非前缀子域、Add: support batched A5 Device URMA PUT submission #2994 的批量 PUT 当前仍未合入,分别留在原工作线,不作为本计划首期前置;后续合入再核定集成范围。SHARED_POOL 同样沿原 Issue 推进。
    • [Design] Kernel mode 多卡通信:能力边界、方向清单与首期交付 #2988 的 kernel-mode 多卡方向与本次 L3 HBG URMA 分开维护;本计划不扩展到 CCU、独立 SDMA/RDMA 重构或未声明的跨机能力。
    • 七部分完成后,按本 Issue 原验收条件统一核对能力矩阵、相关 PR 合入状态、文档及性能记录,再决定结案。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions