一、大模型的应用价值
目前,大模型主要以自然语言处理(NLP)为主。Transformer 结构通过 Attention 机制解决了 RNN 的序列依赖问题,使得 NLP 领域能够演变出更多强大的大模型。图像领域同样如此,CNN 大模型也开始陆续涌现。
1. 解决模型碎片化
AI 面对的行业和业务场景众多,需求呈现出碎片化、多样化的特点。从开发、调参、优化到应用,传统 AI 模型研发成本极高,难以满足市场定制化需求,常被称为'手工作坊式'。为了解决这一问题,大模型提供了一种可行方案,即'预训练大模型 + 下游任务微调'的模式。
大规模预训练可以有效地从大量标记和未标记的数据中捕获知识,通过将知识存储到大量的参数中并对特定任务进行微调,极大地扩展了模型的泛化能力。例如,在 NLP 领域,预训练大模型共享了预训练任务和部分下游任务的参数,在一定程度上解决了通用性的难题,可被应用于翻译、问答、文本生成等自然语言任务。一个大模型可以替代之前几十个专门的小模型,实现从手工作坊向工厂模式的转变。
2. 降低训练研发成本
大模型具备自监督学习功能,可以减少数据标注。这在一定程度上解决了人工标注成本高、周期长、准确度不高的问题,显著降低了研发门槛。
3. 突破精度局限
从深度学习发展前 10 年的历程来看,模型精度提升主要依赖网络结构的变革。但随着神经网络结构设计技术逐渐成熟并趋于收敛,想要通过优化结构打破精度局限非常困难。近年来,随着数据规模和模型规模的不断增大,模型精度也得到了进一步提升。研究实验表明,模型和数据规模的增大确实能突破现有精度的一个局限。
二、什么是大模型
在工业界,推荐系统模型的规模和复杂度快速增长。以推荐系统为例,训练样本从百亿增长到千亿,稀疏参数个数从几百到几千,总参数量从几亿增长到百亿。模型单步计算时间增长 10 倍以上,一次训练实验从几个小时增长到了几天。
1. 分布式训练模式
大模型主要分为两类分布式训练场景:
- 搜索、推荐、广告类任务:特点是海量样本及大规模稀疏参数(sparse embeddings),适合使用 CPU/GPU 参数服务器模式(Parameter Server, PS)。参数服务器架构经历了多代演进,从早期的 LDA 到现代的 Parameter Server 架构,再到后来的 Horovod、XDL、PAI、DLRM、BytePs 等百花齐放的实现。参数服务器的功能日趋完善,性能也越来越强,有纯 CPU、纯 GPU 以及异构模式。
- CV、NLP 任务:特点是常规样本数据及大规模稠密参数,适合用纯 GPU 集合通信模式(Collective Communication)。基于纯 GPU 的集合通信模式的分布式训练框架,伴随着 Nvidia 的技术迭代,特别是 GPU Direct RDMA 的进步,性能变得愈来愈强。
2. Embedding 与特征规模
在广告推荐中,看似一两百类的特征,实际可能涉及大规模特征。例如用户 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。
三、大模型训练的挑战
1. 内存墙
在计算过程中,神经网络模型每一层的卷积或者全连接计算,都会把权重 W_m 长期保存下来,用作网络的权重参数更新(静态内存)。另外针对诸如 ADAM 的优化器,会存储优化器的动量等信息,用于优化器计算(动态内存)。一块有 16G 显存的 AI 芯片,最大能塞满 20+ 亿参数的模型,但是这时候已经没有额外空间,留给动态内存进行分配啦。静态内存和动态内存都可能造成内存墙的问题。


