deita

deita

自动数据选择工具助力大语言模型指令调优

Deita是一个开源项目,为大型语言模型的指令调优提供自动数据选择工具。项目包含开源工具包、高质量轻量级数据集和高效训练模型。Deita模型使用仅十分之一的指令调优数据,就能达到其他先进聊天模型的性能水平。项目提供全面评估结果,展示了在多项基准测试中的表现。

Deita指令调优数据选择语言模型开源项目Github

Deita

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/328aeecb-9494-4c40-8a11-9689bbe77f46.png" width="600"> </p> <p align="center"> 🤗 <a href="https://huggingface.co/collections/hkust-nlp/deita-6569c198c174808d94cf5bd4">HF仓库</a>&nbsp;&nbsp;&nbsp; 📄 <a href="https://arxiv.org/abs/2312.15685">论文</a>&nbsp;&nbsp;&nbsp; 📚 <a href="https://huggingface.co/datasets/hkust-nlp/deita-6k-v0">6K数据集</a>&nbsp;&nbsp;&nbsp; 📚 <a href="https://huggingface.co/datasets/hkust-nlp/deita-10k-v0">10K数据集</a> </p>

欢迎来到Deita(Data-Efficient Instruction Tuning for Alignment,数据高效指令微调对齐)项目!

我们将持续更新,敬请关注!

Deita是什么?

Deita是一个开源项目,旨在为大语言模型(LLMs)的指令微调提供自动数据选择

它包括:

  • 用于指令微调自动数据选择的开源工具包
  • Deita数据集:一系列极其轻量级、高质量的对齐SFT数据。我们在首次发布中提供了6k规模和10k规模的数据集
  • Deita模型:一系列通过极其高效的指令微调过程达到与最先进聊天大语言模型相当水平的强大模型。与其他最先进的大语言模型相比,Deita模型只需使用十分之一的指令微调数据即可训练得到

新闻

性能

:bell: 还在好奇少量高质量数据能让大语言模型达到多远吗?

Deita可能为您提供一个答案:

🔦 亮点

模型对齐方式数据规模MT-BenchAlpacaEval(%)
Zephyr-7B-sftSFT200K5.3275.12
$\text{Zephyr-7B-}\beta$SFT + DPO200K SFT + 60K DPO7.3490.60
OpenChat-3.5C-RLFT>> 70K C-RLFT7.8188.51
Starling-7BC-RLFT + APA>> 70K C-RLFT + 183K APA8.0991.99
Tulu-2-13BSFT326K6.7078.90
Tulu-2-13B+DPOSFT + DPO326K SFT + 60K DPO7.0089.50
LLaMA2-13B-ChatSFT + PPO--6.6581.09
WizardLM-13B-v1.2SFT>70K7.0989.17
Vicuna-13B-v1.5SFT>125K6.5778.80
DEITA-7B-v1.0 (6K)SFT6K7.2280.78
DEITA-7B-v1.0-sftSFT10K7.3281.67
DEITA-7B-v1.0SFT + DPO6K SFT + 10K DPO7.5590.06

DEITA模型基于Mistral-7B-v0.1。:fire:

完整评估请参见此表,其中包括Open LLM排行榜以及基于LLaMA基础模型的DEITA模型和与其他数据选择方法的比较。

:chart_with_upwards_trend: 完整评估

<details> <summary>查看完整评估</summary> | 模型 | 对齐方式 | 数据规模 | MT-Bench评分 | AlpacaEval(%) | OpenLLM (平均) | |------------------------------------------------|-----------|------------|----------|---------------|----------------| | **专有模型** | | | | | | | GPT-4-Turbo | ? | -- | 9.32 | 97.70 | -- | | GPT-4 | SFT + PPO | -- | 8.99 | 95.03 | -- | | Claude-2 | SFT + PPO | -- | 8.06 | 91.36 | -- | | GPT-3.5-turbo | SFT + PPO | -- | 7.94 | 89.37 | -- | | **基于LLaMA-1-13B的开源模型** | | | | | | | LIMA | SFT | 1K SFT | 4.29 | 41.98 | 59.82 | | WizardLM-13B | SFT | 70K SFT | 6.35 | 75.31 | 58.96 | | Vicuna-13B-v1.3 | SFT | 125K SFT | 6.39 | 82.11 | 60.01 | | 随机 | SFT | 10K SFT | 6.03 | 71.52 | 60.14 | | DEITA-LLaMA1-13B-v1.0-sft | SFT | 10K SFT | 6.60 | 78.01 | 64.27 | | **基于LLaMA-2-13B的开源模型** | | | | | | | Tulu-2-13B | SFT | 326K SFT | 6.70 | 78.90 | -- | | Tulu-2-13B+DPO | SFT + DPO | 326K SFT + 60K DPO | 7.00 | 89.50 | -- | | LLaMA2-13B-Chat | SFT + PPO | -- | 6.65 | 81.09 | -- | | WizardLM-13B-v1.2 | SFT | >70K SFT | 7.09 | 89.17 | -- | | Vicuna-13B-v1.5 | SFT | 125K SFT | 6.57 | 78.80 | 61.63 | | 随机 | SFT | 10K SFT | 5.78 | 65.19 | 61.32 | | DEITA-LLaMA2-13B-v1.0-sft | SFT | 10K SFT | 6.79 | 81.09 | 62.71 | | **基于Mistral-7B的开源模型** | | | | | | | Mistral-7B-Instruct-v0.1 | -- | -- | 6.84 | 69.65 | 60.45 | | Zephyr-7B-sft | SFT | 200K SFT | 5.32 | 75.12 | 60.93 | | $\text{Zephyr-7B-}\beta$ | SFT + DPO | 200K SFT + 60K DPO | 7.34 | 90.60 | 66.36 | | OpenChat-3.5 | C-RLFT | >> 70K C-RLFT | 7.81 | 88.51 | -- | | Starling-7B | C-RLFT + APA | >>70K C-RLFT + 183K APA | 8.09 | 91.99 | -- | | 随机 | SFT | 10K SFT | 5.89 | 56.90 | 61.72 | | DEITA-7B-v1.0-sft (6K) | SFT | 6K SFT | 7.22 | 80.78 | 64.94 | | DEITA-7B-v1.0-sft (10K) | SFT | 10K SFT | 7.32 | 81.67 | 64.00 | | DEITA-7B-v1.0 | SFT + DPO | 6K SFT + 10K DPO | 7.55 | 90.06 | 69.86 |

:rocket: Deita资源

资源链接许可证
Deita数据集
deita-6k-v0:hugs: HF仓库MIT许可证
deita-10k-v0:hugs: HF仓库MIT许可证
deita-complexity-scorer-data:hugs: HF仓库MIT许可证
deita-quality-scorer-data:hugs: HF仓库MIT许可证
deita-redundant-pool (100K):hugs: HF仓库MIT许可证
deita-sota-pool (300K):hugs: HF仓库MIT许可证
评分器
deita-complexity-scorer:hugs: HF仓库LLaMA许可证
deita-quality-scorer:hugs: HF仓库LLaMA许可证
Deita模型
DEITA-7B-v1.0-sft:hugs: HF仓库Apache-2.0
DEITA-7B-v1.0:hugs: HF仓库Apache-2.0
DEITA-LLaMA2-13B-v1.0-sft:hugs: HF仓库LLaMA 2许可证
DEITA-LLaMA1-13B-v1.0-sft:hugs: HF仓库LLaMA许可证

:running_man: 如何开始?

安装

git clone https://github.com/hkust-nlp/deita.git cd deita pip install -e .

数据样本评分

如果你想评估单个样本回复的质量,可以按以下步骤操作:

from deita.selection.scorer import Llama_Scorer model_name_or_path = "hkust-nlp/deita-quality-scorer" scorer = Llama_Scorer(model_name_or_path) # 示例输入 input_text = "描述带有有用提示的UI的词" # 示例输入 output_text = "用户友好或直观的UI" # 示例输出 quality_score = scorer.infer_quality(input_text, output_text) print(quality_score) # 2.0230105920381902

Deita 还支持使用 VLLM 进行更快的推理。如果你想使用 VLLM 进行推理,

pip install vllm

并在初始化评分器时设置 is_vllm = True

scorer = Llama_Scorer(model_name_or_path, is_vllm = True)

要评估数据样本的其他维度,请参考 examples/scoring

Deita 管道

你可以使用 deita 管道通过一行代码和配置对数据集执行各种操作。

  • 数据集评分
from deita.pipeline import Pipeline pipeline = Pipeline("score_pipeline", data_path = args.data_path, # sharegpt 格式的 json 文件 scorer = args.scorer, # [mistral, llama] scorer_name_or_path = args.scorer_name_or_path, # 评分器名称或路径,例如 hkust-nlp/deita-complexity-scorer is_vllm = args.is_vllm, # 使用 vllm 启动 [True, False] score_type = args.score_type, # [complexity, quality] output_path = args.output_path) # 输出路径(json 格式) pipeline.run()
  • 获取嵌入

我们使用 Huggingface Accelerate 来提高效率:

from deita.pipeline import Pipeline embed_pipeline = Pipeline("embed_pipeline", data_path = args.data_path, # sharegpt 格式的 json 文件 output_path = args.output_path, # 输出路径(pickle 格式) model_name_or_path = args.model_name_or_path, # 模型名称或路径,例如 mistralai/Mistral-7B-v0.1 max_length = args.max_length, use_flash_attention = args.use_flash_attention, batch_size_per_device = args.batch_size_per_device, conv_template = args.conv_template, only_answer = args.only_answer, random_shuffle = args.random_shuffle, bfloat16 = True ) embed_pipeline.run()
CUDA_VISIBLE_DEVICES=$GPUIDX accelerate launch \ --mixed_precision bf16 \ --num_processes $NUMPROCESS \ --num_machines 1 \ examples/pipelines/embed_datasets.py \ --use_flash_attention true \ --data_path $DATAPATH \ --output_path $OUTPUTPATH \ --batch_size_per_device $BSZ
  • 先评分,再多样性感知选择
from deita.pipeline import Pipeline filter_pipeline = Pipeline("filter_pipeline", data_path = args.data_path, # sharegpt 格式的 json 文件 other_data_path = args.other_data_path, # 嵌入文件路径(pickle 格式) threshold = args.threshold, # 过滤阈值 默认: 0.9 data_size = args.data_size, # 选择的数据大小 chunk_size = args.chunk_size, # 用于更高效的 GPU 计算 默认: 100000 sort_key = args.sort_key, # 默认: "complexity_scores,quality_scores" output_path = args.output_path, # json 格式输出路径 distance_metric = args.distance_metric, # 默认: cosine embedding_field = args.embedding_field, # 默认: embedding is_compression = args.is_compression, # 默认: False device = args.device # GPU 序号, 默认: 0 ) filter_pipeline.run()

你可以参考 examples/pipelines 获取更多详细信息。文档也将很快推出。

SFT 训练

请参考 examples/train/sft.sh

deepspeed --include localhost:${DEVICES} --master_port 29501 src/deita/alignment/train.py \ --model_name_or_path ${MODELPATH} \ --data_path ${DATAPATH} \ --output_dir ${OUTPUTPATH}/${RUNNAME} \ --num_train_epochs 6 \ --per_device_train_batch_size ${BSZPERDEV} \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps ${GRADACC} \ --eval_steps 50 \ --save_strategy "no" \ --save_steps 100 \ --save_total_limit 10 \ --learning_rate 2e-5 \ --warmup_ratio 0.1 \ --lr_scheduler_type "cosine" \ --logging_steps 1 \ --do_eval False \ --evaluation_strategy "no" \ --model_max_length 2048 \ --lazy_preprocess True \ --conv_template "vicuna_v1.1" \ --mask_user True \ --report_to "wandb" \ --run_name ${RUNNAME} \ --bf16 True \ --deepspeed src/deita/ds_configs/deepspeed_config_zero2_no_offload.json

DPO 训练

请参考 examples/train/dpo.sh

deepspeed --include localhost:${DEVICES} --master_port 29502 src/deita/alignment/dpo_train.py \ --model_name_or_path ${MODELPATH} \ --json_path ${JSONPATH} \ --data_split ${DATASPLIT} \ --output_dir ${OUTPUTPATH}/${RUNNAME} \ --num_train_epochs ${DPOEPOCH} \ --beta 0.1 \ --per_device_train_batch_size ${BSZPERDEV} \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps ${GRADACC} \ --save_global_steps False \ --eval_steps 50 \ --save_strategy "no" \ --save_steps 500 \ --save_total_limit 1 \ --learning_rate 5e-7 \ --warmup_ratio 0.1 \ --lr_scheduler_type "linear" \ --logging_steps 1 \ --do_eval False \ --evaluation_strategy "no" \ --model_max_length 2048 \ --conv_template "vicuna_v1.1" \ --report_to "wandb" \ --run_name ${RUNNAME} \ --bf16 True \ --gradient_checkpointing True \ --deepspeed src/deita/ds_configs/stage3_no_offloading_accelerate.json

评估

:muscle: 更多内容?

这是 Deita 项目的预览版本。我们将继续更新,包括

  • 发布带有高效实现的数据选择管道
  • 更多自动数据选择策略
  • 支持命令行界面
  • 在线演示

引用

如果你发现这个项目的内容对你有帮助,请按以下方式引用我们的论文:

@inproceedings{
liu2024what,
title={What Makes Good Data for Alignment? A Comprehensive Study of Automatic Data Selection in Instruction Tuning},
author={Wei Liu and Weihao Zeng and Keqing He and Yong Jiang and Junxian He},
booktitle={The Twelfth International Conference on Learning Representations},
year={2024},
url={https://openreview.net/forum?id=BTKAeLqLMw}
}

致谢

对于训练代码,我们使用了 fastchat 的代码模板。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多