
Miles Sleep/Wake显存共享机制训练Actor与Rollout引擎如何共用一块GPU【免费下载链接】milesMiles is an enterprise-facing reinforcement learning framework for LLM and VLM post-training, forked from and co-evolving with slime.项目地址: https://gitcode.com/GitHub_Trending/miles1/milesMiles 是一个面向企业的大模型强化学习RL后训练框架。它的Sleep/Wake 显存共享机制让训练 Actor 与 Rollout 推理引擎轮流使用同一块 GPU推理生成时Actor 把权重和状态睡到主机内存或本地磁盘训练前再唤醒回显卡。本文用通俗的方式讲清这套机制的原理、流程与实测收益帮助新手理解 Miles 如何在有限硬件上跑通大模型 RL 训练。为什么 RL 训练要两块模型抢一块 GPU 强化学习后训练如 GRPO有一个绕不开的特点训练循环里有两个截然不同的角色。Rollout 推理引擎用当前模型权重生成大量样本回答、代码、推理轨迹这是计算密集、显存密集的阶段训练 Actor拿到奖励信号后计算 log-prob、梯度并执行优化器更新这才是学习本身。如果两者各占一块 GPU集群成本翻倍。Miles 选择了Colocate同卡部署模式把推理引擎和训练 Actor 放在同一批 GPU 上靠显存的时间片复用来省钱。开启--colocate后Miles 会自动打开--offload-train——Actor 只在train()阶段驻留显卡整个 Rollout 窗口期间它都必须让位见 docs/advanced/disk-offload.md。Sleep/Wake 的两步流程如何把模型请出去再请回来整个机制只有两个动作Megatron 后端实现在 miles/backends/megatron_utils/actor.py 的sleep()与wake_up()中sleep()把权重、梯度、优化器状态一次性搬走Rollout 开始前Actor 调用sleep()它会做三件事清空显存碎片释放量化工作区如 Transformer Engine 的 FP8 workspace销毁进程组——NCCL 通信缓冲也一并释放把显存彻底交还给推理引擎暂停显存区域借助底层内存保存器torch_memory_saver挂钩 CUDA 分配器把权重、梯度缓冲、优化器状态作为一个整体块搬到备份位置不关心里面装的是什么。一个值得注意的细节sleep()是幂等的重复调用会直接跳过这在容错重试场景下非常省心。wake_up()训练前原地唤醒下一轮train()入口处若检测到 Actor 仍处于休眠状态就会先调用wake_up()见 miles/backends/megatron_utils/actor.py按 tag 恢复显存区域、重建进程组。由于暂停/恢复都发生在阶段边界等优化器真正执行一步更新时所有数据都已回到 HBM训练过程零等待。FSDP 后端miles/backends/fsdp_utils/actor.py逻辑类似只是更直白sleep()把模型和优化器整体.cpu()wake_up()再.cuda()回来并用dist.barrier保证所有 rank 同步。搬去哪里主机内存还是本地磁盘 --offload-train-target决定备份落点这是新手最关心的参数场景参数说明休眠 Actor 放得进主机内存默认--offload-train-targetcpu备份到 pinned host 内存最快、无需额外空间模型太大主机内存不够--offload-train-targetdisk通过固定大小的 pinned 暂存区流式写入节点本地 NVMe上的 per-rank 文件主机内存占用被--offload-train-disk-chunk-mb钳制住磁盘模式下有几个实用要点目录指向真正的节点本地 NVMe默认$SCRATCH/miles_train_offload_uid不要用 tmpfs 挂载的/tmp那会把数据又留在内存里违背初衷文件每步原地覆盖Actor 退出时自动清理它和--stream-optimizer-state-to-disk把 fp32 主参数和 Adam 动量按桶流式读改写盘可以叠加使用前者管整个 Rollout 窗口后者管训练那一步之内两者互补。实测收益sleep/wake 从 24 秒缩短到 5 秒 ⚡官方文档给出了真实数据在 Qwen3-30B-A3B 上单独开启 Actor offload 时 sleep/wake 分别耗时24s / 8.9s叠加优化器状态流式后休眠的 Actor 不再携带 12 字节/参数的 fp32 状态sleep/wake 直接降到5.2s / 1.3s。对多机集群来说这部分空转时间的省出相当可观。训练效果层面Miles 在 DeepSeek-V4.1 等大模型上的 RL 训练奖励曲线稳定爬升验证了显存轮换机制对训练正确性零干扰关键参数与延伸阅读 参数作用--colocate推理引擎与 Actor 同卡部署自动启用--offload-train--offload-trainRollout 窗口期间把 Actor 请出 HBMcolocate 下默认开启--offload-train-targetcpu / disk选择备份落点主机内存或本地 NVMe--offload-train-disk-dir/--offload-train-disk-chunk-mb磁盘目录与 pinned 暂存区大小--stream-optimizer-state-to-disk优化器状态按桶流式读写盘解决训练那一步也放不下延伸阅读磁盘卸载完整机制docs/advanced/disk-offload.md参数定义与 colocate 默认值逻辑miles/utils/arguments.py训练后端架构说明docs/user-guide/training-backend.md总结Miles 的 Sleep/Wake 机制本质是一次以阶段边界为节拍的显存时间片调度sleep()用内存保存器把 Actor 整体请出 HBM、连 NCCL 缓冲一起清空让推理引擎独占显卡wake_up()在训练前原地恢复一步不慢。备份可以选主机内存快或本地 NVMe省内存再叠加优化器状态流式进一步压缩切换时间。对新手而言记住一句话即可——在 Miles 里GPU 从不闲置推理时 Actor 在睡觉训练时引擎在让位。【免费下载链接】milesMiles is an enterprise-facing reinforcement learning framework for LLM and VLM post-training, forked from and co-evolving with slime.项目地址: https://gitcode.com/GitHub_Trending/miles1/miles创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考