【AI论文】魔鬼在细节:关于在训练专用混合专家模型时实现负载均衡损失
摘要:本文重新审视了在训练混合专家(Mixture-of-Experts, MoEs)模型时负载均衡损失(Load-Balancing Loss, LBL)的实现。具体来说,MoEs的LBL定义为N_E乘以从1到N_E的所有专家i的频率f_i与门控得分平均值p_i的乘积之和,其中N_E是专家的总数,f_i表示专家i被选择的频率,p_i表示专家i的平均门控得分。现有的MoE训练框架通常采用并行训练策略,以便在微批次(micro-batch)内计算f_i和LBL,然后在并行组之间进行平均。本质上,用于训练百亿级大规模语言模型(LLMs)的微批次通常只包含非常少的序列。因此,微批次的LBL几乎是在序列级别上进行的,这促使路由器在每个序列内均匀分配token。在这种严格约束下,即使是来自特定领域序列(例如代码)的token也会被均匀路由到所有专家,从而抑制了专家的专业化。在本文中,我们提出使用全局批次(global-batch)来计算LBL,以放宽这一约束。因为全局批次包含的序列比微批次更加多样,这将鼓励在语料库级别上进行负载均衡。具体来说,我们引入了一个额外的通信步骤来跨微批次同步f_i,然后使用它来计算LBL。通过在基于MoEs的大规模语言模型(总参数高达428亿,训练token数达4000亿)上的实验,我们惊讶地发现,全局批次LBL策略在预训练困惑度和下游任务方面都带来了显著的性能提升。我们的分析还表明,全局批次LBL也极大地提高了MoE专家的领域专业化能力。Huggingface链接:Paper page,论文链接:2501.11873
1. 引言
背景与动机:
- 混合专家(Mixture-of-Experts, MoEs)框架已成为扩展模型参数规模的一种流行技术。它通过路由器网络将输入分配给一组并行专家模块,实现了条件稀疏激活,从而提高了训练和推理效率。
- 训练MoE模型的一个关键因素是鼓励路由器以均衡的方式分配输入到专家,这既是为了保证训练的有效性(避免参数冗余),也是为了提高推理的效率(避免专家利用不均衡导致的推理速度减慢)。
- 负载均衡损失(Load-Balancing Loss, LBL)作为一种辅助损失函数,被广泛应用于MoE训练中以鼓励均衡的路由决策。然而,现有MoE训练框架在计算LBL时多采用微批次级别,这在训练大规模语言模型(LLMs)时存在局限性。
研究问题:
- 现有微批次级别的LBL计算方法在训练大规模MoE模型时,由于每个微批次包含的序列数量有限,导致路由器被推向在每个序列内均匀分配token,这抑制了专家的专业化,并可能损害模型性能。
研究目标:
- 本文旨在提出一种基于全局批次计算LBL的方法,以放宽微批次级别的严格约束,鼓励在语料库级别上进行负载均衡,从而提高模型性能和专家专业化能力。
2. 预备知识
混合专家(MoEs):
- MoEs由一组并行专家模块和一个路由器组成。路由器根据输入为每个专家分配权重,通常只激活得分最高的前K个专家。
- 输出是所有激活专家的加权和,权重由路由器根据输入为每个专家分配的得分决定。
负载均衡损失(LBL):
- LBL是一种正则化技术,用于鼓励专家利用的均衡性,防止专家崩溃。它通过对路由器过度将token路由到少数特定专家进行惩罚来实现。
- LBL的计算公式为N_E乘以所有专家i的频率f_i与门控得分平均值p_i的乘积之和,然后除以专家总数N_E。
3. 方法
全局批次LBL计算方法:
- 现有MoE训练框架在计算LBL时,通常在每个微批次内计算f_i和LBL,然后在并行组之间进行平均。这种方法在训练大规模LLMs时存在局限性,因为每个微批次包含的序列数量有限。
- 本文提出使用全局批次来计算LBL,以放宽微批次级别的严格约束。具体做法是引入一个额外的通信步骤来跨微批次同步f_i,然后使用同步后的f_i来计算LBL。
- 由于全局批次包含的序列比微批次更加多样,这将鼓励在语料库级别上进行负载均衡,从而促进专家的专业化。
针对计算节点数量有限的情况:
- 当训练LLMs时,全局批次大小可能非常大,而每个微批次大小可能相对较小。由于计算节点数量有限,所有微批次的总和可能小于全局批次大小。
- 在这种情况下,本文提出使用一个缓冲区来存储每个梯度累积(GA)步骤中同步的专家选择计数c_i。然后,在GA步骤中使用缓冲区中的信息来计算当前的f_i。完成GA后,重置缓冲区。
4. 实验
实验设置:
- 本文在三种不同大小的MoE模型上进行了实验,包括3.4B总参数(0.6B激活)、15B总参数(2.54B激活)和43B总参数(6.6B激活)的模型。
- 所有模型均采用细粒度专家和共享专家方法,并使用softmax门控、微批次LBL和z-loss。
- 训练数据包含1200亿和4000亿高质量token,涵盖多语言、数学和一般知识内容。
实验结果:
- 全局负载均衡提升模型性能:实验结果显示,随着计算LBL时考虑的token数量(Balance BSZ)的增加,所有指标均得到一致提升。特别是在4000亿token训练设置下,使用全局批次LBL的模型性能显著优于使用微批次LBL的模型。
- 全局负载均衡鼓励专家专业化:通过分析不同领域下每层专家的选择频率,发现使用全局批次LBL的模型在特定领域(如数学和代码)下出现了更多高频专家,表明全局批次LBL更有利于专家的专业化。
- 缓冲区机制的有效性:在计算节点数量有限的情况下,使用缓冲区机制可以近似全局批次LBL,从而在性能上接近使用全局批次LBL的模型,并显著优于使用微批次LBL的模型。
5. 分析
消融研究:
- 本文进行了消融研究以验证全局批次LBL相对于微批次LBL的优势。结果显示,即使在微批次内随机选择一批与全局批次具有相同token分布和数量的token来计算LBL(Shuffle LBL micro),其性能仍然接近全局批次LBL,并显著优于微批次LBL。这表明全局批次LBL的优势主要在于其更宽松的约束条件,而不是因为考虑了更多的token。
负载均衡损失和语言建模损失的变化:
- 通过分析训练过程中负载均衡损失和语言建模损失的变化,发现从微批次平衡切换到全局批次平衡后,负载均衡损失迅速下降并接近从头开始使用全局批次平衡的情况,而语言建模损失也保持较低水平。这表明全局批次平衡是一个更宽松的约束条件。
训练过程中改变Balance BSZ的影响:
- 实验结果显示,在训练过程中改变Balance BSZ会对最终结果产生影响。较早地切换到全局批次平衡可以获得更好的性能提升,而较晚地切换则提升有限。此外,从全局批次平衡切换到微批次平衡会导致性能下降,表明训练过程中专家选择的变化会显著影响模型性能。
全局批次平衡的计算成本和效率:
- 由于采用了无丢失策略,不同方法在计算浮点运算数(FLOPs)时是相同的。然而,由于局部平衡条件的不同,使用全局批次平衡的方法可能会经历局部计算不平衡。实验结果显示,使用全局批次平衡的方法在计算速度上比使用微批次平衡的方法慢约5.8%,但通过引入少量微批次平衡损失可以将其提高到接近使用微批次平衡的速度,同时仅对性能产生微小影响。
全局批次平衡带来的可解释性专业化:
- 通过分析使用全局批次平衡的模型在不同领域下的专家选择频率和路由得分,发现全局批次平衡促进了专家在不同领域下的专业化,并且路由得分与语言建模任务更加一致。
6. 相关工作
负载均衡:
- 现有的工作主要关注如何通过不同的方法来实现负载均衡,包括引入辅助损失函数、允许专家根据负载能力选择token等。然而,这些方法在计算专家选择频率时多采用微批次级别,存在局限性。
专家专业化:
- 初始的MoE设计旨在通过允许不同专家专注于特定任务来实现高效的参数利用。然而,由于微批次级别的负载均衡约束,大多数MoE模型并未展现出领域级别的专业化。本文提出的全局批次LBL方法有助于促进专家的专业化。
7. 结论
主要贡献:
- 本文提出了使用全局批次来计算LBL的方法,以放宽微批次级别的严格约束,从而促进专家的专业化和提高模型性能。
- 通过在多种规模的MoE模型上的实验,验证了全局批次LBL方法的有效性。
- 提供了对全局批次LBL方法如何影响模型性能和专家专业化的详细分析。
局限性:
- 本文主要关注分析预训练阶段微批次LBL对LLMs的影响,未进一步探讨其在微调阶段或在视觉和多模态领域的影响。
- 对专业化的分析主要集中在不同领域下的专家选择频率,未进行更严格的验证。
- 放宽微批次LBL可能引入一些延迟,未来工作可以考虑在每个微批次内包含更多样化的序列以减轻局部不平衡问题。
8. 未来工作
- 进一步研究全局批次LBL在微调阶段和在不同领域(如视觉和多模态)中的应用。
- 对专家专业化进行更严格的验证,例如通过人工评估专家在不同任务上的表现。
- 探索其他方法来减轻全局批次LBL可能引入的延迟问题。
相关文章:

【AI论文】魔鬼在细节:关于在训练专用混合专家模型时实现负载均衡损失
摘要:本文重新审视了在训练混合专家(Mixture-of-Experts, MoEs)模型时负载均衡损失(Load-Balancing Loss, LBL)的实现。具体来说,MoEs的LBL定义为N_E乘以从1到N_E的所有专家i的频率f_i与门控得分平均值p_i的…...
Gurobi基础语法之addVar 和 addVars
addVar 和 addVars作为 Gurobi模型对象中的方法,常常用来生成变量,本文介绍了Python中的这两个接口的使用 addVar addVar(lb0.0, ubfloat(inf), obj0.0, vtypeGRB.CONTINUOUS, name, columnNone) lb 和 ub让变量在生成的时候就有下界和上届,…...
C语言学习阶段性总结(五)---函数
函数构成五要素: 1、返回值类型 2、函数名 3、参数列表(输入) 4、函数体 (算法) 5、返回值 (输出) 返回值类型 函数名 (参数列表) { 函数体; return 返回值; } void 类型…...

K8S 快速实战
K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…...

java后端之事务管理
Transactional注解:作用于业务层的方法、类、接口上,将当前方法交给spring进行事务管理,执行前开启事务,成功执行则提交事务,执行异常回滚事务 spring事务管理日志: 默认情况下,只有出现Runti…...

【Redis】缓存+分布式锁
目录 缓存 Redis最主要的使用场景就是作为缓存 缓存的更新策略: 1.定期生成 2.实时生成 面试重点: 缓存预热(Cache preheating): 缓存穿透(Cache penetration) 缓存雪崩 (Cache avalan…...
二分查找题目:寻找两个正序数组的中位数
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:寻找两个正序数组的中位数 出处:4. 寻找两个正序数组的中位数 难度 8 级 题目描述 要求 给定两个大…...

网络安全 | F5-Attack Signatures详解
关注:CodingTechWork 关于攻击签名 攻击签名是用于识别 Web 应用程序及其组件上攻击或攻击类型的规则或模式。安全策略将攻击签名中的模式与请求和响应的内容进行比较,以查找潜在的攻击。有些签名旨在保护特定的操作系统、Web 服务器、数据库、框架或应…...

Redis --- 分布式锁的使用
我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…...
LeetCode100之全排列(46)--Java
1.问题描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案 示例1 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例2 输入:nums [0,1] 输出…...
goframe 博客分类文章模型文档 主要解决关联
goframe 博客文章模型文档 模型结构 (BlogArticleInfoRes) BlogArticleInfoRes 结构体代表系统中的一篇博客文章,包含完整的元数据和内容管理功能。 type BlogArticleInfoRes struct {Id uint orm:"id,primary" json:"id" …...

【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
文章目录 🌍一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 🌍二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…...

安卓日常问题杂谈(一)
背景 关于安卓开发中,有很多奇奇怪怪的问题,有时候这个控件闪一下,有时候这个页面移动一下,这些对于快速开发中,去查询,都是很耗费时间的,因此,本系列文章,旨在记录安卓…...

Kitchen Racks 2
Kitchen Racks 2 吸盘置物架 Kitchen Racks-CSDN博客...
嵌入式学习笔记-杂七杂八
文章目录 连续波光纤耦合激光器工作原理主要特点应用领域设计考虑因素 数值孔径(Numerical Aperture,简称NA)数值孔径的定义数值孔径的意义数值孔径的计算示例数值孔径与光纤 四象限探测器检测目标方法四象限划分检测目标的步骤1. 数据采集2.…...

14-7C++STL的stack容器
(一)stack容器的入栈与出栈 (1)stack容器的简介 stack堆栈容器,“先进后出”的容器,且stack没有迭代器 (2)stack对象的默认构造 stack采用模板类实现,stack对象的默认…...
Vue 3 中的响应式系统:ref 与 reactive 的对比与应用
Vue 3 的响应式系统是其核心特性之一,它允许开发者以声明式的方式构建用户界面。Vue 3 引入了两种主要的响应式 API:ref 和 reactive。本文将详细介绍这两种 API 的用法、区别以及在修改对象属性和修改整个对象时的不同表现,并提供完整的代码…...

物业巡更系统助推社区管理智能化与服务模式创新的研究与应用
内容概要 在现代社区管理中,物业巡更系统扮演着至关重要的角色。首先,我们先来了解一下这个系统的概念与发展背景。物业巡更系统,顾名思义,是一个用来提升物业管理效率与服务质量的智能化工具。随着科技的发展,传统的…...
windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)
以下过程概述了配置文件驱动程序生成和发送蓝牙请求块 (BRB) 应遵循的一般流程。 BRB 是描述要执行的蓝牙操作的数据块。 生成和发送 BRB 分配 IRP。 分配BRB,请调用蓝牙驱动程序堆栈导出以供配置文件驱动程序使用的 BthAllocateBrb 函数。;初始化 BRB…...

Linux网络之序列化和反序列化
目录 序列化和反序列化 上期我们学习了基于TCP的socket套接字编程接口,并实现了一个TCP网络小程序,本期我们将在此基础上进一步延伸学习,实现一个网络版简单计算器。 序列化和反序列化 在生活中肯定有这样一个情景。 上图大家肯定不陌生&a…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...