自动数据选择工具助力大语言模型指令调优
Deita是一个开源项目,为大型语言模型的指令调优提供自动数据选择工具。项目包含开源工具包、高质量轻量级数据集和高效训练模型。Deita模型使用仅十分之一的指令调优数据,就能达到其他先进聊天模型的性能水平。项目提供全面评估结果,展示了在多项基准测试中的表现。
欢迎来到Deita(Data-Efficient Instruction Tuning for Alignment,数据高效指令微调对齐)项目!
我们将持续更新,敬请关注!
Deita是一个开源项目,旨在为大语言模型(LLMs)的指令微调提供自动数据选择。
它包括:
:bell: 还在好奇少量高质量数据能让大语言模型达到多远吗?
Deita可能为您提供一个答案:
🔦 亮点
模型 | 对齐方式 | 数据规模 | MT-Bench | AlpacaEval(%) |
---|---|---|---|---|
Zephyr-7B-sft | SFT | 200K | 5.32 | 75.12 |
$\text{Zephyr-7B-}\beta$ | SFT + DPO | 200K SFT + 60K DPO | 7.34 | 90.60 |
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 |
Tulu-2-13B | SFT | 326K | 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 | 7.09 | 89.17 |
Vicuna-13B-v1.5 | SFT | >125K | 6.57 | 78.80 |
DEITA-7B-v1.0 (6K) | SFT | 6K | 7.22 | 80.78 |
DEITA-7B-v1.0-sft | SFT | 10K | 7.32 | 81.67 |
DEITA-7B-v1.0 | SFT + DPO | 6K SFT + 10K DPO | 7.55 | 90.06 |
DEITA模型基于Mistral-7B-v0.1。:fire:
完整评估请参见此表,其中包括Open LLM排行榜以及基于LLaMA基础模型的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许可证 |
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 管道通过一行代码和配置对数据集执行各种操作。
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
获取更多详细信息。文档也将很快推出。
请参考 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
请参考 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
这是 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 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各 类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。