每个新模型的并行计算都从零开始实现是无趣的。
此外,优化同步工具以获得高性能也是有好处的。
下面我们将展示如何使用深度学习框架的高级API来实现这一点
12.6.1. 简单网络
12.6.2. 网络初始化
我们将在训练回路中初始化网络
12.6.3. 训练
如前所述,用于训练的代码需要执行几个基本功能才能实现高效并行:
-
需要在所有设备上初始化网络参数。
-
在数据集上迭代时,要将小批量数据分配到所有设备上。
-
跨设备并行计算损失及其梯度。
-
聚合梯度,并相应地更新参数。
最后,并行地计算精确度和发布网络的最终性能。除了需要拆分和聚合数据外,训练代码与前几章的实现非常相似。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e7JBJHYo-1665751027913)(https://zh.d2l.ai/_images/output_multiple-gpus-concise_2e111f_50_1.svg)]
接下来我们使用2个GPU进行训练。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91Bo8qL6-1665751027914)(https://zh.d2l.ai/_images/output_multiple-gpus-concise_2e111f_59_1.svg)]
12.6.4. 小结
-
神经网络可以在(可找到数据的)单GPU上进行自动评估。
-
每台设备上的网络需要先初始化,然后再尝试访问该设备上的参数,否则会遇到错误。