前沿

在将我们的数据集输入到模型中之前,需要进行数据的读取操作,在读取的同时也可以进行数据增强等预处理操作,这些数据预处理部分,有一些统一的代码,下面将提供代码,并对思路进行解读

代码

代码块解读

torch_distributed_zero_first

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
from contextlib import contextmanager

@contextmanager
def torch_distributed_zero_first(local_rank: int):
"""
Decorator to make all processes in distributed training wait for each local_master to do something.
装饰器使得分布训练中的所有进程等待本地主服务器执行某些操作
"""
if local_rank not in [-1, 0]:
torch.distributed.barrier()
yield
if local_rank == 0:
torch.distributed.barrier()

torch.distributed.barrier() 是Pytorch中分布训练的一部分,可以实现同步多个进程。它通过阻塞调用进程,直到所有进程达到同一个时间点,以此来实现多个进程的同步。在某些情况下,需要确保主进程首先完成一些任务(例如数据预处理),然后其他进程再继续。

分布式的学习路径

了解概念:

  1. 阅读资料 《分布式系统概念与设计》
  2. 在线课程 Coursera 上的《Cloud Computing》课程。
  3. 学习并发和多线程编程,了解进程、线程、并发和并行的基本概念。

掌握深度学习框架

  1. Pytorch
  2. TensorFlow
  3. Pytorch书籍

学习基本的分布式训练

  1. Pytorch分布式官方教程
  2. 使用Pytorch的torch.nn.DataParallel和torch.nn.parallel.DistributedDataParallel进行训练
  3. 高级教程

了解更高级的分布式主题:如混合精度训练、梯度训练、弹性训练等

  1. 混合精度训练
  2. cuda混合精度训练例子
  3. 在实现中添加梯度积累,理解其对内存和性能的影响

实践项目

  1. 选择一个公开的深度学习项目,尝试将其分布式化

社区:
r/MachineLearning