Skip to content

Latest commit

 

History

History
345 lines (253 loc) · 36.5 KB

CN_README.md

File metadata and controls

345 lines (253 loc) · 36.5 KB

中文 | English

特制自己的ChatGPT: 多接口统一的轻量级LLM-IFT平台 (Alpaca-CoT)

LICENSE torch data model colab

这是Alpaca-CoT项目的存储库,该项目旨在构建一个多接口统一的轻量级指令微调(IFT)平台,该平台具有广泛的指令集合(尤其是CoT数据集)和用于各种大型语言模型以及各种参数效率方法(如LoRA,P-Tuning)的统一接口。我们正在不断扩展我们的指令调整数据收集,并集成更多的LLM。此外,我们还新建了一个分支tabular_llm来构造可以处理表格智能任务的大型语言模型。

欢迎您向我们提供任何未收集的指令调整数据集(或其来源)。我们将统一它们的格式,用这些数据集训练羊驼模型(以及未来早期的其他LLM),开源模型检查点,并进行广泛的实证研究。我们希望我们的项目能够为大型语言模型的开源进程做出微薄的贡献,降低其对NLP研究人员的入门门槛。

您也可以选择加入我们的群聊(WeChat),和更多的同好研究者们交流。目前群聊人数过多,需要好友邀请才能入群,请扫码加我为好友,拉您入群。

News

  • 🚀5.5: 新建了一个分支tabular_llm来构造可以处理多种表格智能任务的大型语言模型。
  • 🚀5.4: PEFT中所有parameter-efficient方法(如P-tuning)均被集成进来,可通过超参简单设置。
  • 🚀5.4: LLM MOSS已被集成进来。
  • 4.21: 已收集和统一格式化数据集 GAOKAO, camel, FLAN-Muffin, COIG.
  • 4.15: 已收集和统一格式化数据集 webGPT, dolly, baize, hh-rlhf, OIG(part).
  • 4.12: 现在你可以在Google Colab中体验Alpaca-CoT.
  • 4.11: 添加了多轮对话功能,感谢@paulcx
  • 4.9: 已收集和统一格式化数据集 firefly, instruct, Code Alpaca 这里.
  • 4.7: 添加了参数合并本地使用批量预测web服务功能,感谢@weberrr
  • 4.4: 已收集和统一格式化数据集FastChat, GPTeacher,Guanaco,HC3,prosocial-dialog, belle-chat&belle-math, xP3natural-instructions
  • 4.3: 中文的CoT数据集CoT_CN_data.json已上传到这里.
  • 4.1: 在instinwild-CN(47k) + belle(1.5M)微调得到的Bloom7b的checkpoint已被上传到了这里.
  • 4.1: instnwild(收集自推特,主要是生成、开放式QA和mind-storm types)已经被统一格式化并收集.

0. ChatGPT背后的技术

LLM: ( Large Language Models)指经过大规模预训练且体量较大的语言模型,一般是transformer-based模型。

IFT: ( Instruction Fine-Tuning)指令微调,指令是指用户传入的目的明确的输入文本,指令微调用以让模型学会遵循用户的指令。

CoT: ( Chain-of-Thought)指令形式的一种特殊情况,包含step-by-step的推理过程。如下图蓝色部分所示。

cot

1. 定位

ChatGPT的出现验证了大型语言模型(LLM)在通用人工智能(AGI)上的潜力。基于LLaMA[1]等Large Language Models(LLMs)的instruction-tuning研究(如,Alpaca[2])大幅度加速了复现ChatGPT的进程。Alpaca-CoT希望在这个研究方向上做出适度的贡献,以推进LLMs的开源进程、降低LLMs研究和使用成本。

具体来说,Alpaca-CoT项目旨在探究如何更好地通过instruction-tuning的方式来诱导LLM具备类似ChatGPT的交互和instruction-following能力。为此,我们广泛收集了不同类型的instruction(尤其是Chain-of-Thought数据集),并基于LLaMA给出了深入细致的实证研究,以供未来工作参考。据我们所知,我们是首个将CoT拓展进Alpaca的工作,因此简称为"Alpaca-CoT"。

热烈欢迎您向我们提供任何未被本项目收集的instruction-tuning及各类tasks数据集(或其来源)。我们将:

  • 将这些数据收录并进行统一格式化处理;
  • 用这些数据集instruct fine-tune LLaMA模型(未来将集成更多LLMs),并开源其checkpoint;
  • 进行广泛的实证研究以探究新收录的数据集的作用。

我们希望我们的项目能够为大型语言模型的开源过程做出适度的贡献,并降低NLP研究人员上手LLM相关研究的门槛。

2. 概述

近期,LLaMA[1]显示出惊人的zero-shot和few-shot能力,仅需较少的参数即可和GPT-3.5性能相当(LLaMA-13B显著优于GPT-3(175B),LLaMA-65B与PaLM-540MB相当),明显降低了训练、微调和使用competitive大型语言模型的成本。最近,为了提高LLaMA的instruction-following能力,Stanford Alpaca[2]利用self-instruct[3]生成的52K Englishi nstruction-finetuning数据对LLaMA进行了微调。然而,目前该方向的研究仍然面临着以下三个挑战:

  • LLaMA-7b依然对计算资源有着较高的要求;
  • 用于instruction finetuning的开源数据集较少;
  • 缺乏各instruction类型带来的影响的实证研究,如响应中文的能力和CoT能力。

为此,我们提出了Alpaca-CoT项目,该项目结合了相关的近期前沿技术,具有以下优势:

    1. 仅需要较低计算资源即可高效完成对LLaMA的微调7b,13b30b版本的LLaMA模型均可在单卡80G A100上轻松完成训练。该优势主要来自于low-rank adaptation (LoRA) [4], PEFTbitsandbytes等技术。我们的代码主要修改自这里
    1. 我们发布的模型 显著提升了CoT(reasoning)推理能力
    1. 我们发布的模型 显著提升了对中文指令的响应能力
    1. 维护了一个仍在不断扩大规模的 intruction-finetuning的数据集集合。该集合包含了中文、英文和CoT的instruction数据。同时,我们也维护了一个训练自各种instruction数据集的模型checkpoint集合。
    1. 集成了 多种LLMs并统一了调用接口,可通过超参轻松切换。目前包含 LLaMA, ChatGLM[5]和 Bloom[6],后续将持续加入更多,以供研究者们轻松调用和对比不同LLMs。
    1. 提供了 详尽透彻的实证学习和定性分析,这里的findings可能会对促进未来LLM探索有一定的参考价值。

3. 数据集合 (Data Collection)

收集数据集的相对大小如下图所示:

img

我们参考这里 (@yaodongC), 将收集到的数据集按照以下规则标注Tags:

(Lang)Lingual-Tags:

  • EN: Instruction datasets in English
  • CN: Instruction datasets in Chinese
  • ML: [Multi-lingual] Instruction datasets in multiple languages

(Task)Task-Tags:

  • MT: [Multi-task] Datasets containing multiple tasks
  • TS: [Task-specific] Datasets tailored for specific tasks

(Gen)Generation-method:

  • HG: [Human Generated Dataset] Datasets created by humans
  • SI: [Self-Instruct] Datasets generated using self-instruct methods
  • MIX: [Mixed Dataset] Dataset contains both human and machine generated data
  • COL: [Collection of Dataset] Dataset made from a collection of other datasets

数据统计

数据集 数目 Lang Task Gen 类型 来源 链接
Chain of Thought 74771 EN/CN MT HG CoT相关任务 人在现有数据集上标注CoT 下载
GPT4all 806199 EN MT COL 代码,故事,对话 GPT-3.5-turbo 蒸馏 下载
GPTeacher 29013 EN MT SI 通用,角色扮演,工具指令 GPT-4 & toolformer 下载
Guanaco 534610 ML MT SI 多种nlp任务 text-davinci-003 下载
HC3 37175 EN/CN TS MIX 对话评估 gpt-3.5 或 人工 下载
alpaca 52002 EN MT SI 通用指令 text-davinci-003 下载
Natural Instructions 5040134 ML MT COL 多种nlp任务 人工标注的数据集的收集 下载
belle_cn 1079517 CN TS/MT SI 通用指令,数学推理,对话 text-davunci-003 下载
instinwild 52191 EN/CN MT SI 生成,开放域问答,头脑风暴 text-davunci-003 下载
prosocial dialog 165681 EN TS MIX 对话 GPT-3改写问题,人工回复 下载
finance_en 68912 EN TS COL 金融领域问答 GPT3.5 下载
xP3 78883588 ML MT COL 多种nlp任务 人工标注的数据集的收集 下载
firefly 1649398 CN MT COL 23种nlp任务 收集中文数据集,人工书写指令模板 下载
instruct 888969 EN MT COL GPT4All,Alpaca和开源数据集的增强 使用AllenAI提供的nlp增强工具 下载
Code Alpaca 20022 EN SI SI 代码生成,编辑,优化 text-davinci-003 下载
Alpaca_GPT4 52002 EN/CN MT SI 通用指令 GPT-4 生成的Alpaca数据 下载
webGPT 18994 EN TS MIX 信息检索问答 fine-tuned GPT-3 + 人工评估 下载
dolly 2.0 15015 EN TS HG 公开、封闭式问答、信息抽取、摘要生成、开放式构思、分类以及创意写作七类任务 人工标注 下载
baize 653699 EN MT COL Alpaca和多种问答任务 人工标注的数据集的收集 下载
hh-rlhf 284517 EN TS MIX 对话 RLHF models 下载
OIG(part) 49237 EN MT COL 多种nlp任务 人工标注的数据集的收集和数据增强 下载
GAOKAO 2785 CN MT COL 高考中的多选,填空等问题 人工标注的数据集的收集 下载
camel 760620 EN MT SI 物理生物化学编程,数学,社会等领域的角色扮演对话人工标注的数据集的收集 gpt-3.5-turbo 生成 下载
FLAN-Muffin 1764800 EN MT COL 60种nlp任务 人工标注的数据集的收集 下载
COIG 298428 CN MT COL 考试,翻译,价值观指令数据集搜集,基于知识图谱的反事实对话 自动化工具+人工验证 下载
GPT4Tools 71446 EN MT SI a collection of tool-related instructions gpt-3.5-turbo 下载
ShareChat 1663241 EN MT MIX general instruct 收集ShareGPT 下载
Auto CoT EN 下载
MOSS 1583595 EN/CN SI 下载
ultrachat 28247446 EN 下载
StackLLaMA todo EN

该集合仍在不断更新和扩增中。可在以下链接下载和查看更多数据细节:https://github.com/PhoebusSi/alpaca-CoT/tree/main/data

下载

你可以在这里下载所有我们已经统一格式后的formatted数据。然后,将下载到的文件全部放到data folder。

你可以在这里下载训练自各种类型instruction数据的所有checkponts。然后,在generate.py中的LoRA_Weights设置成下载路径,即可直接运行模型的inference以查看模型效果。

数据格式

我们集合中的所有数据均已被转化成相同的格式,每个样本的格式如下:

[
{"instruction": instruction string,
"input": input string, # (may be empty)
"output": output string}
]

注意,对于CoT数据集,我们首先使用FLAN提供的template将其从原数据转化成Chain-of-Thought的形式,之后再统一成以上格式。格式统一化的脚本可以在这里找到。

4. 多接口统一的开源平台

环境配置

pip install -r requirements.txt

模型微调

为了便于研究者们在LLM上做系统的IFT研究,我们收集了不同类型的instruction数据,集成了多种LLM,并统一了接口,可以轻松定制化想要的搭配:

  • --model_type: 设置想要研究的LLM,目前已支持[llama, chatglm和bloom],其中后两者的中文能力较强,后续将会集成更多的LLMs。
  • --data: 设置用以IFT的数据类型,以灵活特制想要的指令遵循能力,如追求较强的推理能力可设置alpaca-cot,较强的中文能力可设置belle1.5m,较强的coding和故事创作能力可设置gpt4all,金融相关的响应能力可设置finance。
  • --model_name_or_path: 与--model_type相对应,用来加载目标LLM的不同型号权重。如,要加载llama的13b的模型权重时可设置decapoda-research/llama-13b-hf。

单卡

  • for LLaMA
python3 uniform_finetune.py --model_type llama --model_name_or_path decapoda-research/llama-7b-hf \
    --data alpaca-belle-cot --lora_target_modules q_proj v_proj \
    --per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1 
    
  • for ChatGLM Note: for multiple datasets, you can use --data like --data ./data/alpaca.json ./data/finance.json <path2yourdata_1>
python3 uniform_finetune.py   --model_type chatglm --model_name_or_path THUDM/chatglm-6b \
    --data alpaca-belle-cot --lora_target_modules query_key_value \
    --lora_r 32 --lora_alpha 32 --lora_dropout 0.1 --per_gpu_train_batch_size 2 \
    --learning_rate 2e-5 --epochs 1

Note that load_in_8bit is not yet suitable for ChatGLM, so batch_size must be much smaller than others.

  • for BLOOM
python3 uniform_finetune.py   --model_type bloom --model_name_or_path bigscience/bloomz-7b1-mt \
    --data alpaca-belle-cot --lora_target_modules query_key_value \
    --per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1 

Note that you can also pass the local path (where the LLM weights saved) to --model_name_or_path. And the data type --data can be freely set according to your interests.

多卡

  • for LLaMA
python3 -m torch.distributed.launch --nproc_per_node 4  \
    --nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy uniform_finetune.py \
    --model_type llama --model_name_or_path decapoda-research/llama-7b-hf \
    --data alpaca-belle-cot --lora_target_modules q_proj v_proj \
    --per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1 
  • for ChatGLM
python3 -m torch.distributed.launch --nproc_per_node 4  \
    --nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
    uniform_finetune.py   --model_type chatglm --model_name_or_path THUDM/chatglm-6b \
    --data alpaca-belle-cot --lora_target_modules query_key_value \
    --lora_r 32 --lora_alpha 32 --lora_dropout 0.1 --per_gpu_train_batch_size 2 \
    --learning_rate 2e-5 --epochs 1

Note that load_in_8bit is not yet suitable for ChatGLM, so batch_size must be much smaller than others.

  • for BLOOM
python3 -m torch.distributed.launch --nproc_per_node 4  \
    --nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
    uniform_finetune.py   --model_type bloom --model_name_or_path bigscience/bloomz-7b1-mt \
    --data alpaca-belle-cot --lora_target_modules query_key_value \
    --per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1  

Inference

python3 generate.py  --data alpaca-belle-cot --model_type llama

python3 generate.py  --data alpaca-belle-cot --model_type chatglm

python3 generate.py  --data alpaca-belle-cot --model_type bloom

注意,saved-xxx7b 文件夹是保存LoRA weights的路径,而LLaMA的weights则会在脚本执行期间自动从Hugging Face上下载。

生成相关超参设置

top_p=0.9, 
        #适度调大核采样的概率阈值,扩大候选子集,增加生成多样性。
        
temperature=1.0, 
        #之前的温度参数过低会导致生成词的概率分布极化严重,导致生成策略退化成greedy decoding。
        
do_sample=True, 
        #do_sample参数默认关闭,不开启时生成仍保持beam-search解码策略,开启后为beam-search multinomial sampling解码策略。
        
no_repeat_ngram_size=6, 
        #通过配置下一个词重复出现n-gram的概率为0,来保证没有n-gram出现两次,设置过小会抑制合理的重复,影响生成的流畅性,过大会失去作用。
        
repetition_penalty=1.8, 
        #对于之前出现过的词语,在后续预测的过程中,通过引入惩罚因子repetition_penalty降低其出现的概率。

参数合并

python3 merge.py --model_type llama --size 7b --lora_dir xxx --merged_dir yyy

本地使用

python3 server.py --model_type chatglm --lora_dir xxx

批量预测

python3 predict.py --model_type chatglm --data for_dict_data --lora_dir xxx --result_dir yyy

web服务

python3 web.py --model_type chatglm --lora_dir xxx

5. Quantitative Analysis

注意:下图是截止到3.26日收集到的数据集的统计情况,仅作为motivation展示。目前已收集了更多数据集,如金融相关的指令数据集。 data collection statistics 当前的instruction-finetuning数据集合主要包含以下三个部分:

  • alpaca_data_cleaned.json: about 52K English instruction-following training samples.
  • CoT_data.json: 9 CoT datasets involving about 75k samples. (相关的CoT数据集由FLAN[7]发布)
  • belle_data_cn.json: about 0.5M Chinese |instruction-following training samples. (相关的中文instruction数据由BELLE[8]发布)

关于CoT和Chinese Instructions的消融

"w/o CoT" and "w/o CN" 分别表示用在instruction-finetuning期间不采用CoT数据和Chinese instructions。

需要推理能力的问题上的表现 f3

需要遵循中文指令的问题上的表现 f4

在较复杂问题上的表现 f5

In summary, the models finetuned from our complete dataset (English, Chinese, and CoT instruction data) can significantly improve model reasoning and Chinese instruction following abilities.

更多能力展示

ablation-cot

ablation-cot

参考文献

[1]: LLaMA: Open and Efficient Foundation Language Models

[2]: Stanford Alpaca: An Instruction-following LLaMA model

[3]: Self-Instruct: Aligning Language Model with Self Generated Instructions

[4]: LoRA: Low-Rank Adaptation of Large Language Models

[5]: ChatGLM: An Open Bilingual Dialogue Language Model

[6]: BLOOM: A 176B-Parameter Open-Access Multilingual Language Model

[7]: FLAN: Scaling Instruction-Finetuned Language Models

[8]: BELLE: Bloom-Enhanced Large Language model Engine

[9]: GPT4All: Training an Assistant-style Chatbot with Large Scale Data Distillation from GPT-3.5-Turbo

Citation

Please cite the repo if you use the data collection, code, and experimental findings in this repo.

@misc{alpaca-cot,
  author = {Qingyi Si, Tong Wang, Naibin Gu, Rui Liu, Zheng Lin },
  school = {Institute of Information Engineering, Chinese Academy of Sciences, Beijing, China},
  title = {Alpaca-CoT: An Instruction Fine-Tuning Platform with Instruction Data Collection and Unified Large Lnguage Models Interface},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/PhoebusSi/alpaca-CoT}},
}