跳到主要内容

论文解读:MinionsRL — 基于 Serverless 的低成本分布式深度强化学习

· 阅读需 11 分钟
Zhiyuan Pan
Blog Author

解读 AAAI 2024 论文,MinionsRL 利用 Serverless 计算实现更低成本、更快速的分布式深度强化学习训练。

论文: Cheaper and Faster: Distributed Deep Reinforcement Learning with Serverless Computing (AAAI 2024, Hanfei Yu et al.)

1. 为什么需要 MinionsRL

分布式深度强化学习(DRL)训练通常采用 Actor-Learner 架构:Actor 负责采样轨迹数据,Learner 负责策略更新。On-policy 算法(如 PPO)在每轮训练结束后需要 同步——所有 Actor 完成采样后,Learner 才能更新模型。

传统基于服务器的方案面临两个核心痛点:

  1. 粗粒度资源管理: 以服务器为单位分配资源(如一台 VM 配 6 CPU + 1 GPU),而 Actor 实际只需要 1 个 CPU core。空闲的 Actor 资源无法释放,按时间计费持续产生费用。
  2. 启动延迟高: 服务器启动是分钟级别的,频繁开关 Actor 服务器不现实,导致空闲 Actor 只能"干等"。

如 Figure 1 所示:

Server-based 训练:
Actor 1: ████ Idle ████ Idle ████ ... ← 空闲仍计费
Actor 2: ██████ Idle ██ Idle █████ ...
Learner: ─── Idle ─── Update ─── Idle ─── Update ───

Serverless 训练:
Actor 1: ████ (Released) ████ (Released) ← 用完即释放
Actor 2: ██████ (Released) █████ (Released)
Learner: ─── Update ─── Update ───

核心问题: 能否利用 Serverless 的按需启停和细粒度计费,动态调整 Actor 数量,同时优化训练时间和成本?

2. Serverless Computing 与 DRL 的天然契合

2.1 什么是 Serverless Computing

Serverless Computing(也叫 FaaS, Function-as-a-Service)的特点:

特性Server-basedServerless
资源粒度整台服务器(CPU+GPU 捆绑)单个容器(可以只要 1 CPU core)
启动时间分钟级亚秒级
计费方式按时间(含空闲时间)按实际执行时间
弹性伸缩手动/慢速即时自动扩缩

2.2 为什么适合 DRL

On-policy DRL 训练天然是"脉冲式"的:

  1. 采样阶段: 需要大量 Actor 并发采集数据
  2. 更新阶段: 只需要 Learner 更新策略,Actor 空闲

Serverless 的 即开即用、用完即释 恰好匹配这种模式:采样时启动 Actor 函数,采样完立即释放,不为空闲时间买单。

2.3 动态 Actor 扩缩的必要性

论文用一个关键实验说明 Actor 数量的动态调整对训练效果影响巨大。在 CartPole-v1 上用 PPO 训练,三种策略使用 相同的总 Actor 预算

  • Fixed: 每轮固定数量 Actor
  • Decrease: 每 10 轮减少 10 个 Actor
  • Increase: 每 10 轮增加 10 个 Actor

结果:三种策略最终 reward 差异显著。这说明 在训练的不同阶段,需要不同数量的 Actor,静态分配不是最优解。

3. MinionsRL 整体架构

MinionsRL 的架构包含两层工作流:

┌──────────────────────────────────────────────────────┐
│ MinionsRL Scheduler │
│ (DRL-based Actor Scheduler, PPO Agent) │
│ │
│ State s_k ──→ Policy π^h ──→ Action a_k (# actors) │
│ ↑ ↓ │
│ Reward r_k Schedule actors │
└──────────┬──────────────────────────────┬──────────────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────┐
│ DRL Workload Training │
│ │
│ Round k: │
│ 1. Scheduler 决定启动 I_k 个 Actor │
│ 2. Actor 函数启动,采样轨迹数据 τ_k │
│ 3. Actor 完成后立即释放 │
│ 4. Learner 函数更新策略 θ_k → θ_{k+1} │
│ 5. 反馈 state, reward 给 Scheduler │
└──────────────────────────────────────────────────────┘

关键设计:

  • Actor 和 Learner 都是 serverless 函数:部署在 Azure Container Instances (ACI) 上
  • 每个 Actor 容器只分配 1 CPU core:细粒度资源管理
  • Learner 容器配 1 V100 GPU:策略更新需要加速
  • Actor 数量范围: [1, 32],每轮由 Scheduler 动态决定

4. DRL-Based Actor Scheduler 设计

Scheduler 本身就是一个 PPO 智能体,用"RL 来调度 RL"。

4.1 问题建模

将 Actor 调度建模为 序列决策问题。训练持续 K 轮,每轮 Scheduler 决定启动多少 Actor。

优化目标:

$$\min_{I_k} \sum_{k=1}^{K} \left( P_k^l + \max_i {P_{k,i}^a} \right)$$

其中:

  • $P_k^l$: 第 k 轮 Learner 执行时间
  • $P_{k,i}^a$: 第 k 轮第 i 个 Actor 的执行时间
  • 每轮总时长 $P_k = P_k^l + \max_i{P_{k,i}^a}$(受最慢的 Actor 制约)

约束:

  • 训练达到目标 reward $J$ 或跑完 $K$ 轮
  • 总成本 $\sum C_k \leq B$(预算约束)

其中单轮成本 $C_k = c(P_k^l \cdot d^l + \sum_{i=1}^{I_k} P_{k,i}^a \cdot d^a)$,$c$ 是单位资源价格,$d^l, d^a$ 是资源分配量。

4.2 State(状态空间)

Scheduler 的状态是一个 平坦向量:

$$s_k = (k, L_{k-1}, \bar{R}{k-1}, D_k^{KL}, P{k-1}^l, P_{k-1}^a, b_k)$$

分量含义作用
$k$当前轮次训练进度感知
$L_{k-1}$上一轮 loss反映学习状态
$\bar{R}_{k-1}$上一轮平均 final reward反映策略质量
$D_k^{KL}$相邻两轮策略的 KL 散度衡量策略变化幅度
$P_{k-1}^l$上一轮 Learner 执行时间时间成本感知
$P_{k-1}^a$上一轮 Actor 平均执行时间Actor 负载感知
$b_k$剩余预算成本约束感知

KL 散度的作用值得特别说明:$D_k^{KL} = \sum_a \pi_k(a|s) \log \frac{\pi_k(a|s)}{\pi_{k-1}(a|s)}$。如果 KL 散度大,说明策略更新幅度大,可能需要更多 Actor 收集更多数据来稳定训练。

4.3 Action(动作空间)

$$a_k = I_k \in [1, I_{max}]$$

动作是一个标量整数值,表示当前轮要启动的 Actor 数量。$I_{max} = 32$。

4.4 Reward(奖励函数)

$$r_k = -\beta P_k, \quad \beta \in (0,1)$$

直觉:每轮训练越快越好,所以奖励是负的训练时长。$\beta$ 是缩放系数。

终止轮 K 的特殊奖励:

$$r_K = \begin{cases} -\beta P_K & \text{if } \bar{R}_K \geq J \text{ and } b_k \geq 0 \ -\beta P_K + (\max_k \bar{R}_k - J) & \text{otherwise} \end{cases}$$

如果训练失败(没达到目标 reward $J$ 且预算耗尽),额外加一个负惩罚项 $(\max_k \bar{R}_k - J)$,推动 Scheduler 学会避免这种情况。

4.5 网络结构

Scheduler 的 Policy 和 Critic 网络都很轻量:

输入 (7 维 state)
→ FC(64, Tanh)
→ FC(64, Tanh)
→ 输出 (action / value)

用 Adam 优化器,学习率 0.005,训练 100 个 episode。使用 Ray-Tune 做超参搜索。

5. 训练流程详解

5.1 一轮 On-Policy 训练

Round k:
1. Scheduler 观察 s_k,输出 a_k = I_k
2. 在 ACI 上启动 I_k 个 Actor 容器 + 1 个 Learner 容器
3. Learner 将当前策略权重 θ_k 分发给所有 Actor (via gRPC)
4. 每个 Actor 用 θ_k 在环境中采样轨迹数据
5. Actor 采样完成后将数据返回 Learner,Actor 容器立即释放
6. Learner 汇总数据,执行 PPO 更新: θ_k → θ_{k+1}
7. Learner 完成后也释放
8. 收集 metrics (loss, reward, time, KL div)
9. 计算 r_k,更新 Scheduler

5.2 函数预热(Pre-warming)

论文实测:启动一个 Actor 容器约 300ms,启动 Learner 容器(挂载 GPU)约 1500ms。MinionsRL 通过 函数预热 进一步消除启动开销。

5.3 通信开销

MinionsRL 使用 gRPC 进行 Actor 和 Learner 之间的通信:

环境类型传输数据量通信开销
连续控制 (MuJoCo)65,536 timesteps< 100ms
离散控制 (Atari)6,144 stacked frames (800 MB)可忽略

6. Scheduler 的三阶段调度行为

论文观察到 MinionsRL 的 Scheduler 在训练过程中呈现三个阶段(以 Hopper-v3 和 QbertNoFrameSkip-v4 为例):

Actor 数量
30 ┤
│ ████ ███
20 ┤ ████ ███
│ ████ ███
10 ┤ ████████████████████████████████

0 ┼──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──
Phase A Phase B Phase C
(探索期) (稳定期) (冲刺期)
阶段Actor 数量原因
Phase A训练初期策略随机,需要大量数据探索
Phase B少/稳定策略趋于稳定,少量数据即可微调,节省成本
Phase C略增接近目标 reward,增加 Actor 冲刺最优性能

这种自适应行为是 Scheduler 自己 学习 出来的,不是人工设计的规则。

7. 实验结果

7.1 实验设置

Server-based baselines 的集群配置:

  • 1 台 Standard_NC6s_v3 VM(1 V100 GPU + 6 CPU)
  • 4 台 Standard_E16-8s_v5 VM(8-core Intel Xeon Platinum)
  • 共 32 CPU cores 用于 Actor

MinionsRL 部署在 ACI 上:

  • Learner 容器: 1 V100 GPU
  • Actor 容器: 各 1 CPU core,数量 [1, 32] 动态调整

任务: 6 个 OpenAI Gym 环境

  • 连续控制 (MuJoCo): Hopper-v3, Humanoid-v3, HalfCheetah-v3
  • 离散控制 (Atari): GravitarNoFrameskip-v4, SpaceInvadersNoFrameskip-v4, QbertNoFrameskip-v4

7.2 与 Baselines 对比

对比对象:

  • Azure ML: 微软的 MLaaS 平台,固定 Actor 数量
  • IMPACT: SOTA actor-learner 架构,支持异步训练和 V-trace 修正

训练时间与成本 (Table 2):

环境方案时间 (s)成本 ($)
HopperMinionsRL241 ± 241.2 ± 0.2
Azure ML277 ± 214.5 ± 0.5
IMPACT291 ± 264.6 ± 0.8
HumanoidMinionsRL334 ± 421.3 ± 0.4
Azure ML464 ± 569.3 ± 1.2
IMPACT436 ± 572.9 ± 0.7
HalfCheetahMinionsRL220 ± 291.1 ± 0.3
Azure ML458 ± 492.9 ± 0.6
IMPACT193 ± 123.0 ± 0.8
GravitarMinionsRL2295 ± 3376.6 ± 0.9
Azure ML2902 ± 48111.4 ± 1.5
IMPACT3375 ± 71412.0 ± 1.7
SpaceInvadersMinionsRL1787 ± 2297.8 ± 1.2
Azure ML2260 ± 34326.9 ± 3.1
IMPACT2628 ± 40225.8 ± 2.4
QbertMinionsRL506 ± 592.3 ± 0.8
Azure ML872 ± 686.0 ± 1.0
IMPACT768 ± 666.4 ± 1.3

核心结论: MinionsRL 相比 Azure ML 和 IMPACT,训练时间减少高达 52%,成本减少高达 86%

7.3 可扩展性

随 Actor 数量增加,单轮完成时间变化:

  • MuJoCo 环境(连续控制): 增长平缓,因为单帧计算轻量
  • Atari 环境(离散控制): 增长较快,因为需要处理 84x84 stacked frames

8. 消融实验

为验证两个关键组件(serverless 函数 + DRL 调度器)的贡献,论文对比了 MinionsRL 的两个变体:

8.1 三个方案对比

方案Serverless调度策略
MinionsRLYesDRL-based Scheduler (PPO)
MinionsRL-MaxYes每轮固定启动 32 个 Actor
MinionsRL-AdaptYes基于比例的启发式调度

MinionsRL-Adapt 的调度规则:$I_k = \text{clip}(1, \frac{\hat{J}k}{J} \cdot I{max}, I_{max})$,其中 $\hat{J}_k$ 是最近 5 轮的移动平均 reward。策略越好 → 分配越多 Actor,直觉是"好策略产生更好的数据"。

8.2 消融结果

  • MinionsRL vs MinionsRL-Max: 相似的训练时间,但 MinionsRL 成本降低高达 44%。证明 DRL Scheduler 有效节省了 Actor 开支。
  • MinionsRL vs MinionsRL-Adapt: MinionsRL 的 DRL Scheduler 做出更优的调度决策,训练效率更高。证明学习出的调度策略优于手工启发式。

9. Scheduler 跨任务迁移

训练 Scheduler 本身也需要时间(例如 Humanoid-v3 约 10 小时,SpaceInvadersNoFrameskip-v4 约 50 小时)。

论文发现:不同 DRL 任务的 Scheduler 具有 相同的输入输出维度(7 维 state, 1 维 action),因此可以跨任务 fine-tune

实验结果:

  • 将 Hopper-v3 的 Scheduler 迁移到 Humanoid-v3
  • 将 QbertNoFrameskip-v4 的 Scheduler 迁移到 SpaceInvadersNoFrameskip-v4
  • Fine-tune 只需 10 个 episode(从头训练需要 100 个)
  • 训练 Scheduler 的时间和成本 减少约 90%
  • 迁移后的性能与从头训练的 持平甚至更优

这意味着在实际部署中,只需为一个任务从头训练 Scheduler,后续新任务都可以快速迁移。

10. 总结与思考

核心贡献

  1. 首个 serverless DRL 训练框架: 将 actor-learner 架构中的 Actor 和 Learner 重构为 serverless 函数,实现细粒度资源管理和按需计费
  2. DRL-based Actor Scheduler: 用 PPO 智能体学习动态调度 Actor 数量,自动权衡训练性能和成本
  3. 显著的性能提升: 时间减少 52%,成本减少 86%
  4. Scheduler 可迁移: 跨任务 fine-tune 减少 90% 的 Scheduler 训练开销

局限性与思考

  • 仅针对 on-policy 算法: Off-policy 算法(如 SAC, TD3)不需要严格同步,serverless 的优势可能不那么明显
  • ACI 平台依赖: 实验仅在 Azure Container Instances 上验证,其他 serverless 平台(如 AWS Lambda、Google Cloud Functions)的表现有待验证
  • Scheduler 的冷启动: 第一个任务仍需从头训练 Scheduler(数十小时),虽然后续可以迁移
  • 通信开销: 随 Actor 数量和数据量增大,gRPC 通信可能成为瓶颈(论文中目前开销较小)

核心思想

MinionsRL 的精髓在于 "用 RL 优化 RL 的训练"——Scheduler 本身是一个 RL 智能体,通过与分布式训练环境的交互,学会在合适的时机投入合适数量的计算资源。这种 meta-level 的优化思路,结合 serverless 的弹性伸缩能力,实现了训练速度和成本的双重优化。