Liger-Kernel项目中logits数据类型转换的优化实践
2025-06-10 17:54:43作者:段琳惟
背景介绍
在深度学习模型训练过程中,交叉熵损失函数的计算是一个关键操作。Liger-Kernel项目中的fused_linear_cross_entropy.py文件实现了一个融合的线性层和交叉熵损失计算内核,旨在提高训练效率。在原始实现中,开发者对logits数据类型进行了显式的向上转换(upcasting)操作,这一设计引起了社区成员的关注和讨论。
问题发现
技术专家yzhangcs在代码审查中发现,内核内部已经包含了fp32的向上转换操作,而外部又进行了额外的数据类型转换。通过实验验证,他确认移除这些冗余的转换操作不会导致精度损失。这一发现引发了对现有实现合理性的深入探讨。
技术验证
为了验证这一发现,yzhangcs设计了严谨的测试方案:
- 创建随机生成的输入张量(x)、目标(target)、权重(weight)和偏置(bias)
- 分别使用标准PyTorch实现和Liger-Kernel的融合实现计算损失和梯度
- 比较两种实现输出的差异
测试结果显示,移除外部转换后,两种实现的输出差异极小:
- 损失值最大差异:0.0005
- 梯度差异:在1e-7量级
性能优化探索
在后续的深入研究中,yzhangcs还发现了一个更重要的优化点:对于大词汇表(V)和小隐藏层(H)的情况,现有的分块(chunking)策略可能导致数值精度问题。他提出:
- 限制最大分块数量,如设置inv_factor为min(8, triton.cdiv(V/H))
- 通过实验证明8个分块在128K词汇表情况下能获得更好的性能
实际训练验证
为了验证这些优化在实际训练中的效果,yzhangcs进行了大规模实验:
- 模型规模:370M参数
- 训练数据:10B tokens
- 上下文长度:8K
- 词汇表:32K
实验结果令人惊喜:
- 8分块策略获得了最低的困惑度(12.70)
- 同时保持了最高的吞吐量(109.54 K tokens/sec)
- 原始V/H分块策略(32分块)表现最差
技术实现改进
基于这些发现,项目维护者ByronHsu采纳了建议,将数据类型转换操作完全移入内核内部实现。这一改进:
- 简化了代码结构,消除了冗余操作
- 保持了数值精度
- 为后续优化提供了更清晰的基础
总结与启示
这一优化过程展示了深度学习系统开发中的几个重要原则:
- 不要盲目遵循现有实现:即使是为了保持与HuggingFace的一致性,也需要验证其必要性
- 实证精神至关重要:通过严谨的实验验证假设,而不是依赖直觉
- 性能优化需要全面考虑:不仅要看计算速度,还要关注内存使用和数值稳定性
- 实际训练验证不可替代:微观基准测试的结果需要通过大规模训练来确认
这一案例为深度学习框架优化提供了宝贵经验,特别是在处理大词汇表语言模型训练时的内存效率和计算精度平衡问题上。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
569
3.84 K
Ascend Extension for PyTorch
Python
379
453
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
893
676
暂无简介
Dart
802
199
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
350
203
昇腾LLM分布式训练框架
Python
118
147
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
68
20
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.37 K
781