训练大型深度学习模型需要极大的内存,才能储存中间层的激活函数输出和权重等。一些模型只能在单个GPU上训练,训练时须将批大小(batch size)设置得极小;还有一些模型则太大,单个GPU放不下。这些问题会导致在某些情况下模型训练效率极低,甚至无法训练。训练大型深度学习模型主要有两大方法:数据并行、模型并行。
当单个GPU的内存可以完整容纳整个模型时,这是可实现数据并行的最简单的情况。但此时,模型训练可用的batch size就变得较小,增加了训练难度。解决办法是将不同的模型实例放在不同的GPU上运行,每个模型实例计算不同的数据批次。
每个模型实例都有相同的参数初始化,但在前向传播中,每个模型实例会收到不同的数据批次。每个模型实例产生的梯度会被集结起来,用以计算梯度更新,然后进行模型参数更新,更新后的参数将被发送到每个模型示例中。
当单个GPU无法容纳整个模型时,模型并行就十分必要。模型并行要求将模型切分到多个GPU上进行训练。模型并行是训练大模型的有效办法,但它的缺点是算力的利用率太低。因为同一时间只有一个GPU正在运行,其余GPU都将闲置。
目前,数据并行和模型并行都取得了一定的进步,可以提升训练和推理时的效率。以下是业内流行的九大深度学习库。
1. Megatron-LM
Megatron是NVIDIA应用深度学习研究团队研发的大规模Transformer语言模型训练框架,支持模型并行(张量并行、序列并行与流水并行)与多节点预训练(multi-node pre-training),目前已支持BERT、GPT和T5模型。
链接:https://github.com/NVIDIA/Megatron-LM
2. DeepSpeed
DeepSpeed是Microsoft推出的深度学习库,用于训练Megatron-Turing NLG 530B和BLOOM等大型模型,在训练、推理和压缩三方面都有所创新。
DeepSpeed具有如下优点:
-
可进行十亿乃至万亿级参数的稀疏/密集模型的训练/推理