大模型实践总结

大模型实践总结

首页休闲益智果冻转变更新时间:2024-05-11

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

最近一段时间,我也在探索大模型相关的一些技术,下面做一个简单的总结。

大模型技术交流群

写在前面,我创建了一个大模型学习交流群,供大家一起学习交流大模型相关的最新技术,可加我微信(lgd215666835)进群(加微信请备注来意,如:进大模型学习交流群 今日头条)。

GPU集群

由于目前只有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。

大模型算法

模型结构

目前主流的大模型都是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等)。

| 模型 | 训练数据量 | 模型参数 | 训练数据范围| 词表大小 |
| ---------- | -------------- | ------ | --- | --- |
| LLaMA | 1T~1.4T tokens(其中,7B/13B使用1T,33B/65B使用1.4T) | 7B~65B | 以英语为主要语言的拉丁语系 | 32000 |
| ChatGLM-6B | 约 1T tokens | 6B | 中文、英语 | 130528 |
| Bloom | 1.6TB预处理文本,转换为 350B 唯一 tokens | 300M~176B | 46种自然语言,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模型。

多模态大模型

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

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

并行技术

显存优化技术

分布式训练框架

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

常见的分布式训练框架

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

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

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

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

典型应用

  1. ChatGLM-Tuning :一种平价的chatgpt实现方案,基于清华的 ChatGLM-6B LoRA 进行finetune。
  2. Alpaca-Lora:使用低秩自适应(LoRA)复现斯坦福羊驼的结果。Stanford Alpaca 是在 LLaMA 整个模型上微调,而 Alpaca-Lora 则是利用 Lora 技术,在冻结原模型 LLaMA 参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅微调的成本显著下降,还能获得和全模型微调类似的效果。
  3. BLOOM-LORA:由于LLaMA的限制,我们尝试使用Alpaca-Lora重新实现BLOOM-LoRA。

PEFT实现

  1. PEFT:Huggingface推出的PEFT库。
  2. unify-parameter-efficient-tuning:一个参数高效迁移学习的统一框架。

高效微调技术目前存在的两个问题

相比全参数微调,高效微调技术目前存在的两个问题:

  1. 推理速度会变慢
  2. 模型精度会变差
影响大模型性能的主要因素

OpenAI的论文Scaling Laws for Neural Language Models中列举了影响模型性能最大的三个因素:计算量数据集大小模型参数量。也就是说,当其他因素不成为瓶颈时,计算量、数据集大小、模型参数量这3个因素中的单个因素指数增加时,loss会线性的下降。

除了以上的因素之外,还有一个比较大的影响因素就是数据质量。在微软的论文Instruction Tuning with GPT-4中指出,同样基于LLaMA模型,使用GPT3和GPT4产生的数据,对模型进行Instruction Turing,可以看到GPT4的数据微调过的模型效果远远好于GPT3数据微调的模型,可见数据质量带来的影响。同样的,Vicuna(7B/13B)的Instruction Turing中,也对shareGPT的数据做了很细致的清洗工作。

衡量大模型水平

要评估一个大型语言模型的水平,可以从以下几个维度提出具有代表性的问题。

大模型评估方法

大模型评估工具

大模型推理加速

模型推理作为模型投产的最后一公里,需要确保模型精度的同时追求极致的推理性能。相比传统模型来说,大模型面临着更多的挑战。

当前优化模型最主要技术手段概括来说有以下三个层面:

推理加速框架

经验与教训

经验

教训

大模型实践文章

下面是最近大模型实践过程中的一些文章,配套代码放置在GitHub:llm-action

LLM训练:

LLM

预训练/微调/RLHF...

参数

教程

代码

Alpaca

full fine-turning

7B

从0到1复现斯坦福羊驼(Stanford Alpaca 7B)

N/A

Alpaca

lora

7B

1. 足够惊艳,使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调,效果比肩斯坦福羊驼<br/>2. 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理

配套代码

BELLE(LLaMA-7B/Bloomz-7B1-mt)

full fine-turning

7B

1. 基于LLaMA-7B/Bloomz-7B1-mt复现开源中文对话大模型BELLE及GPTQ量化<br/>2. BELLE(LLaMA-7B/Bloomz-7B1-mt)大模型使用GPTQ量化后推理性能测试

N/A

ChatGLM

lora

6B

从0到1基于ChatGLM-6B使用LoRA进行参数高效微调

N/A

ChatGLM

full fine-turning/P-Tuning v2

6B

使用DeepSpeed/P-Tuning v2对ChatGLM-6B进行微调

N/A

Vicuna

full fine-turning

7B

大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼

N/A

OPT

RLHF

N/A

1. 一键式 RLHF 训练 DeepSpeed Chat(一):理论篇 <br/>2. 一键式 RLHF 训练 DeepSpeed Chat(二):实践篇

N/A

MiniGPT-4

full fine-turning

7B

大*器,多模态大模型MiniGPT-4入坑指南

N/A

Chinese-LLaMA-Alpaca

lora(预训练 微调)

7B

使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理

配套代码

LLM推理:

LLM微调技术

对于普通大众来说,进行大模型的预训练或者全量微调遥不可及。由此,催生了各种参数高效微调技术,让科研人员或者普通开发者有机会尝试微调大模型。

因此,该技术值得我们进行深入分析其背后的机理,本系列大体分七篇文章进行讲解。

结语

实践出真知,以上是这段时间进行大模型实践的一点点总结,写的有一些主观和片面,后续会持续更新自己研究大模型获得的一些认知和实践经验。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved