大模型实战技术指南:集群、训练、微调与推理加速
本文总结了大模型实战的关键技术,涵盖AI集群硬件配置、主流模型结构(Transformer/MoE)、各类大语言模型(LLaMA/ChatGLM/Bloom)特性、领域大模型(金融/法律/医疗)应用、RLHF原理与工具、分布式并行与显存优化技术(ZeRO/LoRA)、评估方法及推理加速方案。内容涉及从训练框架选择到部署落地的全流程,为开发者提供详细的技术参考与实践指南。

本文总结了大模型实战的关键技术,涵盖AI集群硬件配置、主流模型结构(Transformer/MoE)、各类大语言模型(LLaMA/ChatGLM/Bloom)特性、领域大模型(金融/法律/医疗)应用、RLHF原理与工具、分布式并行与显存优化技术(ZeRO/LoRA)、评估方法及推理加速方案。内容涉及从训练框架选择到部署落地的全流程,为开发者提供详细的技术参考与实践指南。

随着ChatGPT的迅速出圈,大模型时代加速到来。对于以Transformer、MOE结构为代表的大模型来说,传统的单机单卡训练模式已无法满足上千亿甚至万亿级参数的模型训练需求,必须解决内存墙和通信墙等一系列问题,采用单机多卡或多机多卡进行分布式模型训练。
本文主要涉及AI集群、AI集群通信、大模型训练(参数高效微调)、大模型推理加速、大模型评估、大模型生态相关技术等内容,旨在为开发者提供一份全面的技术参考。
由于目前硬件资源限制,基于现有的一些AI框架和大模型,无法充分利用所有服务器资源。例如OPT-66B一共有64层Transformer,当使用Alpa进行流水线并行时,通过流水线并行对模型进行切分,要么使用16卡,要么使用8卡,没法直接使用24卡。因此,GPU服务器最好是购买偶数台(如:2台、4台、8台)以便灵活配置。
CPUs: 每个节点具有1TB内存的Intel CPU,物理CPU个数为64,每颗CPU核数为16。
GPUs: 24 卡 A800 80GB GPUs,每个节点 8 个 GPU(3 个节点)。
目前使用Huggingface Transformers和DeepSpeed进行数据并行训练(pretrain),单卡可以跑三百亿参数(启用ZeRO-2或ZeRO-3),如OPT-30B。具体训练教程可参考官方样例。
使用Alpa进行流水线并行和数据并行进行训练(fine tuning)时,使用了3台共24卡(PP:12,DP:2)进行训练OPT-30B。如果不想转换模型格式,官网也提供了转换好的模型格式,具体请参考文档:Serving OPT-175B, BLOOM-176B and CodeGen-16B using Alpa。
目前主流的AI处理器无疑是NVIDIA的GPU。NVIDIA的GPU产品主要有GeForce、Tesla和Quadro三大系列。虽然从硬件角度来看,它们都采用同样的架构设计,也都支持用作通用计算(GPGPU),但因为它们分别面向的目标市场以及产品定位的不同,这三个系列的GPU在软硬件的设计和支持上都存在许多差异。
其中,A800/H800是针对中国特供版(低配版),相对于A100/H100,主要区别在于Nvlink最大总网络带宽:
其他国外AI处理器:
国产AI处理器:
目前主流的大模型都是Transformer、MOE结构为基础进行构建。如果说Transformer结构使得模型突破到上亿参数量,MoE 稀疏混合专家结构使模型参数量产生进一步突破,达到数万亿规模。
Transformer 开创了继 MLP、CNN和 RNN之后的第四大类模型。基于Transformer结构的模型又可以分为Encoder-only、Decoder-only、Encoder-Decoder这三类。
目前业界可以下载到的一些大语言模型包括:
开源的大语言模型主要有三大类:GLM衍生的大模型、LLaMA衍生的大模型、Bloom衍生的大模型。
| 模型 | 训练数据量 | 模型参数 | 训练数据范围 | 词表大小 |
|---|---|---|---|---|
| LLaMA | 1T~1.4T tokens | 7B~65B | 以英语为主要语言的拉丁语系 | 32000 |
| ChatGLM-6B | 约 1T tokens | 6B | 中文、英语 | 130528 |
| Bloom | 1.6TB预处理文本 | 300M~176B | 46种自然语言,13种编程语言 | 250680 |
对于像ChatGLM-6B、LLaMA、Bloom这类大模型,要保证基座模型有比较好的效果,至少需要保证上千亿、万亿级的Token量。
关于LLaMA是否需要扩充词表的问题,根据Chinese-LLaMA-Alpaca和BELLE的报告,扩充中文词表可以提升中文编解码效率以及模型的性能。但是扩词表相当于从头初始化开始训练这些参数,如果想达到比较好的性能,需要比较大的算力和数据量。如果不是有特别充裕的时间和计算资源,建议跳过该阶段。
根据 OpenAI 之前做的一些实验,可以看到使用了 PPO(近端策略优化)算法的 RLHF 模型整体上都更好一些。RLHF 之所以能让模型更好,一种可能与比较和生成的计算难度之间的不对称性有关。判断哪个样本更好是简单得多的任务,这种不对称性可能使得比较是一种更好的方法。
但目前来看,RLHF 并不总是会为基石模型带来提升。在某些情况下,RLHF 模型会失去一些熵,也就是说它们会输出更加单调、变化更少的结果。而基础模型的熵更高,可以输出更加多样化的结果。
目前训练超大规模语言模型主要有两条技术路线:
对于国内来说,华为昇腾在打造 AI 全栈软硬件平台(昇腾NPU+CANN+MindSpore+MindFormers)。不过目前整个生态相对前两者,还差很远。
在面对特定的下游任务时,如果进行Full FineTuning(即对预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果。
PEFT技术旨在通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。
相比全参数微调,大部分的高效微调技术目前存在的两个问题:
OpenAI的论文 Scaling Laws for Neural Language Models 中列举了影响模型性能最大的三个因素:计算量、数据集大小、模型参数量。也就是说,当其他因素不成为瓶颈时,计算量、数据集大小、模型参数量这3个因素中的单个因素指数增加时,loss会线性的下降。
除了以上的因素之外,还有一个比较大的影响因素就是数据质量。在微软的论文 Instruction Tuning with GPT-4 中指出,同样基于LLaMA模型,使用GPT3和GPT4产生的数据,对模型进行Instruction Turing,可以看到GPT4的数据微调过的模型效果远远好于GPT3数据微调的模型。
要评估一个大型语言模型的水平,可以从以下几个维度提出具有代表性的问题:
模型推理作为模型投产的最后一公里,需要确保模型精度的同时追求极致的推理性能。相比传统模型来说,大模型面临着更多的挑战。
当前优化模型最主要技术手段概括来说有以下三个层面:
大模型是基座,要想让其变成一款产品,我们还需要一些其他相关技术。
以下列出了一些典型的LLM训练实践方向:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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