当前位置:   article > 正文

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

instinwild

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

LICENSE torch data model colab

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

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

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

News

  • rocket

    6.25: 新增模型评估代码,包括belle和MMCU。
  • rocket

    5.5: 新建了一个分支tabular_llm来构造可以处理多种表格智能任务的大型语言模型。
  • rocket

    5.4: PEFT中所有parameter-efficient方法(如P-tuning)均被集成进来,可通过超参简单设置。
  • rocket

    5.4: LLM MOSS已被集成进来。
  • 4.21: 已收集和统一格式化数据集 GAOKAOcamelFLAN-MuffinCOIG.
  • 4.15: 已收集和统一格式化数据集 webGPTdollybaizehh-rlhfOIG(part).
  • 4.12: 现在你可以在Google Colab中体验Alpaca-CoT.
  • 4.11: 添加了多轮对话功能,感谢@paulcx
  • 4.9: 已收集和统一格式化数据集 fireflyinstructCode Alpaca 这里.
  • 4.7: 添加了参数合并本地使用批量预测web服务功能,感谢@weberrr
  • 4.4: 已收集和统一格式化数据集FastChatGPTeacher,Guanaco,HC3,prosocial-dialogbelle-chat&belle-mathxP3 和 natural-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

数据统计

数据集数目LangTaskGen类型来源链接
Chain of Thought74771EN/CNMTHGCoT相关任务人在现有数据集上标注CoT下载
GPT4all806199ENMTCOL代码,故事,对话GPT-3.5-turbo 蒸馏下载
GPTeacher29013ENMTSI通用,角色扮演,工具指令GPT-4 & toolformer下载
Guanaco534610MLMTSI多种nlp任务text-davinci-003下载
HC337175EN/CNTSMIX对话评估gpt-3.5 或 人工下载
alpaca52002ENMTSI通用指令text-davinci-003下载
Natural Instructions5040134MLMTCOL多种nlp任务人工标注的数据集的收集下载
belle_cn1079517CNTS/MTSI通用指令,数学推理,对话text-davunci-003下载
instinwild52191EN/CNMTSI生成,开放域问答,头脑风暴text-davunci-003下载
prosocial dialog165681ENTSMIX对话GPT-3改写问题,人工回复下载
finance_en68912ENTSCOL金融领域问答GPT3.5下载
xP378883588MLMTCOL多种nlp任务人工标注的数据集的收集下载
firefly1649398CNMTCOL23种nlp任务收集中文数据集,人工书写指令模板下载
instruct888969ENMTCOLGPT4All,Alpaca和开源数据集的增强使用AllenAI提供的nlp增强工具下载
Code Alpaca20022ENSISI代码生成,编辑,优化text-davinci-003下载
Alpaca_GPT452002EN/CNMTSI通用指令GPT-4 生成的Alpaca数据下载
webGPT18994ENTSMIX信息检索问答fine-tuned GPT-3 + 人工评估下载
dolly 2.015015ENTSHG公开、封闭式问答、信息抽取、摘要生成、开放式构思、分类以及创意写作七类任务人工标注下载
baize653699ENMTCOLAlpaca和多种问答任务人工标注的数据集的收集下载
hh-rlhf284517ENTSMIX对话RLHF models下载
OIG(part)49237ENMTCOL多种nlp任务人工标注的数据集的收集和数据增强下载
GAOKAO2785CNMTCOL高考中的多选,填空等问题人工标注的数据集的收集下载
camel760620ENMTSI物理生物化学编程,数学,社会等领域的角色扮演对话人工标注的数据集的收集gpt-3.5-turbo 生成下载
FLAN-Muffin1764800ENMTCOL60种nlp任务人工标注的数据集的收集下载
COIG298428CNMTCOL考试,翻译,价值观指令数据集搜集,基于知识图谱的反事实对话自动化工具+人工验证下载
GPT4Tools71446ENMTSIa collection of tool-related instructionsgpt-3.5-turbo下载
ShareChat1663241ENMTMIXgeneral instruct收集ShareGPT下载
Auto CoTEN下载
MOSS1583595EN/CNSI下载
ultrachat28247446EN下载
StackLLaMAtodoEN

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

下载

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

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

数据格式

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

  1. [
  2. {"instruction": instruction string,
  3. "input": input string, # (may be empty)
  4. "output": output string}
  5. ]

注意,对于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
  1. python3 uniform_finetune.py --model_type llama --model_name_or_path decapoda-research/llama-7b-hf \
  2. --data alpaca-belle-cot --lora_target_modules q_proj v_proj \
  3. --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>
  1. python3 uniform_finetune.py --model_type chatglm --model_name_or_path THUDM/chatglm-6b \
  2. --data alpaca-belle-cot --lora_target_modules query_key_value \
  3. --lora_r 32 --lora_alpha 32 --lora_dropout 0.1 --per_gpu_train_batch_size 2 \
  4. --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
  1. python3 uniform_finetune.py --model_type bloom --model_name_or_path bigscience/bloomz-7b1-mt \
  2. --data alpaca-belle-cot --lora_target_modules query_key_value \
  3. --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
  1. python3 -m torch.distributed.launch --nproc_per_node 4 \
  2. --nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy uniform_finetune.py \
  3. --model_type llama --model_name_or_path decapoda-research/llama-7b-hf \
  4. --data alpaca-belle-cot --lora_target_modules q_proj v_proj \
  5. --per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1
  • for ChatGLM
  1. python3 -m torch.distributed.launch --nproc_per_node 4 \
  2. --nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
  3. uniform_finetune.py --model_type chatglm --model_name_or_path THUDM/chatglm-6b \
  4. --data alpaca-belle-cot --lora_target_modules query_key_value \
  5. --lora_r 32 --lora_alpha 32 --lora_dropout 0.1 --per_gpu_train_batch_size 2 \
  6. --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
  1. python3 -m torch.distributed.launch --nproc_per_node 4 \
  2. --nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
  3. uniform_finetune.py --model_type bloom --model_name_or_path bigscience/bloomz-7b1-mt \
  4. --data alpaca-belle-cot --lora_target_modules query_key_value \
  5. --per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1

Inference

  1. python3 generate.py --data alpaca-belle-cot --model_type llama
  2. python3 generate.py --data alpaca-belle-cot --model_type chatglm
  3. python3 generate.py --data alpaca-belle-cot --model_type bloom

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

生成相关超参设置

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

  1. @misc{alpaca-cot,
  2. author = {Qingyi Si, Tong Wang, Naibin Gu, Rui Liu, Zheng Lin },
  3. school = {Institute of Information Engineering, Chinese Academy of Sciences, Beijing, China},
  4. title = {Alpaca-CoT: An Instruction Fine-Tuning Platform with Instruction Data Collection and Unified Large Lnguage Models Interface},
  5. year = {2023},
  6. publisher = {GitHub},
  7. journal = {GitHub repository},
  8. howpublished = {\url{https://github.com/PhoebusSi/alpaca-CoT}},
  9. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/387855
推荐阅读
相关标签
  

闽ICP备14008679号