已开启
[feat] Asyncflow #866
yxstev创建于 2025年12月24日
[feat] Asyncflow #866
已开启
yxstev创建于 2025年12月24日
yxstev
yxstev
2025年12月24日

核心改动:

  1. TransferDock
    为了减少分离式框架中的流水空泡,实现跨任务的micro-batch级并行,我们在Asyncflow的文章中提出了一种基于数控分离架构的异步流式数据管理引擎,可动态路由跨强化学习任务的细粒度数据依赖关系。
    对比main分支,此分支的TransferDock模块在架构上分为了控制平面和数据平面两个部分。控制平面通过一系列Metadata记录每条样本在各个阶段的生产消费情况,管理训练数据的全局调度;而数据平面则以分布式的方式,通过在每个device拉起一个存储单元(storage unit),存储真正的训练数据并进行高效传输。基于这两个平面的设计,TransferDock完整实现了数控分离的设计思想。
    此分支中的TransferDock模块是当前开源版本TransferQueue的前身原型,已完整实现了论文所述功能。而TransferQueue作为其开源重构版本,进一步优化了模块化与架构设计,相关功能支持仍在持续增强中。
    更多设计细节与模块重构,欢迎关注开源仓库 https://github.com/TransferQueue/TransferQueue

  2. Weight Sender & Weight Receiver
    在分离式框架中,RL算法中 actor 的功能被拆分为了三个子worker:actor_rollout_worker,负责推理;actor_fwd_worker,负责计算 actor_log_prob(可跳过);actor_worker,负责权重更新。我们设计了部署在训练集群上的 Weight Sender 和部署在推理集群的 Weight Receiver 模块,负责将 actor_worker 上更新后的权重同步到 actor_rollout_worker 和 actor_fwd_worker。
    Sender 与 Receiver 之间的权重同步基于gloo后端实现。在异步流水模式下,主控流程发起权重同步指令后,训练引擎中的模型权重由Weight Sender通过gloo后端接口卸载到主机CPU,再经由Host-to-Device网络异步传输至推理引擎。随后,Weight Receiver通过gloo接口接收权重并完成更新。该机制实现了计算负载与权重同步过程的解耦,确保参数更新不中断当前计算任务,也不影响其执行效率,从而保障了强化学习训练工作流的连续性与稳定性。

  3. 异步工作流
    基于上述两个重要的修改,我们实现了异步的,基于dataflow的强化学习工作流。区别于本仓库其他分支遵循的传统的共置式强化学习工作流,这种工作模式不需要在主函数中实现同步的集中式数据分发机制,而是允许所有强化学习任务在主函数中分别启动并持续拉起,每个任务以分治方式自主管理其数据依赖。这一范式不仅为分布式强化学习系统建立了更灵活高效的编程模型,也显著降低了任务调度的复杂度,通过数据流驱动实现了计算资源的自动负载均衡与流水线最大化重叠,从而在保证训练稳定性的同时大幅提升系统整体吞吐。

论文实验复现:

pkill -9 python
ray stop --force
export RAY_DEDUP_LOGS=0
export HYDRA_FULL_ERROR=1

ulimit -n 65536

mkdir logs

python cli/train_grpo_standalone.py --config-path="../configs" --config-name="grpo_trainer_qwen25_7b_standalone_16cards.yaml" 2>&1 | tee "logs/qwen25_7b_asyncflow.log"

training_metrics.png

likedislike
合并受阻
yxstevyxstev
2025年12月24日 创建了 pull request,commit cbf3a6f2
yxstevyxstev
2025年12月24日 修改了pull request 的描述
yxstevyxstev
2025年12月27日 修改了pull request 的描述
yxstevyxstev
2025年12月27日 修改了pull request 的描述
yxstevyxstev
2025年12月27日 修改了pull request 的描述
elvinp成员
1月6日 评论:

/lgtm

likedislike