# PR #7036 完整报告

- 仓库：`verl-project/verl`
- 标题：[ci] chrore: fix veomni ci
- 合并时间：2026-07-14 11:09
- 原文链接：http://prhub.com.cn/verl-project/verl/pull/7036

---

# 执行摘要

- 一句话：修复 VeOmni CI 测试中 MoE 处理函数获取失败问题
- 推荐动作：PR 内容明确，改动简单且正确，建议合并。可作为理解 VeOmni MoE 参数处理机制的小案例阅读。

# 功能与动机

修复 VeOmni CI 失败问题。原代码直接使用字典键访问，在配置不匹配时导致 KeyError，通过引入默认处理器提供更健壮的 fallback 机制。

# 实现拆解

仅修改了一个测试文件：
1. **增加导入**：在 `verl/workers/engine/veomni/utils` 导入中新增 `default_moe_param_handler` 符号。
2. **替换字典访问**：将 `MOE_PARAM_HANDERS["qwen3_5_moe"]` 改为 `MOE_PARAM_HANDERS.get("qwen3_5_moe", default_moe_param_handler)`，使得当键不存在时使用默认处理器，避免 KeyError。

关键文件：
- `tests/utils/veomni/test_special_export_unfused_experts.py`（模块 测试；类别 test；类型 test-coverage）: 测试文件，修复了 VeOmni CI 的 KeyError 问题。

关键符号：get_per_tensor_param, test_veomni_export_unfused_experts

## 关键源码片段

### `tests/utils/veomni/test_special_export_unfused_experts.py`

测试文件，修复了 VeOmni CI 的 KeyError 问题。

```python
# tests/utils/veomni/test_special_export_unfused_experts.py
# 修改了导入和字典访问方式，添加 fallback 避免 KeyError

from verl.workers.engine.veomni.utils import MOE_PARAM_HANDERS, default_moe_param_handler

def get_per_tensor_param(model, device_mesh):
    ep_rank, ep_size, ep_group = (
        device_mesh["ep"].get_local_rank(),
        device_mesh["ep"].size(),
        device_mesh["ep"].get_group(),
    )
    # 使用 .get() 并指定 fallback 处理器，防止配置键缺失时 KeyError
    process_func = MOE_PARAM_HANDERS.get("qwen3_5_moe", default_moe_param_handler)
    for name, param in model.named_parameters():
        if not isinstance(param, DTensor):
            continue
        unsharded_tensor = param.full_tensor()
        buffer = torch.empty_like(unsharded_tensor)
        for src_ep_rank in range(ep_size):
            tensor = unsharded_tensor if src_ep_rank == ep_rank else buffer
            torch.distributed.broadcast(tensor, group_src=src_ep_rank, group=ep_group)
            yield from process_func(name, tensor, ep_rank=src_ep_rank)

```

# 评论区精华

无人工 review 评论。Gemini Code Assist 机器人自动评论仅说明本次变更内容及自身服务下线通知，未涉及技术讨论。

- 暂无高价值评论线程

# 风险与影响

- 风险：风险极低。变更仅涉及测试文件中的两行代码，且为添加 fallback 行为，不会影响生产逻辑。若 `MOE_PARAM_HANDERS` 中不存在对应键时，使用 `default_moe_param_handler` 可能导致与预期不同的处理行为，但测试原本就会因 KeyError 失败，因此这是一种改进。
- 影响：直接影响 VeOmni 相关 CI 测试的稳定性，使测试在配置键缺失时不会崩溃，而是使用默认处理器继续执行。对用户和系统无影响。
- 风险标记：测试文件变更

# 关联脉络

- PR #6993 [veomni] fix: use default moe param handler: 同一仓库中最近与 VeOmni MoE 参数处理相关的 PR，可能引入或修改了 `default_moe_param_handler` 的概念。