Description: Trying to be better!
ChatGPT 大模型的时代到来了,怎么样才能不做一个 Prompt 工程师呢?那自然是学习如何训练大模型了。个人理解,大模型的训练的目标函数并不难,就是 language modeling 的极大似然估计,难的是 大规模算力的调度和高质量数据的清洗 。而这方面的经验和技术储备,很多的同学因为受到实验室的资源限制,其实是远远不够的,那我们能做的,就是通过尽可能地和公司合作,并且熟练地掌握分布式的训练框架,这些框架的核心就是各式各样的并行,这篇 Blog 就来分享一下学习并行机制以及 megatron LM 的相关代码。
数据并行是之前做单机多卡(Single-node multi GPUs)最常用的一种方案,其核心就是在不同 GPU 上分别 host 一个模型,从而每块 GPU 能够拥有自己的一部分 dataset subset,达到一个亚线性的加速,例如,使用八块 GPU 训练会比单块 GPU 快大约八倍不到的速度。之所以无法达到完全的 GPU 数量倍数的加速比,是因为各个 GPU 所 host 参数需要在梯度更新后进行参数同步,即:
第二步中需要在 GPU 之间进行大量的数据传输,造成对训练吞吐量的影响,当然有一些异步的机制来降低这一数据传输的开销,但一般这种开销也基本可以接受,使用原版的数据并行就可以了。