Open
DeepSeek V4 CSA + CP 迁移到 HP:困难点深度分析 #4
yide12Add on  Jun 12
yide12
yide12Collaborators
Jun 12 Create

DeepSeek V4 CSA + CP 迁移到 HP:困难点深度分析

执行摘要

迁移范围明确:需要将 csa.py + csa_context_parallel.py 迁移到 HP,提供完整的 CP + CSA 能力。deepseek_v4_hybrid_attention.py(顶层 MLA 投影封装)保留在 MF,不迁移。

迁移到 HP:
    csa.py (1652 行)                    ✅ 迁移
        ├─ Compressor
        ├─ CSAIndexer
        └─ CompressedSparseAttention

    csa_context_parallel.py (495 行)   ✅ 迁移
        └─ CP 两阶段算法

保留在 MF:
    deepseek_v4_hybrid_attention.py (657 行)  ❌ 不迁移
        └─ DSv4HybridSelfAttention (Q/KV 投影 + RoPE)

本期总代码范围:2147 行(csa.py 1652 + csa_context_parallel.py 495)。

核心结论:

  1. 迁移难度仍然偏高,但不是“完整 DeepSeek V4 Attention 迁移”。顶层 DSv4HybridSelfAttention 保留在 MF 后,Q/KV 投影、顶层 RoPE、output projection、MultiLatentAttention 基类都不进入 HP 范围。
  2. 真正需要 HP 承接的是 CSA 本体 + CP 两阶段算法:Compressor、CSAIndexer、CompressedSparseAttention、host-side top-k/index 构建、fused/naive sparse attention、Indexer Loss、CP halo + select-and-pad。
  3. 不建议把本期目标写成“重写 PyTorch 版 DSv4HybridSelfAttention”。MF 顶层仍会调用 CSA;因此 HP 侧首先要提供可被 MF 使用的 CSA 能力。HP 当前 PyTorch 平台下 npu_lightning_indexer_v2、npu_sparse_attn_shared_kv、npu_sparse_lightning_indexer_grad_kl_loss_v2 仍是 NotImplementedError,完整 fused CSA 首期应以 HP 的 MindSpore/platform 路径为主。
  4. dsa.py 不是独立迁移目标文件,但 csa.py 直接依赖其中的 Hadamard rotation、Indexer Loss autoscaler 和 fused loss wrapper;这些依赖必须以“最小依赖迁移/抽取”的方式进入 HP,否则 csa.py 无法独立落地。

推荐策略:在 HP 中新增 DeepSeek V4 CSA 模块,保留 MF 顶层 HybridAttention 作为调用方;先完成 MindSpore 兼容的 HP CSA + CP,随后再按 HP 平台抽象程度推进 Torch 化。预计 4-6 周(1-2 人) 完成可用版本;若同时要求 Torch fused op parity 和全量 DistributedOp 规则,预计 6-8 周。


1. 明确边界:迁移什么,不迁移什么

1.1 迁移到 HP 的内容

文件 行数 迁移内容 迁移后 HP 应拥有的能力
csa.py 1652 Compressor、CSAIndexer、CompressedSparseAttention、索引构建、naive sparse attention、fused op 调用、Indexer Loss 接入 单卡 CSA 完整 forward/backward,支持 ratio=0/4/128,支持 fused/naive 路径
csa_context_parallel.py 495 CP 两阶段算法:window halo、compressed KV all-gather、select-and-pad、CP wrapper CP>1 时 CSA 输出与 CP=1 对齐,支持 Stage-1 全局 compressed KV 和 Stage-2 local query attention

迁移后的 HP 对外应暴露:

from hyper_parallel.models.deepseek_v4.csa import (
    Compressor,
    CompressorSubmodules,
    CSAIndexer,
    CSAIndexerSubmodules,
    CompressedSparseAttention,
    CompressedSparseAttentionSubmodules,
)

from hyper_parallel.core.context_parallel.deepseek_v4_context_parallel import (
    DeepSeekV4CPConfig,
    patch_deepseek_v4_compressed_sparse_attention_forward,
)

1.2 保留在 MF 的内容

文件 行数 保留内容 不迁移原因
deepseek_v4_hybrid_attention.py 657 DSv4HybridSelfAttention 顶层 MLA 封装 属于 MF 模型结构所有权:Q/KV projection、RoPE forward/inverse、output projection、MultiLatentAttention 继承关系都不属于 HP CSA/CP 范围

MF 侧可以有最小接入改动,例如 import 路径从 MF CSA 改为 HP CSA,或把 MF config 转成 HP CSA config;但这个文件不作为迁移目标,不移动到 HP,不要求 HP 重写 DSv4HybridSelfAttention。

1.3 dsa.py 的特殊定位

dsa.py 不在用户给定的迁移文件清单中,但 csa.py 有硬依赖:

from mindformers.pynative.transformers.experimental_attention_variant.dsa import (
    DSAIndexerLossAutoScaler,
    FusedDSAIndexerLoss,
    HadamardRotation,
)

因此需要在 HP 中处理三个依赖点:

依赖 来源 HP 处理建议
HadamardRotation dsa.py 抽取到 HP DeepSeek V4 CSA dependency 模块,或放入 hyper_parallel/models/deepseek_v4/dsa.py
DSAIndexerLossAutoScaler dsa.py 跟随 CompressedSparseAttention 训练态 loss 路径迁移
FusedDSAIndexerLoss dsa.py 依赖 npu_sparse_lightning_indexer_grad_kl_loss_v2,需要走 HP custom_ops/platform

结论:不迁移整个 dsa.py,但必须迁移 csa.py 所需的最小 dsa dependency。否则 CompressedSparseAttention 的 ratio=4 训练态和 indexer loss 不完整。


2. 当前代码事实

2.1 MF 侧 CSA 文件结构

mf_pr8311_latest/mindformers/pynative/transformers/experimental_attention_variant/csa.py 的核心结构:

csa.py (1652 行)
├─ 62-426:  host/device 索引构建 + unfused sparse attention
├─ 427-696: CompressorSubmodules + Compressor
├─ 697-1036: CSAIndexerSubmodules + CSAIndexer
└─ 1037-1652: CompressedSparseAttentionSubmodules + CompressedSparseAttention

关键依赖:

MindSpore:
    nn.Cell, Tensor, mint, ops, mstype, Parameter, comm

MindFormers:
    MLATransformerConfig
    ModuleSpec / build_module
    ApplyRotaryPosEmb
    Linear / RMSNorm 等 submodule spec

HP custom ops:
    npu_lightning_indexer_v2
    npu_sparse_attn_shared_kv

dsa.py:
    HadamardRotation
    DSAIndexerLossAutoScaler
    FusedDSAIndexerLoss

配置字段直接访问约 20+ 个,集中在:

init_method
csa_window_size
params_dtype / compute_dtype
dsa_indexer_loss_coeff
v_head_dim / hidden_size
rotary_interleaved / multi_latent_attention
qk_pos_emb_head_dim
num_attention_heads
q_lora_rank
dsa_indexer_n_heads / dsa_indexer_head_dim / dsa_indexer_topk
force_unfused_dsa
dsa_indexer_use_sparse_loss
num_layers / mtp_num_layers

2.2 MF 侧 CP 文件结构

csa_context_parallel.py 的核心函数:

csa_context_parallel.py (495 行)
├─ build_select_pad_gather_index()
├─ build_cmp_cu_seqlens()
├─ select_and_pad_smallop()
├─ stage1_compress_with_halo()
├─ assemble_window_halo()
├─ two_stage_cp_naive_attention()
├─ two_stage_cp_fused_attention()
├─ CompressedSparseAttentionContextParallel
└─ stage2_visible_topk_idxs()

这部分算法本身比 csa.py 更适合迁移到 HP,但当前实现仍有 MF 绑定:

MindSpore:
    mint, ops, Tensor, mstype, comm

MF CSA:
    懒加载 csa.py 中的 get_window_topk_idxs / get_compress_topk_idxs
    直接调用 cell.compressor / cell.indexer / cell._construct_naive

2.3 HP 侧已有基础

HP 当前已经有 DeepSeek V4 CP 相关基础:

hp_feature/hyper_parallel/core/context_parallel/deepseek_v4_context_parallel.py
├─ DeepSeekV4CPConfig
├─ DeepSeekV4CPContext
├─ build_select_pad_gather_index()
├─ build_cmp_cu_seqlens()
├─ stage1_compress_with_halo()
├─ assemble_window_halo()
├─ DeepSeekV4CompressedSparseAttentionCPForward
└─ patch_deepseek_v4_compressed_sparse_attention_forward()

它目前的边界是:patch 一个 MF CompressedSparseAttention cell,HP 承接 CP forward。这可以作为 CP 迁移基础,但不等同于已经完成 csa.py 迁移,因为 Compressor、CSAIndexer、CompressedSparseAttention 本体仍在 MF。

HP 也已经有 custom ops wrapper:

hyper_parallel/custom_ops/experimental/experimental_ops.py
├─ npu_lightning_indexer_v2
├─ npu_sparse_attn_shared_kv
└─ npu_sparse_lightning_indexer_grad_kl_loss_v2

但需要注意:HP 的 PyTorch platform 当前对这三个 DeepSeek V4 fused ops 返回 NotImplementedError;MindSpore platform 下有对应 custom op wrapper 和 C++ binding。因此本期“完整 CSA”不能简单定义为纯 Torch 重写。


3. 迁移难点拆解

3.1 困难点一:CSA 本体深度绑定 MF Cell/Spec/Config

csa.py 三个核心类都是 nn.Cell:

class Compressor(nn.Cell):
    ...

class CSAIndexer(nn.Cell):
    ...

class CompressedSparseAttention(nn.Cell):
    ...

构造方式依赖 MF 的动态模块系统:

self.linear_wkv = build_module(
    submodules.linear_wkv,
    input_size=config.hidden_size,
    output_size=proj_out_dim,
    params_dtype=config.params_dtype,
    compute_dtype=config.compute_dtype,
    init_method=config.init_method,
    bias=False,
)

迁移到 HP 时不能只复制文件,还要决定:

  1. HP 是否允许 DeepSeek V4 CSA 继续接受 MF ModuleSpec/MLATransformerConfig。
  2. HP 是否提供自己的 DeepSeekV4CSAConfig 和 submodule factory。
  3. MF 顶层保留后,MF 如何构造 HP CSA,同时保持参数名和 checkpoint 兼容。

推荐做法:

短期:
    HP CSA 保持 MindSpore Cell 兼容,避免影响 MF 顶层调用。
    定义最小 DeepSeekV4CSAConfig 或 from_mf_config(),减少对 MLATransformerConfig 的硬依赖。
    submodule 构建先兼容 MF ModuleSpec,后续再收敛到 HP module spec。

中期:
    将可复用算法函数下沉到平台无关层。
    将 Cell/Module 差异收束在 adapter/factory。

3.2 困难点二:Compressor 不只是 Linear,含 overlap 压缩、APE、RoPE、Hadamard

Compressor 迁移难点:

逻辑 难点
ratio=4 overlap 压缩 CP rank 边界需要左侧 halo,Stage-1 需要插入 pad/dup slot
ratio=128 non-overlap 压缩 和 ratio=4 的位置编码、slot 数、select-and-pad 规则不同
APE 参数 self.ape = Parameter(...),需保持参数注册和 state_dict 名称
gated projection linear_wkv + linear_wgate + softmax/split/reshape 组合,shape 容错低
RoPE 使用 ApplyRotaryPosEmb(config, for_k_pos_emb=True),迁移后需要 HP 内可调用实现
Hadamard rotation indexer compressor 使用,需要最小迁移 dsa.py 依赖

这部分如果只做机械复制,最大风险是 CP 边界和位置编码 offset 出错,导致 CP=1 与 CP>1 数值不一致。

3.3 困难点三:CSAIndexer 同时依赖投影、Hadamard、fused Op-1

CSAIndexer 负责:

qr / x
  -> q projection
  -> compressed k projection
  -> q/k Hadamard rotation
  -> weights projection
  -> npu_lightning_indexer_v2
  -> top-k indices + top-k score

关键风险:

  1. q_lora_rank、dsa_indexer_n_heads、dsa_indexer_head_dim、dsa_indexer_topk 等配置要精确映射。
  2. fused Op-1 期望 layout/shape 与注释一致,迁移后 wrapper 的参数顺序不能变。
  3. naive path 和 fused path 的 top-k 语义要一致,尤其是 causal/window 可见性。
  4. CP 下 indexer compressor 也要执行 Stage-1 global compressed KV,否则各 rank top-k 候选空间不完整。

3.4 困难点四:CompressedSparseAttention 是完整 CSA 控制面

CompressedSparseAttention 不是单个 attention op,它包含:

ratio=0:
    window-only attention

ratio=4:
    compressor
    indexer
    window top-k + compressed top-k 拼接
    training-time indexer loss
    fused / naive attention

ratio=128:
    compressor
    compressed top-k
    fused / naive attention

还包含几个容易遗漏的状态:

状态 作用
attn_sink learnable per-head sink 参数
force_unfused 控制 naive/fused 路径
tp_size / tp_group loss 路径中可能 all-gather query
compress_ratio 从 config.csa_compress_ratios[layer_number - 1] 得到
ori_win_left / cmp_win_left fused op sparse window 参数

迁移时必须保留这些状态,否则虽然单卡 forward 可能跑通,但训练态、fused path 或 CP path 会缺能力。

3.5 困难点五:CP 两阶段算法需要从“patch MF cell”升级为“HP CSA 原生能力”

HP 现有 deepseek_v4_context_parallel.py 已经能 patch MF CSA cell,逻辑上是:

HP CP wrapper
  -> parent.compressor
  -> parent.indexer.compressor
  -> parent._construct_naive(...)

新迁移范围要求 HP 拥有 csa.py 本体后,目标应变成:

MF DSv4HybridSelfAttention
  -> HP CompressedSparseAttention
        -> HP Compressor
        -> HP CSAIndexer
        -> HP CP forward

也就是说,现有 patch 机制可以作为兼容入口,但最终不应依赖 MF 里的 CompressedSparseAttention 类。


4. 推荐 HP 落地架构

4.1 目录建议

hyper_parallel/
  models/
    deepseek_v4/
      __init__.py
      config.py                    # DeepSeekV4CSAConfig + from_mf_config()
      csa.py                       # Compressor / CSAIndexer / CompressedSparseAttention
      dsa_deps.py                  # HadamardRotation + Indexer Loss 最小依赖
      submodules.py                # submodule factory / spec 兼容层

  core/
    context_parallel/
      deepseek_v4_context_parallel.py
                                    # 复用/扩展现有 CP two-stage forward

不建议新增 hybrid_attention.py 到 HP,因为顶层 MLA 封装已明确保留在 MF。

4.2 MF 与 HP 的调用边界

MF 保留:

DSv4HybridSelfAttention
├─ Q projection
├─ KV projection
├─ 顶层 RoPE forward/inverse
├─ 调用 self.core_attention(...)
└─ output projection

HP 提供:

CompressedSparseAttention
├─ Compressor
├─ CSAIndexer
├─ sparse attention naive/fused
├─ indexer loss
└─ CP two-stage forward

建议接口保持与现有 MF CSA 一致:

def construct(self, query, key, value, attention_mask, x=None, qr=None, actual_seq_len=None):
    ...

需要保持的 shape/layout 约定:

输入/输出 约定
query [S, B, N, D],CSA 边界 seq-first
key / value shared KV,通常 [S, B, 1, D] 或 [S, B, D]
x 原 hidden states,[S, B, hidden_size],compressor 使用
qr low-rank query,ratio=4 indexer 使用
输出 [S, B, N * D],交还 MF output projection

4.3 Config 策略

不应把完整 MLATransformerConfig 搬到 HP。建议定义最小配置:

@dataclass
class DeepSeekV4CSAConfig:
    hidden_size: int
    num_attention_heads: int
    v_head_dim: int
    q_lora_rank: int
    qk_pos_emb_head_dim: int
    csa_compress_ratios: list[int]
    csa_window_size: int
    dsa_indexer_n_heads: int
    dsa_indexer_head_dim: int
    dsa_indexer_topk: int
    dsa_indexer_loss_coeff: float | None = None
    dsa_indexer_use_sparse_loss: bool = False
    force_unfused_dsa: bool = False
    params_dtype: object = None
    compute_dtype: object = None
    layernorm_epsilon: float = 1e-6
    rotary_interleaved: bool = False
    multi_latent_attention: bool = True
    num_layers: int = 1
    mtp_num_layers: int = 0

并提供:

def from_mf_config(config) -> DeepSeekV4CSAConfig:
    ...

这样 MF 顶层可继续使用自己的完整 config,而 HP CSA 只消费 CSA 必需字段。

4.4 Submodule 构建策略

当前 csa.py 依赖:

ModuleSpec
build_module
Linear
FusedRMSNorm

建议分两阶段:

阶段 策略
Phase 1 HP CSA 接收现有 submodules dataclass,兼容 MF 传入的 ModuleSpec/type,保证迁移低风险
Phase 2 抽象为 HP submodule factory,逐步去掉对 mindformers.parallel_core.utils.spec_utils 的直接依赖

不建议首期强行重写所有 Linear/Norm 构造,否则会把风险从“迁移 CSA”扩大成“迁移 MF parallel_core 子模块”。


5. 分阶段实施计划

Phase 0:边界冻结与现状补齐(1-2 天)

任务:

  • 明确 HP 中 CSA 的目标 import path。
  • 明确 MF deepseek_v4_hybrid_attention.py 只做最小接入改动。
  • 列出 csa.py 对 dsa.py 的最小依赖清单。
  • 确认 HP 当前 deepseek_v4_context_parallel.py 哪些函数可直接复用。

产出:

  • DeepSeek V4 CSA migration contract 小文档或代码注释。
  • MF->HP import 替换点清单。

Phase 1:CSA 依赖最小抽取(3-5 天)

任务:

  • 在 HP 新增 models/deepseek_v4/config.py。
  • 在 HP 新增 models/deepseek_v4/dsa_deps.py 或等价文件。
  • 抽取 HadamardRotation、DSAIndexerLossAutoScaler、FusedDSAIndexerLoss。
  • 改 fused loss 调用走 hyper_parallel.custom_ops.experimental。
  • 单测 Hadamard、loss scaler、fused op import fallback。

验收:

  • 不依赖 MF dsa.py 也能 import HP CSA 依赖。
  • fused op 缺失时错误信息明确;naive path 不受影响。

Phase 2:迁移 csa.py 本体(8-12 天)

任务:

  • 将 Compressor、CSAIndexer、CompressedSparseAttention 移到 HP。
  • 将索引构建函数和 unfused_compressed_sparse_attn 移到 HP。
  • 替换 MF import:ModuleSpec/build_module、ApplyRotaryPosEmb、config、dsa deps。
  • 保留原构造参数和 construct() 签名。
  • 保持参数名:ape、attn_sink、linear/norm 子模块命名尽量不变。

验收:

  • ratio=0/4/128 单卡 forward 可跑。
  • naive path 与 MF 原实现数值对齐。
  • fused Op-1/Op-2 可 import,并在可用环境下跑通基本 case。
  • 训练态 indexer loss 可反向。

Phase 3:迁移/整合 csa_context_parallel.py(5-7 天)

任务:

  • 将 build_select_pad_gather_index、build_cmp_cu_seqlens、stage1_compress_with_halo、assemble_window_halo 等函数统一到 HP CP 模块。
  • 复用或扩展现有 DeepSeekV4CPConfig / DeepSeekV4CPContext。
  • 将直接 comm.all_gather_into_tensor 替换为 HP platform/DeviceMesh 通信。
  • 将 CP forward 从 patch MF cell 升级为可 patch/调用 HP CompressedSparseAttention。
  • 补齐 actual_seq_len / packed sequence 的支持或明确首期限制。

验收:

  • CP=1 与原单卡结果一致。
  • CP=2/4 的 Stage-1 compressed KV 与 CP=1 block-for-block 对齐。
  • window halo 不跨越非法边界。
  • ratio=4 的 compressor halo 和 indexer compressor halo 都正确。

Phase 4:MF 顶层接入(3-5 天)

任务:

  • 在 deepseek_v4_hybrid_attention.py 中保持类和文件不迁移,只替换 CSA import/构造路径。
  • 增加 from_mf_config() 或兼容 config 传递。
  • 确认 self.core_attention(...) 的调用参数不变。
  • 确认 checkpoint 参数名兼容策略。

验收:

  • MF 顶层 DSv4HybridSelfAttention 不移动、不重写。
  • 端到端 attention forward 能调用 HP CSA。
  • 旧 MF CSA 与新 HP CSA 可用同一组小规模输入做数值对齐。

Phase 5:测试与稳定化(7-10 天)

任务:

  • 搬迁/复用 MF 已有测试:
    • test_csa.py
    • test_naive_csa.py
    • test_csa_indexer.py
    • test_csa_context_parallel.py
    • test_fused_vs_naive_alignment.py
  • 补 HP 侧测试:
    • config mapping
    • HP import path
    • CP patch/call path
    • fused op availability fallback
  • 增加 CP 多卡对齐测试。

验收:

  • 单卡 naive/fused 对齐。
  • CP=1/2/4 对齐。
  • 训练态 loss + backward 通过。
  • fused op 不可用时 naive path 不退化失败。

6. 工作量估算

阶段 内容 预计工作量 风险
Phase 0 边界冻结与迁移 contract 1-2 天 低
Phase 1 dsa.py 最小依赖抽取 3-5 天 中
Phase 2 csa.py 本体迁移 8-12 天 高
Phase 3 csa_context_parallel.py 迁移/整合 5-7 天 中高
Phase 4 MF 顶层接入 3-5 天 中
Phase 5 测试与稳定化 7-10 天 中高
总计 27-41 人日 4-6 周(1-2 人)

如果增加以下要求,工作量会上升:

追加要求 增量
HP PyTorch 平台完整支持 fused CSA 三个 custom ops +2-4 周
DistributedOp 规则完整覆盖 Op-1/Op-2/Op-3 +1-2 周
packed sequence 全路径首期必须支持 +1 周
state_dict 跨 MF/HP 无缝加载严格兼容 +3-5 天

7. 迁移后调用链

7.1 目标调用链

MF: DSv4HybridSelfAttention
    ├─ linear_q_down_proj / q_layernorm / linear_q_up_proj
    ├─ linear_kv_proj / kv_layernorm
    ├─ RoPE forward/inverse
    ├─ HP: CompressedSparseAttention
    │   ├─ HP: Compressor
    │   ├─ HP: CSAIndexer
    │   ├─ HP: sparse attention naive/fused
    │   └─ HP: CP two-stage forward
    └─ linear_proj

7.2 CP 路径

local query/key/x/qr
  -> extract local ori_kv
  -> all-gather left window halo
  -> stage1_compress_with_halo(local_x, halo_x)
  -> all-gather local compressed slots
  -> select_and_pad to global compressed KV
  -> local Stage-2 attention
  -> output local shard

ratio=4 需要两套 Stage-1:

main compressor:
    parent.compressor

indexer compressor:
    parent.indexer.compressor

这点必须保留,否则 indexer top-k 的 compressed K 空间与 attention 使用的 compressed KV 不一致。


8. 关键风险与缓解

风险 1:把“迁移到 HP”误解为“重写完整 Torch HybridAttention”

影响:

  • 会错误纳入 deepseek_v4_hybrid_attention.py。
  • 会把工作量扩大到 Q/KV projection、inverse RoPE、output projection。
  • 当前 HP Torch custom ops 还不支持 DSv4 fused CSA,短期无法交付完整能力。

缓解:

  • 文档和任务拆分只写 csa.py + csa_context_parallel.py。
  • deepseek_v4_hybrid_attention.py 只允许最小接入改动。
  • 首期目标定义为 HP 拥有 CSA/CP,MF 顶层调用 HP CSA。

风险 2:dsa.py 依赖被遗漏

影响:

  • csa.py import 失败。
  • ratio=4 训练态 Indexer Loss 不完整。
  • Hadamard rotation 缺失导致 indexer 数值偏差。

缓解:

  • 明确 dsa.py 是“最小依赖抽取”,不是额外迁移目标。
  • 为 Hadamard 和 loss scaler 单独建测试。

风险 3:Config/ModuleSpec 依赖继续把 HP 绑回 MF

影响:

  • 名义上迁到 HP,实际上仍依赖 MF parallel_core。
  • 后续 Torch/platform 化困难。

缓解:

  • 首期可兼容 MF config/spec,但新增 HP DeepSeekV4CSAConfig 和转换函数。
  • 把 MF 兼容代码放在边界层,CSA 主逻辑逐步消费 HP config。

风险 4:CP Stage-1 边界错误

影响:

  • CP>1 与 CP=1 不一致。
  • ratio=4 第一 compressed slot、rank 边界 halo、select-and-pad sentinel 极易出错。

缓解:

  • 复用现有 build_select_pad_gather_index 用例。
  • 增加 Stage-1 block-for-block golden。
  • 对 rank0 pad、rank>0 boundary dup、tail pad 分别建 case。

风险 5:fused op 环境差异

影响:

  • 某些 CANN/Ascend 环境下 Op-2 可能 import 成功但运行异常。
  • Torch platform 当前 fused ops 未实现。

缓解:

  • naive path 必须始终可用。
  • fused path 加 availability/runnable 检查。
  • 测试中区分 import skip、runtime skip、数值失败。

9. 成功标准

功能正确性

工程边界

测试覆盖


10. 最终结论

本次迁移不是“DeepSeek V4 完整 attention 迁移”,而是把 CSA 核心和 CP 算法从 MF 下沉到 HP:

HP 必须拥有:
    csa.py
    csa_context_parallel.py

MF 必须保留:
    deepseek_v4_hybrid_attention.py

这个边界会显著降低顶层模型迁移风险,但不会让任务变成简单复制文件。真正困难集中在:

  1. csa.py 对 MF Cell/Parameter/Config/Spec 的绑定。
  2. csa.py 对 dsa.py Hadamard/Loss 的隐式依赖。
  3. ratio=4 overlap compressor 与 CP Stage-1 halo/select-and-pad 的数值一致性。
  4. fused Op-1/Op-2/Op-3 在 HP platform 下的可用性和 fallback。

推荐按 4-6 周 做 HP MindSpore-compatible CSA + CP 首期交付;Torch fused CSA 和更彻底的平台无关重构作为后续增强,不应混入本期迁移范围。

likedislike