ChatGLM2-6B 训练参数解释
ChatGLM-6B 的部署与微调以及过程中涉及知识总结(7.26更新)
ChatGLM P-Tuning v2 避坑指南
小样本(100条)微调,建议 num_train_epochs(最大迭代轮数) =20 才能稳定拟合任务要求
ps:百度文心千帆平台微调建议,100条数据时, Epoch为15,1000条数据时, Epoch为10,10000条数据时, Epoch为2。
不同于 BERT、GPT-3 以及 T5 的架构,是一个包含多目标函数的自回归预训练模型。该模型有一些独特的优势:
双语:同时支持中文和英文。
高精度(英文):在公开的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。
高精度(中文):在 7 个零样本 CLUE 数据集和 5 个零样本 FewCLUE 数据集上明显优于 ERNIE TITAN 3.0 260B 和 YUAN 1.0-245B。
快速推理:首个实现 INT4 量化的千亿模型,支持用一台 4 卡 3090 或 8 卡 2080Ti 服务器进行快速且基本无损推理。
可复现性:所有结果(超过 30 个任务)均可通过我们的开源代码和模型参数复现。
跨平台:支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。
Vicuna开源代码地址:https://github.com/lm-sys/FastChat
Vicuna在线demo地址:https://chat.lmsys.org/
LLaMA2的开源地址:https://github.com/facebookresearch/llama/blob/main/MODEL_CARD.md
LLaMA2的下载地址:https://ai.meta.com/resources/models-and-libraries/llama-downloads/
LLaMA2的官方博客地址:https://ai.meta.com/resources/models-and-libraries/llama/
训练65B参数的模型,使用了2048块80G显存大小的A100卡,处理对应380 tokens/sec/GPU,1.4T个token训练了有21天。训练loss如下:
参数设置:
Llama 1 and Llama 2评测结果:
Model | Size | Code | Commonsense Reasoning | World Knowledge | Reading Comprehension | Math | MMLU | BBH | AGI Eval |
---|---|---|---|---|---|---|---|---|---|
Llama 1 | 7B | 14.1 | 60.8 | 46.2 | 58.5 | 6.95 | 35.1 | 30.3 | 23.9 |
Llama 1 | 13B | 18.9 | 66.1 | 52.6 | 62.3 | 10.9 | 46.9 | 37.0 | 33.9 |
Llama 1 | 33B | 26.0 | 70.0 | 58.4 | 67.6 | 21.4 | 57.8 | 39.8 | 41.7 |
Llama 1 | 65B | 30.7 | 70.7 | 60.5 | 68.6 | 30.8 | 63.4 | 43.5 | 47.6 |
Llama 2 | 7B | 16.8 | 63.9 | 48.9 | 61.3 | 14.6 | 45.3 | 32.6 | 29.3 |
Llama 2 | 13B | 24.5 | 66.9 | 55.4 | 65.8 | 28.7 | 54.8 | 39.4 | 39.1 |
Llama 2 | 70B | 37.5 | 71.9 | 63.6 | 69.4 | 35.2 | 68.9 | 51.2 | 54.2 |
[1] Llama 2 官方公告:https://ai.meta.com/llama/
[2] Llama 2 官方论文:https://huggingface.co/papers/2307.09288
[3] “GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints” by Google Research:https://arxiv.org/pdf/2305.13245.pdf
[4] “Llama 2: an incredible open LLM” by Nathan Lambert: https://www.interconnects.ai/p/llama-2-from-meta
[5] Llama 2 models: https://huggingface.co/meta-llama
[6] Text generation web UI github: https://github.com/oobabooga/text-generation-webu
如560m模型:https://huggingface.co/bigscience/bloomz-560m
注意:从0写个gpt简易版可以参考——极简PicoGPT
https://github.com/jaymody/picoGPT/tree/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785
介绍:60行代码就能构建GPT!网友:比之前的教程都要清晰|附代码
参考之前的:【LLM大模型】指令微调、peft高效参数微调
MedicalGPT项目:https://github.com/shibing624/MedicalGPT/tree/main
基于ChatGPT Training Pipeline,本项目实现了领域模型–医疗行业语言大模型的训练:
medicalGPT更新的训练策略:
项目:https://github.com/PKU-YuanGroup/ChatLaw
https://github.com/DUOMO/TransGPT
pt训练代码:采用了MedicalGPT提供的pretraining.py代码。
sft训练代码:采用了MedicalGPT提供的supervised_finetuning.py代码。
解决问题:解决电商场景任务(如品牌识别,评价解析,广告文案生成等)
论文链接:https://arxiv.org/abs/2308.06966
GitHub链接:https://github.com/Alibaba-NLP/EcomGPT
系列名称 | 需求 | 适用任务 | 参数规模 | 备注 |
---|---|---|---|---|
姜子牙 | 通用 | 通用大模型 | >70亿参数 | 通用大模型“姜子牙”系列,具备翻译,编程,文本分类,信息抽取,摘要,文案生成,常识问答和数学计算等能力 |
太乙 | 特定 | 多模态 | 8千万-10亿参数 | 应用于跨模态场景,包括文本图像生成,蛋白质结构预测, 语音-文本表示等 |
二郎神 | 通用 | 语言理解 | 9千万-39亿参数 | 处理理解任务,拥有开源时最大的中文bert模型,2021登顶FewCLUE和ZeroCLUE |
闻仲 | 通用 | 语言生成 | 1亿-35亿参数 | 专注于生成任务,提供了多个不同参数量的生成模型,例如GPT2等 |
燃灯 | 通用 | 语言转换 | 7千万-50亿参数 | 处理各种从源文本转换到目标文本类型的任务,例如机器翻译,文本摘要等 |
余元 | 特定 | 领域 | 1亿-35亿参数 | 应用于领域,如医疗,金融,法律,编程等。拥有目前最大的开源GPT2医疗模型 |
中文BiLLa: A Bilingual LLaMA with Enhanced Reasoning Ability,参考
参考reference7的某乎中北邮老师的回答:
首先要考虑的问题,是究竟该不该做fine-tune,可以从这几个角度理解:
1、大量fine-tuning的案例证实,由于LLM本身已经学到了大量知识,轻易fine-tuning反而可能破坏其原有知识结构,导致效果下降。
2、fine-tuning后模型很容易过拟合特定任务,丧失原有的快速拟合新任务的能力。
3、fine-tuning还可能导致隐私泄露,由于fine-tuning依赖特定领域的数据集,可能暴露数据集中包含的敏感信息。
4、fine-tuning也要消耗大量时间和算力资源,而结果并不一定明显优于原模型。
5、fine-tuning难以迁移复用,每次fine-tuned仅适用于一个特定任务,无法像原模型那样泛化应用。
6、充分利用原有模型的基础上,引入先验知识,可能是更有效的方案。与fine-tuning相比,在prompt中显式融入先验知识,可以更简单直观而有效地引导模型。
7、fine-tuning后的模型输出,也会受到特定领域数据的潜在影响产生漂移,失去原有的一致性。
如果确实要做fine-tuning,为避免过拟合需要注意以下几个方面:
1、加大训练数据规模,反而可能导致过拟合。因为LLM本身已经拟合了大量文本数据分布,给它更多相似数据,可能不会提供很多有用的新信息,反而可能导致对训练数据的记忆效应。
2、简化模型结构,反而可能降低过拟合。一般认为复杂的模型容易过拟合,但对LLM而言,简化结构反而会降低其对任务的建模能力,从而减少过拟合风险。
3、提前停止训练(早停)可能会适得其反。LLM仍在不断学习新知识,过早停止反而阻碍了对新任务的适应,适当延长训练有助于增强泛化能力。
4、使用更小的学习率或许有助于防止过拟合,由于LLM已经预训练了大量的知识,所以在fine-tune时使用更小的学习率可能更为合适,还可以避免模型在fine-tune过程中忘记其原始的知识。
5、在实际应用中,应该prompt设计优化(提示工程)和模型优化配合使用,而不是单纯调参。LLM过拟合主要是对surface特征的模仿,而非真正理解语义。优化prompt可以让模型学习更抽象的表示。
6、多任务训练不一定有利于预防过拟合。不同任务间存在潜空间的迁移,单任务效果的提升可能依然过拟合特定数据集,需要更抽象的任务设计。
7、评估过程也可能过拟合,所以需要更多样化的测试用例,避免只针对某些特定情况进行有偏的评估。
8、可以尝试微调Transformer的部分head,而非整个multi-head,来局部微调模型。
9、可以考虑集成学习或专家混合,训练多份微调模型然后结果层叠或优化路由,也能有效降低最终模型总体过拟合风险。
以firefly模型全参微调为例:
进行全量参数微调:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/sft.json
train_args/sft.json中的主要参数说明如下,以下参数可以根据需求进行修改,其他参数建议不做修改:
在封神榜的姜子牙写作模型(https://huggingface.co/IDEA-CCNL/Ziya-Writing-LLaMa-13B-v1)中,建议的解码参数如下:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
device = torch.device("cuda")
query="帮我写一份去西安的旅游计划"
model = AutoModelForCausalLM.from_pretrained("IDEA-CCNL/Ziya-Writing-LLaMa-13B-v1", torch_dtype=torch.float16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("IDEA-CCNL/Ziya-Writing-LLaMa-13B-v1", use_fast=False)
inputs = ': ' + query.strip() + '\n:'
# 对输入进行分词和编码
input_ids = tokenizer(inputs, return_tensors="pt").input_ids.to(device)
generate_ids = model.generate(
input_ids,
max_new_tokens=2048,
do_sample = True,
top_p = 0.85,
temperature = 0.85,
repetition_penalty=1.,
eos_token_id=2,
bos_token_id=1,
pad_token_id=0)
# 对生成文本进行解码
output = tokenizer.batch_decode(generate_ids)[0]
print(output)
[1] 论文:Instruction Tuning for Large Language Models: A Survey
[2] 地址:https://arxiv.org/pdf/2308.10792.pdf
[3] 论文链接:https://arxiv.org/abs/2308.06966
[4] GitHub链接:https://github.com/Alibaba-NLP/EcomGPT
[5] Llama 2:最强开源大模型简单体验及原理分析
[6] 人大综述:https://github.com/RUCAIBox/LLMSurvey
[7] 在大模型下,对于垂直领域 有必要从头训练一个大模型吗,微调方式可以替代训练大模型方式吗?
[8] LLM大模型的fine-tune如何避免过拟合?
[9] https://github.com/RonaldJEN/FinanceChatGLM/
[10] 国产大模型智谱 AI 详解千亿基座问答模型 GLM-130B。准确性指标与 GPT-3 相当
[11] 【报告】从GLM-130B到ChatGLM:大模型预训练与微调
[12] 姜子牙大模型系列 | 写作模型ziya-writing开源!开箱即用,快来认领专属你的写作小助手吧
[13] https://github.com/horseee/Awesome-Efficient-LLM#survey
[14] https://kg-nlp.github.io/Algorithm-Project-Manual/
[15] https://github.com/hiyouga/LLaMA-Efficient-Tuning/