知乎:suc16
链接:https://zhuanlan.zhihu.com/p/624918286

折腾大模型(small LLM)一段时间了,以下是平民版的LLM学习记录,记录了自己遇到的问题,以及给出不完美的解答。

LLM基础

1. 最主流的开源模型?

ChatGLM-6B

LLaMA-7B

2. 两者结构上的区别?

ChatGLM-6B是Prefix LM(PLM),LLaMA-7B是Causal LM(CLM)。

(参考google的论文《UL2: Unifying Language Learning Paradigms》)

3. 哪种架构是主流?

Causal LM,GPT系列就是Causal LM。

软件环境

1. 建议的基础软件环境是什么?

python版本建议使用python3.9以上。

cuda版本建议使用cuda-11.7以上。

c++版本建议升级到c++9.1.0以上。

2. 建议的python环境是什么?

建立虚拟环境以便隔离多组实验,推荐使用conda管理环境。

硬件环境

1. 为满足GPU推理需求,如何准备显卡?

单卡条件下,显存大小至少满足加载完整模型(fp16),每10亿(Billion)参数需要2GB,因为fp16精度1个参数要占16bits,2bytes。

ChatGLM-6B官方说,fp16下最低需要13GB显存。这基本符合上面的计算结果。

2. 如何选择显卡型号?

尽量选择大显存和新一代的显卡,比如A100/A6000。

A100的新特性,支持bf16、tf32。

3. 显存不充足的情况下如何体验大模型

可以选择对模型进行量化(8bit或4bit)甚至更低。

ChatGLM-6B官方说,在int8和int4模式下的推理最低显存要求会从13GB降到10GB和6GB。

或者使用cpu进行推理,例如:llama.cpp,或者最近很火的MLC LLM?

4. CPU上推理速度怎么样?

llama.cpp作者在M1 pro mac上的测试结果是61.41 ms per token(基于LLaMA-7B),但是有能力的还是上GPU吧。

5. int4量化是直接降低精度吗?

不是,需要特殊的量化手段,大模型通常使用GPTQ量化。

6. huggingface的int8推理速度怎么样?

LLM.int8()的BLOOM-176B比FP16版本慢了大约15%到23%。小模型下,int8推理会更慢。

微调方式

1. 有什么高效指令微调的方式?

ChatGLM-6B官方支持的p-tuning-v2,以及最常见的LoRA方式都可以微调,节省显存又高效。

2. 参数微调后的常见问题?

很常见的是原有能力受损,或者出现循环输出重复性文本的问题。

考虑到循环输出是概率问题,而ChatGPT中默认开启do_sample,增加随机性。所以尽量在测试微调后模型时也开启这一模式。

3. 高效微调后,能否合并模型为单一模型?

根据LoRA的论文,训练得到低秩的权重delta矩阵,所以支持合并。

另外,参考刘聪NLP同学的一个微调实验结果,LoRA可调参数仅为0.0586%,所以它的参数文件很小。

似乎新版的peft库已经支持只切换LoRA的参数,而非每次重新加载整个模型。

4. 对于指令微调的理解?

finetune阶段的batch size通常远小于pretrain阶段,微调的数据量也远小于预训练的数据量。(参考MPT-7B模型的实验)

可以理解为,指令微调是为了获得执行指令的能力,而不是从头学习。

5. 训练加速策略?

参考LLaMA论文,使用更高效更节省显存的attention实现,比如:xformers库。

RLHF

1. 各阶段数据集格式?

SFT: 问答对,RM: 问+正负回答对,PPO: 复用前两阶段数据即可。

2. 如何选择训练框架和模型?

开源框架有很多:

ColossalChat支持LLaMA但更新很慢。

TRL也通过StackLLaMA给出了RLHF的示例。

还有号称能加速RLHF训练很多倍的DeepSpeed-Chat。

参考InstructGPT论文,建议选择同一系列的小模型做奖励模型,太大的模型在奖励模型阶段可能有收敛性问题。

其他

1. 如何基于大语言模型构建应用?

有很多开源项目,比如:llama-index(原gpt-index)做文档式的对话系统。

或者使用MOSS的思路,把大语言模型做成各种插件。

2. 输入长度限制?

理论上支持无限长度,根据空门大佬的实验,用滑动窗口的持续采样似乎可以在A6000单卡上无限采样下去。(LLaMA-65B量化版本的推理)

不过默认还是2k窗口,GPT4的8k窗口和高级版的32k窗口的实现方式令人好奇,真的是原生的32k窗口吗?

3. 公开大模型和数据集的快速检索?

参考开源仓库,大模型参考LLM-Zoo(达摩院的)和数据集参考Alpaca-COT。

4. 如何解除商用限制?

LLaMA的限制在于模型数据,似乎无论是不同结构的模型,还是用其他数据训练的open_llama都能作为可以商用的底座。


进NLP群—>加入NLP交流群

需要解决问题的这边来,改bug、发论文等

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐