Skip to content

Align official GLM-5.2 configuration semantics - #4802

Draft
zrr1999 wants to merge 8 commits into
PaddlePaddle:developfrom
zrr1999:glm52-bit-exact-alignment
Draft

Align official GLM-5.2 configuration semantics#4802
zrr1999 wants to merge 8 commits into
PaddlePaddle:developfrom
zrr1999:glm52-bit-exact-alignment

Conversation

@zrr1999

@zrr1999 zrr1999 commented Jul 27, 2026

Copy link
Copy Markdown
Member

PR types

Function optimization

PR changes

Models

Description

范围

仅 PaddleFormers,6 个文件,head 696c6089

  • AOA 转换过程中保留 GLM DSA index 共享语义
  • 启用模型所需的 MLA latent RMSNorm 配置
  • 残差连接默认保持模型 dtype
  • 把官方 GLM-5.2 的 RoPE 配置与默认 RoPE 语义映射进 PaddleFleet
  • expert_tensor_model_parallel_size 传递到 PaddleFleet provider,并补上定向回归覆盖

本描述对应 PR head 14e8e542(内容 commit 696c6089 + 合并 upstream develop b7dd7983,无冲突)。

工作区当前 HEAD 是 1854f1c2 style: apply GLM lint formatting,worktree 处于 dirty(存在并发写者,dirty diff 摘要会变化,故此处不引用具体摘要)。不在本 PR 内的:该本地 commit 与 2f5cfa03 glm: map expert tensor parallel size5d4c431d glm-map-official-RoPE-semantics,以及 cli/train/sft/workflow.py(结果写出与 stage-1 边界采集修复)、cli/launcher.pydatasets/*trainer/* 中尚未提交的改动。

证据

Profile:minimum_complete / optimizer / cuda / bfloat16 / TP2 PP2 EP1 ETP1 SP=true world4。

  • 官方最小 GLM-5.2 checkpoint 可加载进独立 Paddle 路径,真实模块的 CUDA/bfloat16 forward+backward 在 NVIDIA H800 上完成;results/paddle/env.json 记录 weights_loaded=true、revision b4734de4facf877f85769a911abafc5283eab3d9model_config_sha256 185f93ee…d859a
  • 同侧确定性(loss 粒度):3 次重复运行,step-1 raw loss 均为 11.811029434204102 —— experiments/e053-moe-determinism/runs/paddle_det/repeat-{1,2,3}/raw_loss.jsonl
  • 100 步正式运行产出 results/paddle/loss.json,含 100 项未四舍五入的 losses[];bench loss checker:length_match=trueenough_steps=trueconsistent_steps=0max_diff=1.5865087509155273bit_exact_required_steps=false —— experiments/e055-acceptance-oracle-20260819/checker_run_receipt.json
  • checkpoint checker:两侧均为合法 safetensors,无 symlink/hardlink/稀疏文件,hash_match=false,torch 187 vs paddle 182 个 tensor
  • 键差异取证:相对官方最小集合的 52 处差异中,47 处是纯命名self_attn.core_attention.indexer.* 的嵌套层级、layers.N.transformer_layer.* 包装前缀、融合的 up_gate_proj),只有 5 处是结构性缺失(MTP indexer tensor)—— outputs/surveys/glm_52-structure-parity.jsonresults/paddle/checkpoint/model.safetensors.index.json

原描述中「forward loss 12.416634559631348」已撤回:当前没有任何 canonical receipt 能复现。当前跨框架 step-1 一对是 11.821396827697754(torch)与 11.811029434204102(paddle)。

Gate 状态

本 PR 不推进任何 gate。 全部证据都是 evidenceClass=probeformalWeight=0audit_source_freeze.py 返回 verdict=blocked,在此期间按契约任何 entrypoint receipt 一律 rejected。formal_alignment_steps = 0 / 100。acceptance oracle 的结果 schema 一半两侧已满足,等值一半未满足。

被什么阻塞

  • contract_environment.source-freeze-head-vs-pin —— 解除判据:audit_source_freeze.py 返回 verdict=pass
  • contract_environment.manifest-missing-format-key —— provenance checker 以 UnsupportedRunSchemaError 中止,根本无法执行
  • acceptance_oracle.results-schema-and-provenance —— dischargeStatus=discharging:schema 已完成,等值未完成
  • contract_environment.mtp-indexer-tensor-inventory —— 182 vs 187 个 tensor

未验证

  • 任何一步的跨框架逐位一致(consistent_steps=0/100
  • checkpoint canonical hash 相等;仅那 47 处纯命名差异就足以使其不相等,且这属于导出/映射层,与 5 处结构缺失的修复成本完全不同
  • backward / gradient / optimizer-state / update 张量等值;signed-zero 等值
  • Paddle 侧边界张量粒度的可重复性(只确立了 loss 粒度)
  • 对齐总开关启用后的正式 100 步对照运行 —— results/*/loss.json 早于该改动
  • 官方 GLM-5.2 的 MTP forward 是否真的消费其 indexer 权重:E-105 已确立这 5 个 tensor 是训练过且在分布内的,但这不证明被消费

Draft。本 PR 不声称 loss 对齐、checkpoint 对齐或完成。

@paddle-bot

paddle-bot Bot commented Jul 27, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@risemeup1111 risemeup1111 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已复查,当前还有一个需要先修复的配置兼容问题,细节见 inline review comment。

Powered by Nyanpasu with gpt-5.5 xhigh, please check the suggestions carefully.

Comment on lines +189 to +192
self.rope_interleave = rope_interleave
self.rotary_interleaved = (
False if rotary_interleaved is None else rotary_interleaved
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 优先级:P1
这里把 GLM-5.2 的 interleave 语义收进了 rotary_interleaved,但官方 config.json 序列化的是 indexer_rope_interleave。按现在的实现,这个值会一直留在一个这里读不到的额外字段里,self.rotary_interleaved 仍然是默认值,后续如果有代码依赖这个新字段就会读错。
处理要求:请针对该评论修复并提交新的 commit。

Suggested change
self.rope_interleave = rope_interleave
self.rotary_interleaved = (
False if rotary_interleaved is None else rotary_interleaved
)
self.indexer_rope_interleave = kwargs.get("indexer_rope_interleave", rotary_interleaved)
self.rotary_interleaved = (
False if self.indexer_rope_interleave is None else self.indexer_rope_interleave
)

@Paddle-CI-Bot

Paddle-CI-Bot commented Jul 27, 2026

Copy link
Copy Markdown

PaddleFormers Log Analysis

Run #32361432446 · Attempt 1

日志分析报告

流水线名称 问题标签 修复建议 日志片段
Unittest GPU CI (job 96376802569) API 兼容性 Bug / 测试代码缺陷 / 视频资源 4XX 1) GlmMoeDsa 测试代码中 GlmMoeDsaModelTester 直接调用 self.assertTrue 但该类未继承自 unittest.TestCase,需修复继承关系;2) GlmMoeDsaConfig 序列化后 rope_scaling 字段值与重加载不一致,需检查 to_dict/from_dict 逻辑;3) CompatibilityTest error(NameError: name 'Module' is not defined)为 HuggingFace transformers 版本与 Paddle 新增 Triton kernels 引起 import torch 侧效应,属兼容性 Bug;4) KimiK25 视频测试资源 example_video.mp4 返回 4XX,需更新测试资源或 mock URL 报错代码
Unittest GPU CI - upload-coverage (job 96383044193) coverage.xml 未生成 unittest-gpu-ci 测试失败导致 coverage.xml 未上传至 BOS,wget 返回 404 exit 8;此 job 是 unittest-gpu-ci 失败的次生影响,修复主 job 后自动解决 报错代码
CI_XPU (job 96376604217) Runner 配置缺失 Runner group HK-Clone 不存在,与本 PR 无关,CI 维护人员检查 runner group 配置,rerun 报错代码

失败的测试 case:

FAILED tests/transformers/glm_moe_dsa/test_modeling.py::GlmMoeDsaModelTest::test_GlmMoeDsa_lm_head_model
FAILED tests/transformers/glm_moe_dsa/test_modeling.py::GlmMoeDsaModelTest::test_config
FAILED tests/transformers/glm_moe_dsa/test_modeling.py::GlmMoeDsaModelTest::test_for_missed_attribute
FAILED tests/transformers/kimi_k25/test_processor.py::KimiK25ProcessorTest::test_video_frame_sampling

ERROR tests/transformers/llama/test_modeling.py::LlamaCompatibilityTest::test_llama_converter
ERROR tests/transformers/llama/test_modeling.py::LlamaCompatibilityTest::test_llama_converter_from_local_dir
ERROR tests/transformers/olmo2/test_modeling.py::Olmo2CompatibilityTest::test_Olmo2_converter_from_local_dir
ERROR tests/transformers/phi3/test_modeling.py::Phi3CompatibilityTest::test_Phi3_converter
ERROR tests/transformers/phi3/test_modeling.py::Phi3CompatibilityTest::test_Phi3_converter_from_local_dir
ERROR tests/transformers/qwen2/test_modeling.py::Qwen2CompatibilityTest::test_Qwen2_converter

根本原因分析:

本 PR(glm52-bit-exact-alignment,PR #4802)新增/修改了 glm_moe_dsa 模型,但测试文件 tests/transformers/glm_moe_dsa/test_modeling.pyGlmMoeDsaModelTester 类直接调用 self.assertTrue 而未继承 unittest.TestCase,同时 GlmMoeDsaConfigrope_scaling 字段在 to_dict/from_dict 往返序列化后值不一致(partial_rotary_factor 丢失);CompatibilityTest 的 6 个 ERROR 是 HuggingFace transformers 包中 modeling_llama.py 等在 import 时触发类型注解解析,Module 未导入到当前 namespace,为 import torch 的侧效应兼容性问题;KimiK25 视频测试资源 HTTP 4XX 为测试依赖的外部 BOS 资源失效。

修复建议:

  1. GlmMoeDsaModelTester.assertTrue 错误GlmMoeDsaModelTester 应继承自 unittest.TestCase,或将 self.assertTrue(config.use_qk_norm) 移到 GlmMoeDsaModelTest(已继承 unittest.TestCase)的 test_* 方法里调用。检查 tests/transformers/glm_moe_dsa/test_modeling.py:118

  2. test_config rope_scaling 序列化不一致GlmMoeDsaConfigrope_scaling 默认值设置了 partial_rotary_factor 等字段,但 to_dict 后重新加载时被置为 None。需在 configuration_glm_moe_dsa.pyto_dict / from_dict 中确保 rope_scaling 字段完整还原,或在测试 tester 的 get_config() 中不设 partial_rotary_factor(若该字段对 rope_type=default 无效应直接去掉)。

  3. CompatibilityTest NameError: name 'Module' is not defined:这是 import torch 触发 HuggingFace transformers 新版本 modeling_llama.py 类型注解解析时 paddle.nn.Module 未在 torch 的命名空间内的问题。属兼容性 Bug,rerun 验证是否稳定复现;若稳定,需在 @require_package("transformers", "torch") 的 setUpClass 中捕获该 NameError 或在 CI 镜像中固定 transformers 包版本。

  4. KimiK25 视频资源 4XXhttp://paddlenlp.bj.bcebos.com/datasets/paddlemix/demo_video/example_video.mp4 返回 4XX,需重新上传视频资源至 BOS 或在 test_video_frame_sampling 中 mock 视频 URL(使用本地临时文件替代网络资源)。


🔍 准确性记录:请点击评论底部 😊 图标,选择 👍(准确)或 👎(有误),将自动记录到 CI 监控系统

🔄 每次 Re-run 后自动更新

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants