把两块GPU设置为可见,并不会自动让一次训练变快。单机同步数据并行会在每块设备上放置模型副本,把批次切分后分别计算梯度,再通过集合通信聚合更新。收益取决于单步计算能否覆盖输入和通信成本。
现行入口是分布式策略
TensorFlow官方Keras多设备训练指南使用 tf.distribute.MirroredStrategy 完成单机多GPU同步训练。模型、优化器及包含变量的指标应在策略作用域内创建,之后仍可使用常规 Model.fit。

strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = build_model()
model.compile(optimizer=optimizer, loss=loss, metrics=metrics)
model.fit(train_dataset, validation_data=valid_dataset)
全局批次不等于每卡批次
若两张卡的全局批次为128,通常每个副本处理64个样本。增加GPU时保持全局批次不变,单卡工作减少、通信占比上升;按卡数放大全局批次,则优化轨迹发生变化,学习率、热身和正则可能需要重新验证。
损失归约要避免重复平均
Model.fit与标准损失通常会按分布式语义处理归约。自定义训练循环则要明确每样本损失、全局批次和副本间求和方式,使用策略提供的运行与归约接口。否则多一张卡可能同时改变Loss尺度和梯度大小。
输入管道必须跟上设备
优先使用 tf.data.Dataset,将解析、打乱、批处理、缓存和prefetch按数据规模配置。监测GPU空闲间隙、主机CPU、磁盘吞吐和输入队列;若设备等待数据,多卡只会放大等待。不可复现的随机增强还需处理每副本种子。
同步通信决定扩展上限
每一步都要聚合各副本梯度,参数量大、单步计算少或设备互联慢时,All-Reduce占比会很高。混合精度可降低部分计算与传输成本,但要确认硬件支持、Loss scaling和数值稳定。小模型、小图片或很短序列往往更难获得线性加速。
保存与恢复围绕同一个逻辑模型
不要分别保存每个副本。使用Keras检查点保存模型与优化器状态,并在相同或兼容策略作用域中恢复。验证单卡读取多卡检查点、训练中断续跑和最佳权重选择;自定义层还要保证序列化配置完整。
| 验收项 | 比较方式 | 异常信号 |
|---|---|---|
| 正确性 | 固定种子比较Loss趋势 | 卡数改变Loss尺度 |
| 吞吐 | 预热后统计样本/秒 | GPU大量等待 |
| 扩展效率 | N卡吞吐/(N×单卡吞吐) | 加卡收益迅速衰减 |
| 资源 | 显存、主存、I/O、互联 | 主机或单卡成为瓶颈 |
先做单卡可信基线
- 单卡完成一轮训练与评估,保存可恢复检查点。
- 两卡保持全局批次不变,验证数值语义。
- 再尝试扩大批次,并单独调学习率。
- 用性能分析器区分输入、计算和通信时间。
- 记录环境、卡型、拓扑及每种配置的吞吐。
多机是另一层系统问题
跨主机训练需要 MultiWorkerMirroredStrategy、集群角色配置、共享数据与容错策略,不能把单机脚本直接复制到多台机器就期待一致行为。先把单机多卡的正确性与扩展效率测清,再决定网络和运维成本是否合理。
多GPU训练的目标是缩短达到同等质量的时间,而不是让设备面板全部亮起。
相比维护自制模型复制器,官方策略能统一变量、梯度、指标和保存语义。真正的工程工作转移到了批次设计、输入吞吐、通信测量与质量回归,这些也正是多卡性能能否兑现的决定因素。
从单卡到多卡要先守住训练语义
扩展前固定单卡基线:数据顺序、随机种子、有效批量、优化器步数、学习率和验证结果。多卡运行时,每个副本看到局部批次,梯度经过归约后更新同一组变量;若全局批量随设备数放大,单位样本更新频率已经变化,不能把结果差异全部归因于并行框架。
损失应先按样本计算,再按全局批量归一。自定义训练循环若在每个副本内部求平均后又重复平均,可能改变梯度尺度。正则项、样本权重与不等长最后批次也要在策略范围内验证。批归一化的统计是否跨副本同步,则取决于层与策略选择,应通过小实验而不是名称猜测。
性能瓶颈要用时间线证明
观察设备计算、主机到设备拷贝、输入等待和梯度归约各占多少时间。若设备经常空闲,先改数据解析、预取与缓存;若归约占比随卡数快速上升,继续增加设备只会降低效率。混合精度、XLA 或更大批量都应在结果一致性测试后单独启用。
检查点由一个协调者写入共享位置,保存模型、优化器、步数与分布配置;恢复时验证下一批数据和学习率连续。报告吞吐时同时给出卡数、全局批量、精度、模型和互联环境,并计算相对单卡的缩放效率。多卡的目标是更快获得同等可信结果,而不是让所有设备监控曲线同时变高。
输入一致性决定多卡结果能否比较
分片策略应确保每个样本在一个 epoch 中出现预期次数,最后不足批量的样本如何处理也要固定。缓存放在随机增强前后会产生不同效果;自动分片若把文件而不是样本平均分配,大小不均的数据文件可能让某些设备长期等待。
完全逐位一致通常不现实,因为并行归约顺序和非确定算子会带来微小差异,但统计趋势应稳定。固定数据顺序与随机种子运行短基线,比较初始若干步损失、更新范数和验证指标;差异快速放大时,检查全局批量、学习率缩放、归约与随机增强。
在共享集群中还要记录设备型号、互联拓扑和其他作业干扰。一次偶然高吞吐不能代表可持续容量,至少重复多个时段并报告波动。只有结果语义与运行环境都被锁定,多卡优化才有可信基准。
本文《Keras单机多GPU训练:MirroredStrategy、全局批次与性能验收》由 xkmchenmu 发布于 xkmchenmu Blog。 转载请保留原文链接并注明出处。
支付宝扫一扫