链载Ai

标题: 大模型实践总结-最新版(2023.07.03) [打印本页]

作者: 链载Ai    时间: 4 小时前
标题: 大模型实践总结-最新版(2023.07.03)

随着ChatGPT的迅速出圈,加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说,传统的单机单卡训练模式肯定不能满足上千(万)亿级参数的模型训练,这时候我们就需要解决内存墙和通信墙等一系列问题,在单机多卡或者多机多卡进行模型训练。

最近,我也在探索大模型相关的一些技术,下面做一个简单的总结,后续争取每一个季度更新一次,目前最新更新为2023.07.03,本文主要涉及AI集群、AI集群通信、大模型训练(参数高效微调)、大模型推理加速、大模型评估、大模型生态相关技术等相关内容,同时,也对之前写过的一些大模型相关的文章进行了汇总,篇幅太长,建议先收藏后再阅读。

AI 集群

由于目前只有3台A800 GPU服务器(共24卡),基于目前现有的一些AI框架和大模型,无法充分利用3台服务器。比如:OPT-66B一共有64层Transformer,当使用Alpa进行流水线并行时,通过流水线并行对模型进行切分,要么使用16卡,要么使用8卡,没法直接使用24卡,因此,GPU服务器最好是购买偶数台(如:2台、4台、8台)。

具体的硬件配置如下:

目前使用Huggingface Transformers和DeepSpeed进行通过数据并行进行训练(pretrain),单卡可以跑三百亿参数(启用ZeRO-2或ZeRO-3),如OPT-30B,具体训练教程参考官方样例。

使用Alpa进行流水线并行和数据并行进行训练(fine tuning)时,使用了3台共24卡(PP:12,DP:2)进行训练OPT-30B,具体训练教程参考官方样例。但是进行模型训练之前需要先进行模型格式转换,将HF格式转换为Alpa格式的模型文件,具体请参考官方代码。如果不想转换,官网也提供了转换好的模型格式,具体请参考文档:Serving OPT-175B, BLOOM-176B and CodeGen-16B using Alpa。

20230703:前几天对H800进行过性能测试,整体上来说,对于模型训练(Huggingface Transformers)和模型推理(FasterTransformer)都有30%左右的速度提升。但是对于H800支持的新数据类型FP8,目前很多开源框架暂不支持,虽然,Nvidia自家一些开源框架支持该数据类型,目前不算太稳定。

AI处理器(加速卡)-新增(2023.06.30)

目前,主流的AI处理器无疑是NVIDIA的GPU,NVIDIA的GPU产品主要有GeForce、Tesla和Quadro三大系列,虽然,从硬件角度来看,它们都采用同样的架构设计,也都支持用作通用计算(GPGPU),但因为它们分别面向的目标市场以及产品定位的不同,这三个系列的GPU在软硬件的设计和支持上都存在许多差异。其中,GeForce为消费级显卡,而Tesla和Quadro归类为专业级显卡。GeForce主要应用于游戏娱乐领域,而Quadro主要用于专业可视化设计和创作,Tesla更偏重于深度学习、人工智能和高性能计算。

其中,A800/H800是针对中国特供版(低配版),相对于A100/H100,主要区别:

其他的一些国外AI处理器(加速卡):

国产AI处理器(加速卡):

大模型算法

模型结构

目前主流的大模型都是Transformer、MOE结构为基础进行构建,如果说Transformer结构使得模型突破到上亿参数量,MoE 稀疏混合专家结构使模型参数量产生进一步突破,达到数万亿规模。

大模型算法

下图详细展示了AI大模型的发展历程:

可以说,Transformer 开创了继 MLP 、CNN和 RNN之后的第四大类模型。而基于Transformer结构的模型又可以分为Encoder-only、Decoder-only、Encoder-Decoder这三类。

大语言模型

目前业界可以下载到的一些大语言模型

...

20230325(当时官方还未开源训练代码,目前直接基于官方的训练代码即可):

前两天测试了BELLE,对中文的效果感觉还不错。具体的模型训练(预训练)方法可参考Hugingface Transformers的样例,SFT(指令精调)方法可参考Alpaca的训练代码。

从上面可以看到,开源的大语言模型主要有三大类:GLM衍生的大模型(wenda、ChatSQL等)、LLaMA衍生的大模型(Alpaca、Vicuna、BELLE、Phoenix、Chimera等)、Bloom衍生的大模型(Bloomz、BELLE、Phoenix等)。

模型训练数据量模型参数训练数据范围词表大小
LLaMA1T~1.4T tokens(其中,7B/13B使用1T,33B/65B使用1.4T)7B~65B以英语为主要语言的拉丁语系32000
ChatGLM-6B约 1T tokens6B中文、英语130528
Bloom1.6TB预处理文本,转换为 350B 唯一 tokens300M~176B46种自然语言,13种编程语言250680

从表格中可以看到,对于像ChatGLM-6B、LLaMA、Bloom这类大模型,要保证基座模型有比较好的效果,至少需要保证上千亿、万亿级的Token量。

目前来看,LLaMA无疑是其中最闪亮的星。但是国内关于LLaMA比较大的一个争论就是LLaMA是以英语为主要语言的拉丁语系上进行训练的,LLaMA词表中的中文token比较少(只有几百个),需不需要扩充词表?如果不扩充词表,中文效果会不会比较差?

下面是BELLE针对是否扩充词表,数据质量、数据语言分布、数据规模对于模型性能的对比:

其中,BELLE-0.5M-CLEAN是从230万指令数据中清洗得到0.5M数据(包含单轮和多轮对话数据)。LLaMA-7B-EXT是针对LLaMA做了中文词表扩充的预训练模型。

下面是Chinese-LLaMA-Alpaca针对中文Alpaca-13B、中文Alpaca-Plus-7B、中文Alpaca-Plus-13B的效果对比:

其中,Plus系列Alpaca是在原版LLaMA的基础上扩充了中文词表,使用了120G中文通用纯文本数据进行二次预训练。

因此,如果既想要中文词表,又没有很大的算力,那建议直接使用ChatGLM-6B或者使用BELLE和Chinese-LLaMA-Alpaca进行中文词表扩充后训练好的模型作为Base模型。

多模态大模型

目前业界可以下载到的一些多模态大模型

领域大模型-新增(2023.06.30)

金融领域大模型

法律领域大模型

医疗领域大模型

教育领域大模型

数学领域大模型

RLHF(人工反馈强化学习)-新增(2023.07.03)

根据 OpenAI 之前做的一些实验,可以看到使用了 PPO(近端策略优化)算法的 RLHF 模型整体上都更好一些。当把结果提供给人类时,相比于 SFT 模型和通过 prompt 化身为助理的基础模型,人类也基本更喜欢来自 RLHF 模型的 token。

那 RLHF 为什么能让模型更好呢?目前 AI 研究界还没有找到一个得到大家认可的理论,一种可能与比较和生成的计算难度之间的不对称性有关

举个例子说明一下:假设我们要让一个模型写一首关于回形针的俳句。如果你是一位正努力创建训练数据的合同工,正在为 SFT 模型收集数据。那么你该怎样写出一首关于回形针的好俳句呢?而你可能并不是一位优秀的俳句诗人。但是,如果给你几首俳句,你却有能力辨别它们中哪首更好一些。也就是说,比起创建一个好样本,判断哪个样本更好是简单得多的任务。因此,这种不对称性可能使得比较是一种更好的方法,能更好地利用人类的判断来创造出好一些的模型。

但目前来看,RLHF 并不总是会为基石模型带来提升。在某些情况下,RLHF 模型会失去一些熵,也就是说它们会输出更加单调、变化更少的结果。而基础模型的熵更高,可以输出更加多样化的结果。

RLHF开源工具

下面是目前开源的一些RLHF工具:

分布式并行及显存优化技术

并行技术

显存优化技术

分布式训练框架

如何选择一款分布式训练框架

常见的分布式训练框架

目前训练超大规模语言模型主要有两条技术路线

  1. TPU + XLA + TensorFlow/JAX :由Google主导,由于TPU和自家云平台GCP深度绑定。
  2. GPU + PyTorch + Megatron-LM + DeepSpeed :由NVIDIA、Meta、MicroSoft大厂加持,社区氛围活跃,也更受到大家欢迎。

对于国内来说,华为昇腾在打造 AI 全栈软硬件平台(昇腾NPU+CANN+MindSpore+MindFormers)。不过目前整个生态相对前两者,还差很远。

参数高效微调(PEFT)技术

在面对特定的下游任务时,如果进行Full FineTuning(即对预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果。

PEFT技术旨在通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。这样一来,即使计算资源受限,也可以利用预训练模型的知识来迅速适应新任务,实现高效的迁移学习。因此,PEFT技术可以在提高模型效果的同时,大大缩短模型训练时间和计算成本,让更多人能够参与到深度学习研究中来。除此之外,FEFT可以缓解全量微调带来灾难性遗忘的问题。

  1. 带来更多可学习的参数(从P-tuning和Prompt Tuning的0.1%增加到0.1%-3%),同时也足够参数高效。
  2. 加入到更深层结构中的Prompt能给模型预测带来更直接的影响。







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5