一、大模型的应用价值
目前,大模型主要以自然语言处理(NLP)为主。Transformer 结构通过 Attention 机制解决了 RNN 的序列依赖问题,使得 NLP 领域能够演变出更多强大的大模型。图像领域同样如此,CNN 大模型也开始陆续涌现。
大模型在自然语言处理及计算机视觉领域展现出显著应用价值,通过预训练加微调模式解决行业碎片化需求。文章深入剖析了大模型的定义特征,包括海量参数与稀疏稠密分布。重点讨论了分布式训练中遇到的内存墙、通信墙及性能瓶颈,并详细阐述了数据并行、张量并行、流水线并行等解决方案。此外,还涵盖了梯度累积、混合精度训练等优化策略,为大模型工程化落地提供技术参考。

目前,大模型主要以自然语言处理(NLP)为主。Transformer 结构通过 Attention 机制解决了 RNN 的序列依赖问题,使得 NLP 领域能够演变出更多强大的大模型。图像领域同样如此,CNN 大模型也开始陆续涌现。
AI 面对的行业和业务场景众多,需求呈现出碎片化、多样化的特点。从开发、调参、优化到应用,传统 AI 模型研发成本极高,难以满足市场定制化需求,常被称为'手工作坊式'。为了解决这一问题,大模型提供了一种可行方案,即'预训练大模型 + 下游任务微调'的模式。
大规模预训练可以有效地从大量标记和未标记的数据中捕获知识,通过将知识存储到大量的参数中并对特定任务进行微调,极大地扩展了模型的泛化能力。例如,在 NLP 领域,预训练大模型共享了预训练任务和部分下游任务的参数,在一定程度上解决了通用性的难题,可被应用于翻译、问答、文本生成等自然语言任务。一个大模型可以替代之前几十个专门的小模型,实现从手工作坊向工厂模式的转变。
大模型具备自监督学习功能,可以减少数据标注。这在一定程度上解决了人工标注成本高、周期长、准确度不高的问题,显著降低了研发门槛。
从深度学习发展前 10 年的历程来看,模型精度提升主要依赖网络结构的变革。但随着神经网络结构设计技术逐渐成熟并趋于收敛,想要通过优化结构打破精度局限非常困难。近年来,随着数据规模和模型规模的不断增大,模型精度也得到了进一步提升。研究实验表明,模型和数据规模的增大确实能突破现有精度的一个局限。
在工业界,推荐系统模型的规模和复杂度快速增长。以推荐系统为例,训练样本从百亿增长到千亿,稀疏参数个数从几百到几千,总参数量从几亿增长到百亿。模型单步计算时间增长 10 倍以上,一次训练实验从几个小时增长到了几天。
大模型主要分为两类分布式训练场景:
在广告推荐中,看似一两百类的特征,实际可能涉及大规模特征。例如用户 userid 这一维特征,如果系统中用户有 1 亿个,那么每个 id 实际上也可以当做一个独立的特征对待。这样一算,特征规模就上去了。这里需要重新理解 embedding 的概念:对于模型而言,id 查了 embedding 表后得到向量,输入进来进行计算,是对数据进行抽特征。如果类比到图像分类,就是抽取 rgb 特征来分类。
参数量卷到一百万亿!一般来说,推荐系统模型首先需要将不同的 ID 特征(如用户 ID 和 session ID)映射到一个固定长度的低维向量,而系统中的用户 ID、交叉特征数量都特别多,就需要更大规模的模型来捕获特征和映射。但更大规模的 embedding layer 也需要更大的内存来载入,大模型对硬件资源要求极高。
有了 embedding 后,剩下的工作就简单了,设计后续 layer 来适配不同的任务。通常只占据整个模型的 0.1%,无需大内存,主要是一些计算密集型的工作。
推理服务在运行时也会访问参数服务器(distributed inference),根据 ID feature 查询对应的 embedding 向量。有的框架直接将 ps 组件的功能内嵌到各个 worker 上了。
针对大模型包含 embedding layer 的场景,input 层和 embedding 层之间不是全连接的,而是一个 embedding_lookup 的 Op。常规的 dense 模型,input 是一个一维向量。针对多个 id feature,为了确保与模型的 input 层对齐,input 实际变成了一个 map<string,tensor>,key 为 id feature 名字,value 为 id feature 值对应的 tensor。
在计算过程中,神经网络模型每一层的卷积或者全连接计算,都会把权重 W_m 长期保存下来,用作网络的权重参数更新(静态内存)。另外针对诸如 ADAM 的优化器,会存储优化器的动量等信息,用于优化器计算(动态内存)。一块有 16G 显存的 AI 芯片,最大能塞满 20+ 亿参数的模型,但是这时候已经没有额外空间,留给动态内存进行分配啦。静态内存和动态内存都可能造成内存墙的问题。
大模型通过模型并行、流水线并行切分到 AI 集群后,通讯便成了主要的性能瓶颈。随着机器规模的扩大,基于同步的 All Reduce 通讯聚合方式,会因为大量的 AI 芯片和服务器之间频繁进行同步,出现水桶效应,也就是最慢的一路通讯,将会决定整个 AI 集群的通讯的高度。如果采用目前比较流行的 Ring-AllReduce 的通信聚合方式,当通讯的环越大,通讯的延迟将会不断地被扩大。另外网络协议的多次握手的方式,诸如此类的开销会导致训练无法有效利用带宽。
性能墙主要是指计算资源利用率的问题。随着大模型的提出,对算力需求更加迫切。理论上在 4K 的集群上每块卡快 1 分钟,总体就快了 68 个小时。大模型会增加对算力的需求,但是随着大模型引入各项分布式并行技术的同时,会降低计算资源的利用率。
所以在数千节点的集群上,需要考虑到提升算法工程师分布式调试调优的效率,另外还要考虑降低工程师对大模型进行并行切分的难度。除了对人的考虑,还要对硬件集群的管理,需要保证计算的正确性、性能、可用性。要是有一台机器坏了,如何快速恢复训练中的参数。
除了上述的数据量级大,不同场景下分布式训练的痛点对 CV 和 NLP 场景尤为明显。
当面对 GPT-3 这种 DenseNet 部分大的模型,Allreduce 单卡内存无法容纳,我们需要采用模型并行 (model parallelism) 的方式将计算图划分到不同的设备上构建有向无环图 (DAG) 进行分布式训练,其中 Gpipe, Megatron, Oneflow 和 Whale 都提出模型并行的相关解决方案。相比于数据并行每个 worker 只有一部分数据,模型并行下每个 node 使用所有数据。
究竟用哪种并行方法呢?实际上这跟计算机结构有关。如果每台计算机之间通信都非常快,那么用数据并行就可以;如果你的通信比较慢,就要考虑模型并行。因此,这些模型如何跟数据、机器实际情况匹配?这就涉及到软硬件协同设计。
在模型比较小的时候,比如 100G 以下,模型还有可能单机存储。这个时候的方案是 tensorflow 分布式训练 + savedmodel,分布式训练可以用多个 ps(tensorflow 自带的),资源管理可以用 yarn。用分布式是由于样本数大,同时多 ps 也能异步加速训练。saved_model 一般由 chief worker 保存,但存下来以后,会抹掉 ps 的痕迹,保存的模型跟单机训练的一模一样。
当模型比较大的时候,要求的样本数也更大,训练完 dump 出来的模型会很大,一个单机放不下,尤其是 embedding table。这个时候怎么办?一个自然的思路就是,把训练时候的 ps 拷贝同步一份给 serving ps,线上由该 ps 做 serving。注意后面谈到的 serving ps,都是自己开发或者根据某个开源软件修改而成 (比如 ps-lite)。
如果是天级模型,可以用 tensorflow 原生的 worker 和 train ps,但依然用 saved model 方式把模型存放到 hdfs,然后从 hdfs 读入另外一个 serving ps。如果是实时训练,则 serving ps 还得跟训练 ps 进行实时的网络连接,在内存就解决掉 weight 同步的处理,这个时候就不能用 tensorflow 原生的 ps 了,因为原生的 ps 没有实现同步接口。ps 变了,worker 也得跟着变,worker 大多数都是基于 tensorflow 的 c++ 底层接口开发,底层用到 tf 的 session 接口。
针对上述的问题,各个大厂的训练框架进行很多相关优化,目前总结下来,核心的两点,一个在于分布式通信拓扑的设计,还有一个在于 Embedding Lookup 的性能优化。
只要单卡放的下,走数据并行,ps 或 allreduce 都行,allreduce 通信成本小一些。若规模变大:
稠密模型,单卡无论如何也放不下了,就只能采取模型并行及附属的一些优化方案。
大模型技术的落地不仅依赖于算法的创新,更依赖于系统工程能力的提升。从分布式训练框架的选择,到硬件资源的调度,再到模型压缩与加速,每一个环节都需要精细化的设计与优化。未来,随着硬件算力的持续提升和软件生态的完善,大模型将在更多垂直领域发挥关键作用,推动人工智能从通用智能向行业专用智能迈进。开发者应重点关注分布式训练原理、显存优化策略以及模型部署流程,以应对日益复杂的工程挑战。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online