Skip to content

feat(model): support LFM2-1.2B - #587

Open
Hyacinth25 wants to merge 2 commits into
InfiniTensor:mainfrom
Hyacinth25:feat/support-lfm2-1-2b
Open

Hyacinth25 wants to merge 2 commits into
InfiniTensor:mainfrom
Hyacinth25:feat/support-lfm2-1-2b

Conversation

@Hyacinth25

Copy link
Copy Markdown

概述

  • 新增 LiquidAI/LFM2-1.2B 的模型注册、配置归一化及 Safetensors 权重名称映射。
  • 实现 LFM2 的混合 Decoder:10 层 ShortConv 与 6 层 GQA Attention 交错,并实现 LFM2 RMSNorm 与 SwiGLU MLP。
  • 为 Static / Paged 两种调度方式同时维护 Attention KV Cache 和 ShortConv 循环状态。
  • 新增 Transformers 参考生成、tiny / 真实模型正确性、缓存 reset 与性能记录脚本。
  • LFM2_REPORT.md 中记录实现思路、复现命令、平台状态、结果和已知限制。

动机

LFM2 将循环 ShortConv 与 GQA Attention 交错使用。现有全 Attention 模型模板只能维护 KV Cache,无法保存 Prefill 与增量 Decode 所需的 ShortConv 历史卷积状态。本 PR 在尽量复用 InfiniLM 既有 Attention、Linear、MLP 与缓存基础设施的前提下,补齐了这一模型结构和状态路由。

变更类型

  • feat:新功能 / 新模型
  • test:新增或修正测试
  • docs:文档
  • Breaking change

支持平台与测试结果

平台 模型 / 测试 状态
NVIDIA RTX 4090,CUDA 12.8(干净源码构建) LFM2-1.2B BF16,Static Cache,max_cache_len=256,三条 Prompt,A/B/C/A/B/C 通过;每条 Prompt 的 16 个生成 token 均与 Transformers 精确一致,两轮请求一致。
NVIDIA RTX 4090,CUDA 12.8(干净源码构建) LFM2-1.2B BF16,Paged Cache,max_cache_len=1024,三条 Prompt,A/B/C/A/B/C 通过;每条 Prompt 的 16 个生成 token 均与 Transformers 精确一致,两轮请求一致。
NVIDIA RTX 4090,CUDA 12.8(干净源码构建) tiny LFM2 F32 Full 与 Prefill+Decode 通过;设置 NVIDIA_TF32_OVERRIDE=0 后最大 logits 绝对误差为 5.96e-08,小于 1e-5,argmax 一致。
CPU tiny LFM2 F32 Full 与 Prefill+Decode 通过。
昇腾 910B1,CANN 9.0 Runtime、所需基础算子和 tiny LFM2 F32 通过。
昇腾 910B1,CANN 9.0 LFM2-1.2B BF16 部分支持;可以加载模型并进入第 0 层,但 Linear/GEMM 尚未达到可信稳定状态。

当前源码的纯 Python 合同测试:

Ran 16 tests
OK

新增的 4 个 LFM2 C++ 编译单元也已通过 g++ -std=c++17 -fsyntax-only

完整的实现、干净构建信息与复现步骤见 LFM2_REPORT.md

性能影响

这不是性能优化 PR,不声明优化前后收益。此前在 RTX 4090 上记录过一组 BF16 单机基线:208 token Prefill、63 次单 token Decode;计时仅包含 engine forward 和设备同步,不包含模型加载、Tokenizer、元数据构造或输出回传。

缓存模式 Prefill Decode 均值 Decode 吞吐 显存采样
Static 7.43 ms 6.04 ms/token 165.49 token/s 3096 MiB
Paged 6.63 ms 4.50 ms/token 222.25 token/s 3096 MiB

供审阅者关注的事项

  • 当前正确性主线限定为 batch_size=1。多个不同长度请求组成的 packed Prefill 会被拒绝,避免错误共享 ShortConv 历史状态。
  • 真实模型在三条 Prompt 上的 greedy token 已精确对齐;tiny BF16 的严格 logits 阈值仍是已知数值限制。
  • Paged BF16 的 cache/full argmax 为 56/56;Static BF16 为 54/56,两个低决策间隔步骤仍可能分叉。
  • 昇腾仅标记为部分支持;相关 InfiniCore GEMM 实验不作为本 PR 的已完成依赖修改。
  • 提交前已清理生产 C++ 路径中的诊断打印和 tensor trace。

CI / ChatOps

CI 尚未触发。创建 PR 后会在 Actions 中手动运行 CI 工作流;如果无法手动触发,将请求维护者执行 /retest/test


检查清单

已完成

  • PR 标题符合 Conventional Commits:feat(model): support LFM2-1.2B
  • 分支名为 feat/support-lfm2-1-2b,符合仓库命名规范。
  • 两个提交均符合 Conventional Commits,且各自职责明确:模型适配与回归报告。
  • 生产 LFM2 路径没有遗留 fprintfstd::coutstd::cerr 或 tensor trace。
  • 已执行 git diff --check、Python compileall、16 个 Python 合同测试及新增 C++ 单元的语法检查。
  • 在新 RTX 4090 上完成干净构建,并在最终源码上通过 tiny 严格 CUDA、Static 与 Paged 真实模型三 Prompt 回归。
  • LFM2_REPORT.md 已记录 NVIDIA、CPU、昇腾的支持状态和已知限制。
  • 未提交密钥、Token、租用实例连接信息或其他敏感信息。

PR 创建后继续完成

  • 使用具备 clang-formatruff 的环境执行 scripts/format.py --check,并修复任何报告的问题。
  • 按模板要求附上 NVIDIA Static / Paged 成功结果的终端截图。
  • 在 Actions 中手动触发 CI,或请求维护者执行 /retest
  • 单请求示例、离线 benchmark、sanity benchmark 与服务测试尚未执行;原因是本 PR 当前先聚焦模型适配和离线正确性,结果会在后续迭代补充,不将其写为已通过。

@Hyacinth25
Hyacinth25 requested a review from a team September 20, 2026 08:17
@Hyacinth25

Copy link
Copy Markdown
Author

老师您好,LFM2-1.2B 适配已提交 PR,并完成 NVIDIA RTX 4090 的干净构建、Static/Paged 双缓存真实模型回归。

当前 GitHub 显示 2 个 workflow 等待维护者批准,麻烦协助批准并触发 CI。感谢!

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.

1 participant