模型并行是什么?
数据并行有个前提:每张卡都能装下完整的模型。可当模型大到几百亿、几千亿参数,单卡显存早就装不下了。模型并行的思路是「把模型本身切开」——把不同的层(或同一层的不同部分)放到不同的 GPU 上,大家一起协作,把这一个大模型算完。它和数据并行有什么不同?
数据并行:分数据每张卡一份完整模型,各自处理不同数据。
模型并行:分模型
模型被拆成几块,每张卡只管其中一块,数据则按顺序流经所有卡。
解决的问题不一样
数据并行解决「训得慢」,模型并行解决「装不下」。
两种常见的切法
按层切(层间并行)比如 1~10 层放 GPU A,11~20 层放 GPU B。数据先过 A 再过 B,像流水线一样传递。
按张量切(张量并行)
把某一层内部的矩阵运算切开,分给多张卡并行算,再拼回结果,通常用于 Transformer 的注意力等大矩阵。
难点在哪?
通信压力大层与层之间、张量之间都要频繁传数据,对卡间带宽要求很高。
负载不均
如果各块计算量不同,快的卡会干等慢的卡,效率打折。
实现更复杂
不像数据并行那样几乎「开箱即用」,需要更精细的工程。
它为什么不可替代?
今天几乎所有超大模型训练都离不开模型并行。没有它,参数上千亿的模型连「放」都放不下,更别提训练了。一句话记住:模型并行就是「模型太大装不下,把它拆成几块,让多张卡一起抬」。
评论