推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载导读本文基于 DeepSpeed 的 LRRTLearning Rate Range Test学习率范围测试教程系统讲解如何在线性递增学习率的短程试训中快速找到既能加速收敛、又不导致发散的最大学习率边界。文章覆盖 LRRT 的四个核心配置参数、PyTorch JSON 配置与命令行两种接入方式、底层LRRangeTest调度器实现原理并以一个从单卡batch size 512扩展到四卡batch size 2048的大 batch 调优实战为例演示如何将 LRRT 探测到的边界直接用于配置 1CycleOneCycle学习率调度。读完本文你可以独立完成一次完整的 LRRT 实验并为循环学习率调度器设置可靠的 LR 上下限。什么是 Learning Rate Range TestLRRT学习率范围测试LRRT源自论文A Disciplined Approach to Neural Network Hyper-parameters: Part 1是一种用于发现在不导致模型发散的前提下可使用的最大学习率的方法。数据科学家通常对此很感兴趣因为大学习率收敛更快相比小学习率大学习率通常能让模型更快地达到目标收敛精度大学习率是循环调度器的基础诸如 CLRCyclical Learning Rate和 1Cycle 这类学习率调度策略正是利用在上下界之间循环摆动的方式来配合大 batch 训练而 LRRT 恰好能为它们提供可信的上下界取值。DeepSpeed 在 PyTorch 框架内原生提供了 LRRT 能力。从仓库源码看LRRT 被实现为一个学习率调度器LR schedulerDeepSpeed 的训练引擎会在每次 batch 训练后调用lr_scheduler.step()从而驱动学习率按预设节奏递增见 engine.py。使用前提要使用 DeepSpeed 的 LRRT需要满足两个条件集成 DeepSpeed 到训练脚本中按照 Getting Started 教程 完成 DeepSpeed 与训练脚本的集成即用deepspeed.initialize包裹模型与优化器为模型配置 LRRT 参数在 DeepSpeed 的模型配置 JSON 中增加scheduler条目并把 LRRT 的调度参数写入其params中。两个条件缺一不可LRRT 调度器由 DeepSpeed 引擎在_configure_lr_scheduler阶段根据 JSON 配置自动实例化见 engine.py因此必须先将 DeepSpeed 接入训练流程。LRRT 的工作原理与四大参数LRRT 的工作方式可以概括为按预定步长step_size间隔、以预定倍率step_rate线性放大学习率。从这个角度看LRRT 本身也是一种学习率调度——它定义了训练过程中学习率何时变、怎么变。要配置 LRRT需要设置以下四个参数对应的源码常量定义在 lr_schedules.py参数含义类型源码默认值lr_range_test_min_lr训练的初始学习率即范围测试的下边界float1e-3LRRangeTest类默认值lr_range_test_step_size学习率放大一次所间隔的训练步数integer2000类默认值命令行参数默认1000lr_range_test_step_rate学习率的放大倍率缩放因子float1.0lr_range_test_staircase是否阶梯式放大true表示每lr_range_test_step_size步才变化一次false表示每个训练步都变化booleanfalse从源码理解递增公式在LRRangeTest类的实现中lr_schedules.py学习率的计算分为连续模式与阶梯模式两种连续模式staircasefalse间隔因子为(last_batch_iteration 1) / step_size阶梯模式staircasetrue间隔因子为floor((last_batch_iteration 1) / step_size)即每个step_size区间内学习率保持不变到区间边界才跳变。两者统一由以下公式计算当前学习率源码中的_get_increase与get_lr见 lr_schedules.pyincrease 1 step_rate × interval_factor current_lr lr_range_test_min_lr × increase也就是说每经过step_size步学习率会翻约(1 step_rate)倍。以step_rate5、step_size200为例训练 200 步后学习率约为初始值的 6 倍400 步后约为 11 倍依此类推。另外两点值得注意的实现细节lr_range_test_min_lr既可以传单个浮点数自动广播到所有param_group也可以传与优化器param_groups等长的列表/元组长度不一致会抛出ValueError用于对不同参数组设置不同起点lr_schedules.pyLRRangeTest.step()应当在每个 batch 之后被调用而非每个 epoch它会把计算出的学习率写回优化器各param_group[lr]并记录last_batch_iteration以便断点续训state_dict/load_state_dict仅保存该迭代计数见 lr_schedules.py。模型配置变更在 PyTorch 中启用 LRRangeTest对 PyTorch 模型而言LRRT 被实现为一个学习率调度器PyTorch 1.0.1 及以上版本均支持该特性因此在模型配置中加入一个type: LRRangeTest的scheduler条目即可。示例调度配置以下示例展示了一个典型的 LRRT 调度配置初始学习率为0.0001缩放倍率step_rate为5缩放间隔step_size为 200 个训练步每个训练步都缩放学习率即不使用 staircase 阶梯模式。scheduler: { type: LRRangeTest, params: { lr_range_test_min_lr: 0.0001, lr_range_test_step_size: 200, lr_range_test_step_rate: 5, lr_range_test_staircase: false } }将该 JSON 片段合并进 DeepSpeed 模型配置与train_batch_size、optimizer等并列再用deepspeed.initialize(configconfig_dict, modelmodel, model_parametersmodel.parameters())初始化即可。引擎会读取scheduler条目在lr_schedules模块中查找同名类并实例化见 engine.py。命令行参数方式无需修改 JSON除 JSON 配置外DeepSpeed 还提供了一组等价的命令行参数定义在 lr_schedules.py 的add_tuning_arguments中。当你通过命令行传入--lr_schedule LRRangeTest时引擎会调用override_lr_range_test_params用命令行值覆盖配置--lr_schedule LRRangeTest --lr_range_test_min_lr 0.0001 --lr_range_test_step_size 200 --lr_range_test_step_rate 5 --lr_range_test_staircase false命令行的默认值与类的默认值略有差异命令行中lr_range_test_step_size默认1000、lr_range_test_min_lr默认0.001、step_rate默认1.0、staircase默认Falselr_schedules.py。建议显式设置全部四个参数避免依赖隐式默认值。断点续训支持LRRangeTest实现了state_dict()/load_state_dict()仅保存last_batch_iteration而 DeepSpeed 引擎在保存 checkpoint 时会同步写入lr_scheduler状态、加载时按load_lr_scheduler_states恢复见 engine.py。这意味着 LRRT 实验中断后可精确恢复到中断时刻的学习率不会因重启而丢失进度。实战案例用 LRRT 为大 batch 训练调参官方教程用一个真实案例展示了 LRRT 的价值将某个内部生产模型从单卡batch size 512扩展到四卡batch size 2048时目标是在相同数据量下用大 batch 达到与小 batch 相当的性能。大 batch 训练的经典难题是收敛变慢官方团队的做法是使用 DeepSpeed 的 1Cycle 调度教程 配合 LRRT 来完成调参。实验设计与发现上图展示了 batch size 2048 下前 9000 个 batch 的实验结果左图是不同学习率策略下的验证损失右图是对应时段的学习率取值。通过网格搜索可知batch size 2048 下最优的固定学习率为0.0002图中蓝色lr0.0002线两条 LRRT 曲线橙色lr_range_test_step_rate5、灰色lr_range_test_step_rate50从相同的初始学习率出发但灰色曲线的学习率增长速度约为橙色的 10 倍分别被称为快增长与慢增长 LRRT 调度。由此得到两条关键观察较大的学习率在到达某个临界点前明显有利于性能快增长 LRRT 在 3000 个 batch 时就取得 0.46 的验证损失而固定学习率在 9000 个 batch 时仍未达到慢增长 LRRT 直到 6000 个 batch 后才追平该指标但其性能优势随训练持续扩大。学习率存在有效上界超出即发散快增长 LRRT 很快触及上界并发散慢增长 LRRT 也因同一原因在更晚时刻发散。LRRT 帮助团队仅用不到 2% 的训练数据就快速定位了这些边界而这些边界信息正是构建学习率调度的关键输入。用 LRRT 结果配置 1Cycle 调度基于上述观察官方团队为 1Cycle 调度配置了学习率边界与周期跨度最终解决了大 batch 收敛问题其配置如下OneCycle: { cycle_min_lr: 0.002, cycle_max_lr: 0.005, cycle_first_step_size: 2000, cycle_second_step_size: 2000, ... }在官方经验中1Cycle 调度最关键的四个参数是cycle_min_lr、cycle_max_lr、cycle_first_step_size和cycle_second_step_size其设定依据如下选择慢增长 LRRTlr_range_test_step_rate5的结果来设定cycle_min_lr因为它取得了最佳损失而快增长调度发散得相当快其数据不可靠cycle_max_lr取 0.005 而非图中更优的更高学习率虽然图中性能在略高的学习率下仍在改善但若等到逼近最大学习率再停止模型可能已处于发散边缘、无法恢复cycle_first_step_size/cycle_second_step_size均设为 2000因为学习率增长到 0.005 需要 8000 个 batch而四卡并行下处理 8000 个 batch 恰好需要 2000 步。从源码看 1Cycle 如何消费这些参数1Cycle 调度器OneCycle类lr_schedules.py按cycle_first_step_size cycle_second_step_size构成一个完整周期前半周期学习率从cycle_min_lr线性升至cycle_max_lr后半周期再线性降回之后进入可选的衰减阶段decay_lr_rate。它还会以与学习率相反的相位循环动量cycle_min_mom/cycle_max_mom默认 0.8 / 0.9。对应的单元测试在 test_lr_schedulers.py 中验证了起始学习率等于cycle_min_lr、在第cycle_first_step_size步达到cycle_max_lr等关键性质。测试与验证如何确认 LRRT 行为符合预期仓库中的单元测试 test_lr_schedulers.py 覆盖了 LRRT 的多组关键行为可作为理解与验证 LRRT 行为的参考TestLrRangetest_lr_schedulers.py对(min_lr, step_rate, step_size, staircase)的 6 组组合做参数化测试断言起始学习率等于lr_range_test_min_lrstaircasetrue时学习率在每个step_size区间内保持不变阶梯式递增staircasefalse时学习率随步数严格连续递增。TestSchedulerOptimizerParitytest_lr_schedulers.py验证lr_scheduler.get_lr()与model.get_lr()在每个训练步后完全一致即调度器确实把学习率写回了优化器。TestGetLrBeforeTraintest_lr_schedulers.py验证在训练开始前调用get_lr()不会报错且训练循环全程可用。这些测试使用的配置骨架train_batch_size、optimizer、scheduler、gradient_clipping的 JSON 结构与本文前面的配置示例一致可以直接照搬作为你本地验证的最小样例。实践建议与注意事项把 LRRT 当作一次性的探测实验LRRT 的目的不是完成训练而是在极少量数据官方经验中不到 2%内扫描学习率边界因此应当用少量步数尽早停止然后根据 loss 曲线确定安全区间观察发散点要留有余量如官方案例所示最优学习率往往略低于曲线看起来还能继续提升的点——因为一旦越过发散边界模型可能无法恢复。取cycle_max_lr时应保守一些step_rate的选择决定探测精度与速度较大的step_rate如 50能更快扫到上界但容易错过细微变化较小的step_rate如 5更平稳但耗时更长可先用快扫描粗定位、再用慢扫描精读结合 DeepSpeed 引擎使用LRRT 依赖 DeepSpeed 引擎在训练循环内自动调用step()见 engine.py因此不要手动重复调用调度器的step()避免学习率跳变失序调度器类型清单DeepSpeed 支持的调度器包括LRRangeTest、OneCycle、WarmupLR、WarmupDecayLR见 lr_schedules.pyLRRT 探测出的边界可直接服务于OneCycle的上下界配置。小结LRRT 以极低的实验成本少量训练数据换来了对模型安全学习率区间的可靠估计是与大 batch 训练、循环学习率调度CLR / 1Cycle配合使用的关键调参工具。借助 DeepSpeed 的LRRangeTest调度器你只需在 JSON 配置中增加一个scheduler条目即可在 PyTorch 训练流程中自动完成学习率扫描并将探测结果无缝转化为 1Cycle 调度的cycle_min_lr/cycle_max_lr与周期跨度从而解决大 batch 场景下的收敛难题。相关源码入口为 lr_schedules.py 与 engine.py配套测试见 test_lr_schedulers.py。赞分享推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载相关推荐DeepSpeed Learning Rate Range TestLRRT实战指南用学习率范围测试定位大 Batch 训练的可用学习率上界DeepSpeed Learning Rate Range TestLRRT实战指南用学习率范围测试定位大 Batch 训练的可用学习率上界 学习率范围测人工智能大模型深度学习分布式训练预训练强化学习模型优化AIRI 接入 BytePlus 完整指南不改 Base URL、不填模型 ID三步让角色开口聊AIRI 接入 BytePlus 完整指南不改 Base URL、不填模型 ID三步让角色开口聊 在 Settings → Providers → ChatAI 应用人工智能大模型数字人AI Agent语音前端后端桌面应用移动开发即时通讯3D渲染使用 PyTorch C 前端的 Learning Rate Scheduler学习率调度器完全指南使用 PyTorch C 前端的 Learning Rate Scheduler学习率调度器完全指南 导读 在训练深度学习模型时固定的学习率往往难以兼人工智能机器学习深度学习分布式训练模型编译上一篇Qwen3-8B-MLX-8bit8bit轻量AI双模式智能切换新体验下一篇Qwen3-4B-MLX-4bit40亿参数双模式AI推理工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考