跳到主要内容

分布式系统与 TPU

AlphaGo 的成功不仅是算法的胜利,也是工程的胜利。要在合理时间内训练出超越人类的围棋 AI,需要精心设计的分布式系统和专用硬件的支援。

本文将深入解析 AlphaGo 背后的系统架构,包括训练流程、推理架构、并行 MCTS,以及 TPU 的关键角色。


训练架构总览​

原版 AlphaGo 的训练架构​

原版 AlphaGo(击败李世石的版本)的训练分为多个阶段,每个阶段使用不同的资源配置:

AlphaGo Zero 的训练架构​

AlphaGo Zero 大幅简化了训练流程,使用单一的端到端训练循环:

这个架构的优势:

  1. 持续学习:Self-play 和 Training 同时进行,不需要等待
  2. 资源效率:所有资源都在做有用的工作
  3. 快速迭代:网络更新后立即用于产生新数据

自我对弈工作站(Self-play Workers)​

任务分配​

Self-play Workers 负责用当前最强的网络进行自我对弈,产生训练数据。

配置AlphaGo Zero
Worker 数量数十个
每个 Worker1-4 TPU
每局 MCTS1600 次模拟
每天产生~100,000 局

工作流程​

每个 Self-play Worker 的工作流程:

while True:
# 1. 下载最新的网络权重
network = download_latest_checkpoint()

# 2. 进行多局自我对弈
for game in range(batch_size):
positions = []
board = EmptyBoard()

while not board.is_terminal():
# 执行 MCTS
mcts = MCTS(network, board)
policy = mcts.search(num_simulations=1600)

# 选择落子
action = sample(policy)

# 记录
positions.append((board.state, policy))

# 落子
board = board.play(action)

# 3. 获取胜负结果
result = board.get_result()

# 4. 上传数据
upload_to_replay_buffer(positions, result)

负载平衡​

多个 Worker 需要负载平衡:

  • 网络同步:所有 Worker 使用相同版本的网络
  • 数据平衡:确保不同 Worker 的数据都被使用
  • 容错处理:单个 Worker 失败不影响整体训练

训练工作站(Training Workers)​

任务分配​

Training Workers 负责从 Replay Buffer 取样数据,训练神经网络。

配置AlphaGo Zero
Worker 数量1-4
每个 Worker4 TPU
Batch Size2048(每个 TPU 512)
训练步数每天数万步

分布式训练​

大规模训练使用数据并行(Data Parallelism):

每个 TPU 处理不同的 mini-batch,计算出本地梯度,然后聚合更新全局参数。

同步 vs. 异步更新​

更新方式优点缺点
同步稳定、可重现Worker 需要等待最慢的
异步吞吐量高梯度可能过时

AlphaGo Zero 使用同步更新,确保训练的稳定性。


TPU 的角色​

什么是 TPU?​

TPU(Tensor Processing Unit) 是 Google 专门为深度学习设计的加速器:

特性TPUGPUCPU
设计目标矩阵运算通用并行通用计算
精度FP16/BF16 优化FP32/FP16FP64/FP32
功耗相对低较高最高
延迟低中等高

TPU 的架构​

TPU 的核心是 MXU(Matrix Multiply Unit):

MXU 每个周期可以执行 16K 次乘加运算,这对于神经网络的矩阵乘法至关重要。

为什么 AlphaGo 需要 TPU?​

围棋 AI 的计算瓶颈在于神经网络推理:

操作占比
神经网络前向传播~95%
MCTS 树操作~4%
其他~1%

每一步 MCTS 需要执行 1600 次神经网络推理。TPU 的高吞吐量让这成为可能。

TPU 使用的演进​

版本训练 TPU推理 TPU
AlphaGo Lee50 GPU48 TPU(v1)
AlphaGo Master4 TPU(v2)4 TPU(v2)
AlphaGo Zero4 TPU(v2)4 TPU(v2)(可扩展)

AlphaGo Zero 使用的 TPU 数量大幅减少,这要归功于更高效的架构和更新的 TPU 版本。


并行 MCTS 与虚拟损失​

并行化的挑战​

MCTS 的标准实现是串行的:

for i in range(num_simulations):
1. Selection:从根向下选择
2. Expansion:扩展叶节点
3. Evaluation:神经网络评估
4. Backup:回传更新

但神经网络评估是 GPU/TPU 友好的批次操作。如何让多个模拟同时进行?

叶节点并行(Leaf Parallelization)​

最简单的并行方式:同时执行多个完整的模拟,最后合并结果。

问题:每个模拟都从根开始,会重复探索相同的路径。

虚拟损失(Virtual Loss)​

DeepMind 采用了虚拟损失技术来实现树并行(Tree Parallelization)。

基本概念​

当一个线程正在探索某个节点时,临时降低该节点的价值,让其他线程选择其他路径。

正常的 UCB:Q(s,a) + c * P(s,a) * sqrt(N(s)) / (1 + N(s,a))

加入虚拟损失后:
(Q(s,a) * N(s,a) - v * n_virtual) / (N(s,a) + n_virtual) + c * P(s,a) * sqrt(N(s)) / (1 + N(s,a) + n_virtual)

其中:

  • n_virtual 是正在探索该节点的线程数
  • v 是虚拟损失的值(通常为 1 或胜率对应值)

运作流程​

时间 T1:
Thread 1 选择路径 A → B → C
节点 C 获得虚拟损失 -1

时间 T2:
Thread 2 选择路径 A → B → D(因为 C 被「惩罚」了)
节点 D 获得虚拟损失 -1

时间 T3:
Thread 1 完成评估,更新 C 的实际值,移除虚拟损失
Thread 3 现在可能选择 C(如果实际值够好)

虚拟损失的效果​

方面效果
探索多样性强制探索不同路径
批次效率可以同时评估多个叶节点
收敛性虚拟损失最终被真实值覆盖,不影响收敛

批次神经网络评估​

通过虚拟损失,可以收集多个待评估的叶节点,进行批次推理:

TPU 的批次推理效率远高于逐个推理,这让并行 MCTS 成为可能。


推理架构​

比赛时的配置​

AlphaGo 在正式比赛中的推理架构:

版本硬件配置
AlphaGo Fan176 GPU
AlphaGo Lee48 TPU + 多台服务器
AlphaGo Master4 TPU
AlphaGo Zero4 TPU(可扩展)

分布式推理流程​

比赛时的推理流程(以 AlphaGo Lee 为例):

思考时间管理​

AlphaGo 的时间管理策略:

局面思考时间MCTS 次数
开局(有定式)较短~10,000
中盘(复杂)较长~100,000
简明局面较短~5,000
读秒固定~1,600

更多的 MCTS 模拟通常意味着更好的落子品质。


通讯与同步​

数据格式​

训练数据的传输格式:

message TrainingExample {
// 棋盘状态(17 × 19 × 19)
repeated float board_planes = 1;

// MCTS 搜索结果(362)
repeated float mcts_policy = 2;

// 胜负结果(1 = 当前方胜,-1 = 当前方负)
float game_result = 3;
}

网络带宽需求​

数据流大小频率
训练样本~10 KB/样本每秒数千样本
网络权重~200 MB每小时数次
控制消息< 1 KB持续

总带宽需求:~100 Mbps(内部网络足够)

故障处理​

分布式系统的故障处理:

故障类型处理方式
Worker 挂掉重启,继续使用最新 checkpoint
网络断线缓冲数据,重连后续传
TPU 故障自动切换到备用 TPU
数据损坏校验后丢弃,重新生成

成本分析​

硬件成本估算​

以 Google Cloud 的 TPU 定价估算 AlphaGo Zero 的训练成本:

资源数量单价/小时总价/天
TPU v2 Pod4~$32~$3,000
高内存 VM数台~$5~$500
存储空间10 TB~$0.02/GB~$200
网络-包含-

每天约 3,700∗∗,完整训练(40天)约∗∗3,700**,完整训练(40 天)约 **150,000。

注意:这是 2017 年的估算,DeepMind 作为 Google 子公司可能有内部折扣。

与人类训练的对比​

方面AlphaGo Zero人类职业棋手
达到职业水平2 天10-15 年
训练成本~$7,500数百万(学费、生活费、机会成本)
持续成本电费生活费
可复制性完美复制不可复制

当然,这个对比不完全公平——人类在学棋过程中学到的不只是围棋。

推理成本​

正式比赛的推理成本:

配置每局成本
48 TPU(AlphaGo Lee)~$500
4 TPU(AlphaGo Zero)~$50
单 GPU(KataGo)~$1

推理成本随着技术进步大幅下降。


技术演进​

从 AlphaGo 到 AlphaZero​

方面AlphaGo LeeAlphaGo ZeroAlphaZero
训练 TPU50+ GPU → TPU4 TPU4 TPU
推理 TPU48 TPU4 TPU4 TPU
MCTS/步~100,000~1,600~800
训练时间数月40 天数小时-数天

效率提升约 100 倍。

对开源社区的影响​

AlphaGo 的架构启发了多个开源项目:

项目特点
Leela Zero社区分布式训练,复现 AlphaGo Zero
KataGo单 GPU 高效训练,超越 AlphaGo Zero
ELF OpenGoFacebook 开源,使用 PyTorch
MinigoGoogle 开源,使用 TensorFlow

这些项目让普通研究者也能训练强大的围棋 AI。


动画对应​

本文涉及的核心概念与动画编号:

编号概念物理/数学对应
🎬 C9并行 MCTS多体问题
🎬 E9分布式训练分布式计算
🎬 C5虚拟损失排斥势
🎬 D15批次推理向量化计算

延伸阅读​


参考资料​

  1. Silver, D., et al. (2017). "Mastering the game of Go without human knowledge." Nature, 550, 354-359.
  2. Jouppi, N., et al. (2017). "In-Datacenter Performance Analysis of a Tensor Processing Unit." ISCA 2017.
  3. Dean, J., et al. (2012). "Large Scale Distributed Deep Networks." NeurIPS 2012.
  4. Chaslot, G., et al. (2008). "Parallel Monte-Carlo Tree Search." CIG 2008.
  5. Segal, R. (2010). "On the Scalability of Parallel UCT." CIG 2010.