用机器换时间 — 并行架构与一个真跑起来的项目
这一章讲三件事: 为什么这一行「换块好显卡」没用; 多台机器一起干时,等不等最慢的那一台,各要付什么代价; 以及一堆名字各异的分布式架构,拆开看只有几个零件。
它在全书链条里的位置:第 11 章那八个障碍的最后一味药,治的是「规模」。 而它同时兑现第 08 章第 8 节欠下的那笔债 —— 那里讲完「一个演员配一个批判者」就停了,并行版整块交给了这一章。
顶层全景:一条经验从产生到被用上,走完整条链
这一章从头到尾用同一个项目:书里第 13 章那个赛跑任务。
任务是让一个人体骨骼模型尽可能快地跑完一段路。它的规格全部是书里给的1:
观察:41 个数 —— 骨盆的位置与速度、两腿各关节的角度与角速度、
质心的位置与速度、头/骨盆/躯干/脚趾/踝的位置(共 14 个)
动作:18 个数 —— ★ 每条腿 9 块肌肉的发力程度 ★
奖励:骨盆沿前进方向的位移,减去使用韧带的惩罚
结束:跑满 1000 步,★ 或者骨盆高度低于 0.65 米(摔了)★
★ 一条经验从产生到被用上,要走完这条链:★
┌─ 某台 CPU 上的一个工作者 ─────────────────────────────┐
│ 跑一个片段。★ 书里说这个环境「至少耗时几十秒完成一个模拟片段」★ │ §1
│ 产出一条 (41 维观察, 18 维动作, 奖励, 下一个观察) │
└───────────────────┬─────────────────────────────┘
│ 传的是「一条经验」 §5
▼
┌─ 共享的回放缓存 ─────────────────────────────────────┐
│ ★ 多个进程内存不共享,所以这个缓存必须显式地做成共享的 ★ │ §8
└───────────────────┬─────────────────────────────┘
│ 学习者从这里抽一批
▼
┌─ 某块 GPU 上的学习者 ────────────────────────────────┐
│ 反向传播,更新网络参数 │
│ ★ 而这一步谁等谁,就是 §3 那个同步与异步的分野 ★ │
└───────────────────┬─────────────────────────────┘
│ 传的是「新参数」 §5
▼
采样进程读到新参数,开始下一轮
★ 这一章后面每一节,都是在改这条链上的某一段。★
图说:这就是本章的主走查。规格与「几十秒一个片段」都 是书里的。
1. 换块好显卡为什么没用
这一节回答:这一行的慢,慢在哪里。
先看现象:两个数
书里开篇给的例子:某个大型游戏的系统,「每两秒钟就大概有 2 百万组数据被用来训练模型」2。
★ 而这一章那个赛跑项目,跑完一个片段要「至少几十秒」★3 —— 先说两种芯片:CPU 是机器里那颗什么活都能干的通用芯片; GPU(专门用来同时算成千上万个乘加的那种芯片,神经网络的训练几乎全靠它)。
书里还说,用普通的无模型算法解决它「需要至少上百个 CPU/GPU 计算小时」才能拿到一个好策略3。
★ 把这两个数摆在一起:一边每两秒要吃掉两百万组数据,
一边生产一组数据要几十秒。★
(这个对照是我们摆的;两个数各自都是书里的。)
病根:采样这一步天生不能并行
书里说得很直接:由于智能体和环境的交互「限制于在时间上顺序执行」, 强化学习在采集数据上往往存在低效率的问题4。
★ 这一句是这一章存在的全部理由。★ 你不能一边跑第 5 步一边跑第 6 步 —— 第 6 步的画面要等第 5 步做完才知道。
书里还对照了监督学习:那边「一种简单的提升学习速度的方法是同时训练多种不同的训练数据」; 而这边「不可能把所有数据集合在一起让模型同时学习」5。