Project Icon

open-instruct

开源指令微调大语言模型的完整工具集

open-instruct是一个致力于指令微调预训练语言模型的开源项目。它提供了基于最新技术和公开数据集的模型微调代码,以及多项基准测试的评估工具。项目发布了包括Tülu系列在内的多个微调模型检查点。open-instruct支持全参数微调、LoRA和QLoRA等高效方法,并提供完整的训练和评估脚本。该工具集为研究人员和开发者提供了探索指令调优大语言模型的全面解决方案。

训练开放指令跟随语言模型

本仓库是一项开放的努力,旨在使用公开可用的数据集对流行的预训练语言模型进行指令微调。我们发布此仓库并将持续更新以下内容:

  1. 使用最新技术和统一格式的指令数据集对语言模型进行微调的代码。
  2. 在一系列基准测试上运行标准评估的代码,针对这些语言模型的不同能力。
  3. 我们在探索过程中构建的检查点或其他有用的人工制品。

请参阅我们的第一篇论文《骆驼能走多远?探索开放资源上的指令调优现状》,了解更多关于这个项目背后的思考和我们的初步发现。请参阅我们的第二篇论文《变化气候中的骆驼:用Tulu 2增强语言模型适应性》,了解使用Llama-2模型和直接偏好优化的结果。我们仍在研究更多模型。关于最近涉及PPO和DPO的结果,请参阅我们的第三篇论文《拆解DPO和PPO:解开偏好反馈学习的最佳实践》。

Tülu (一种混合骆驼)代表我们通过在强大的混合数据集上进行全面微调而构建的一系列LLaMa模型。

注意: Open Instruct的早期版本使用了固定版本的Transformers来复现Tulu 1/2的结果。如果这是你的目标,请参考此提交或更早版本

新闻

  • [2024-07-01] 我们发布了拆解DPO和PPO:解开偏好反馈学习的最佳实践,并大幅更新了我们的代码库以支持新模型和软件包版本。
  • [2023-11-27] 我们发布了变化气候中的骆驼:用Tulu 2增强语言模型适应性。在这里查看我们的模型。我们添加了一个DPO微调脚本用于复现我们的结果。
  • [2023-09-26] 我们转而使用官方的alpaca-eval库来运行AlpacaFarm评估,但使用重新生成的更长参考输出。这将改变我们在论文中报告的数字。我们将尽快更新论文。
  • [2023-09-25] 在评估中支持使用vLLM,将评估速度提高了10倍。
  • [2023-09-17] 支持LoRAQLoRA微调。更多详情请参见这里
  • [2023-08-18] 增加了对ToxiGen/TrutufulQA评估的支持。查看我们的scripts/eval/了解运行示例。
  • [2023-08-08] 支持了几个新的指令数据集,包括LIMA / WizardLM / Open-Orca。详情请参见准备脚本。性能尚未评估。
  • [2023-08-06] 通过升级transformers和许多其他依赖项的版本,支持了LLaMa 2微调和FlashAttention-2。
  • [2023-06-29] 为我们发布的模型添加了许可信息
  • [2023-06-09] 在HuggingFace上发布了Tülu(在强大的混合数据集上全面微调的一系列LLaMa模型)和许多其他检查点[链接]
  • [2023-06-09] 初次发布代码库,包含我们arxiv论文的训练和评估代码。

设置

安装过程轻量,假设两种安装策略之一。 首先,在裸环境中安装(无Cuda镜像)。

安装前,如果不在已安装NVCC的Docker容器中,你应该运行:

conda install cuda-nvcc=<ver> -c nvidia

然后,从源代码安装torch==2.3.0

要运行我们微调模型的训练、评估或推理,你需要通过运行以下命令安装所需的包(在安装pytorch之后):

pip install -r requirements.txt

注意: Open Instruct的早期版本使用了固定版本的Transformers来复现Tulu 2结果。如果这是你的目标,请参考此提交或更早版本

如果你只想要权重差异脚本的依赖项,请使用:

pip install -r weight-diff-requirements.txt

对于第二种安装策略,如果你想在Docker环境中运行实验,你可以使用以下命令创建一个:

docker build --build-arg CUDA=12.1.0 --build-arg TARGET=cudnn8-devel --build-arg DIST=ubuntu20.04 --build-arg REQUIRE=requirements.txt . -t open_instruct

# 如果你在AI2内部,你可以这样创建镜像:
beaker image create open_instruct -n open_instruct -w ai2/$(whoami)

如果你在AI2内部,你可以使用这个预构建的beaker镜像hamishivi/open-instruct-eval(最新版本在此)。对于微调,你可以使用hamishivi/open-instruct-public(最新版本在此)。我会尽量定期更新这些镜像。 OLMo用户注意事项: 由于deepspeed和vLLM之间的版本冲突,我们无法在同一镜像中同时支持OLMo推理和deepspeed(这个问题将在deepspeed允许使用pydantic >= 2后得到解决)。要构建适用于OLMo推理/评估的Docker镜像,请使用以下命令:

docker build --build-arg CUDA=12.1.0 --build-arg TARGET=cudnn8-devel --build-arg DIST=ubuntu20.04 --build-arg REQUIRE=requirements-olmo.txt -f Dockerfile.olmo . -t <你的标签>

对于训练,你可以使用之前的镜像。

开发

向本仓库提交PR时,我们会使用以下命令检查open_instruct/中核心代码的风格:

make style
make quality

仓库结构

├── assets/                     <- 图片、许可证等
├── configs/                    
|     ├── beaker_configs/       <- AI2 Beaker配置
|     ├── ds_configs/           <- DeepSpeed配置
|     └── train_configs/        <- 训练配置
├── eval/                       <- 微调模型的评估套件
├── human_eval/                 <- 人工评估界面(未维护)
├── open_instruct/              <- 源代码(扁平结构)
├── quantize/                   <- 量化脚本
├── scripts/                    <- 核心训练和评估脚本
├── Dockerfile                  <- 主Dockerfile
└── Dockerfile.olmo             <- OLMo用户的Dockerfile(当前存在版本冲突)

训练

数据集准备

我们在探索中包含了一系列具有代表性的指令数据集,并正在不断添加新的数据集。我们将它们统一为相同的对话格式。要下载和准备这些数据集,只需运行以下命令:

./scripts/data/prepare_train_data.sh

请检查这些数据集的许可证和使用限制!

你还可以在HuggingFace上找到处理过的Tulu v1Tulu v2 SFT数据集。请注意,由于生成过程中的随机性和数据可用性的变化,训练数据准备脚本不会精确地重现Tulu v2混合数据集 - 详情请参见这个PR。如果你需要完全相同的训练数据,HuggingFace上的混合数据集就是这个 - 与模型训练时使用的数据完全相同。

模型准备

通常,大多数兼容huggingface的因果语言模型都可以与我们的代码库正常配合使用,可能需要对不同的分词器等进行一些调整。某些模型可能需要额外的请求才能下载。例如,对于LLaMa 1和2,请参考Hugging Face文档以请求访问权限并将其转换为兼容huggingface的格式。

微调

你可以使用以下命令进行指令调优(微调预训练模型以遵循指令):

./scripts/finetune_with_accelerate.sh

确保根据你的模型/数据/设置调整model_name_or_pathtokenizer_nametrain_fileoutput_dir。默认情况下,这使用deepspeedaccelerate

注意: 如果你想复现已发布的Tulu 2模型,可能需要将损失计算切换为--reduce_loss sum。这使用求和而不是平均来进行损失计算,意味着我们在训练时对所有token进行均等加权,更好地模拟了用于训练Tulu 2模型的较大批量大小。有关更多讨论和细节,请参见https://github.com/huggingface/transformers/issues/24725。通常,*如果你需要使用大量梯度累积,使用求和归约可能会得到更好的结果*(包括训练Llama 3模型)。

参数高效微调

我们支持LoRA微调,其中只更新少量参数,从而实现更快、更便宜的训练。为了更高的效率,我们还支持QLoRA微调,其中在4位训练过程中对非训练(基础)模型参数进行量化。这意味着你可以在单个80GB A100上训练70b Llama模型!请参阅相应的论文了解更多详情。

请注意,目前你不能将QLoRA与模型并行性一起运行 - 只支持数据并行训练,因此你不能训练一个不适合单个GPU的模型。对于LoRA,你可以使用deepspeed + zero-3来实现模型并行(目前不支持FSDP)。

请参阅./scripts/finetune_lora_with_accelerate.sh./scripts/finetune_qlora_with_accelerate.sh以获取示例超参数。我们发现较大的秩(例如256)和较高的学习率(例如2e-4)效果最佳。此外,我们发现QLoRA总是能达到与LoRA相似的结果,而LoRA本身有时会落后于全量微调,特别是在长而复杂的生成任务中。然而,对于大多数用途,LoRA训练基本上能达到与全量微调相匹配的性能。我们建议将使用QLoRA学习的模块合并到反量化的模型中(使用--qlora标志运行我们的合并脚本)。

DPO微调

有关如何使用DPO进行全量微调的示例,请参见scripts/dpo_train_with_accelerate.sh。请注意,你至少需要8个80GB的A100才能训练7b大小的模型,对于更大的模型则需要更多计算资源。我们尚未测试过使用此脚本进行多节点训练,但理论上应该可以工作。

我们的脚本还支持使用QLoRA进行PEFT训练。有关示例,请参见scripts/dpo_train_with_qlora.sh。我们尚未使用此方法训练过模型,因此可能需要额外的超参数调整才能达到合理的结果。

发布的检查点

我们的检查点可以在以下位置找到:

权重差异脚本

我们的Tulu V1模型以权重差异的形式发布(由于LLaMa 1许可证的原因)。我们使用了略微修改的Alpaca权重差异脚本,其运行方式相同。 合并模型的步骤:

  1. 下载相关的LLaMa模型并将其转换为Hugging Face格式(参见上文)。
  2. 下载我们的代码库并安装正确的依赖项(参见上文)。
  3. 下载您想要的模型差异文件。
  4. 运行以下命令:
python scripts/weights/weight_diff.py recover --path_raw ${hf_llama_path} --path_tuned ${output_path} --path_diff ${diff_location}

评估

基于基准的评估

我们提供了在一系列标准基准测试上运行Huggingface/OpenAI模型评估的脚本,这些基准测试旨在评估大型语言模型的核心能力。这些基准包括:

我们正在努力将更多有前景的基准测试纳入此列表。请继续关注!

您可以使用以下脚本下载所有评估数据:

./scripts/data/prepare_eval_data.sh

不同数据集的评估脚本放在./scripts下。例如,您可以使用以下命令运行MMLU评估脚本:

./scripts/eval/mmlu.sh

Ai2内部评估

我们提供了一个与beaker集成的脚本,供Ai2内部使用。例如,要运行所有tulu 3评估并轻松上传:

python scripts/submit_eval_jobs.py \
      --model_name <模型名称> \
      --location <beaker id> \
      --is_tuned --workspace tulu-3-results \
      --preemptible \
      --use_hf_tokenizer_template \
      --beaker_image nathanl/open_instruct_olmo_auto \
      --upload_to_hf allenai/tulu-3-evals \
      --run_oe_eval_experiments

将location替换为您的beaker ID,将model name替换为您的模型名称(注意这将影响实验命名,所以请使其独特且易记!)。对于HF模型,请在model_name参数中使用hf-<model-name>格式的名称,location则提供HF路径(例如meta-llama/Meta-Llama-3-8B-Instruct)。请注意,这假设您的模型具有有效的HF标记器聊天模板。

要使此脚本正常工作,您必须将以下存储库克隆到open-instruct存储库的顶级目录。

人工评估

我们在./human_eval文件夹中发布了我们的人工评估界面和收集的注释。更多详细信息请参阅相应的README

许可

此代码库根据LICENSE中给出的Apache 2.0许可证授权。

我们为发布的V1模型使用的许可证(连同基础模型许可证)可以在assets/model_licenses/tulu_license.txt中找到 - 只需将<MODELNAME>替换为实际的模型名称(即HuggingFace上的名称)。

V2模型根据低风险AI2 ImpACT许可证授权。更多详情请参见此处

引用

如果您使用了此存储库或我们的模型,请引用我们的工作:

@misc{wang2023far,
   title={How Far Can Camels Go? Exploring the State of Instruction Tuning on Open Resources}, 
   author={Yizhong Wang and Hamish Ivison and Pradeep Dasigi and Jack Hessel and Tushar Khot and Khyathi Raghavi Chandu and David Wadden and Kelsey MacMillan and Noah A. Smith and Iz Beltagy and Hannaneh Hajishirzi},
   year={2023},
   eprint={2306.04751},
   archivePrefix={arXiv},
   primaryClass={cs.CL}
}
@misc{ivison2023camels,
      title={Camels in a Changing Climate: Enhancing LM Adaptation with Tulu 2}, 
      author={Hamish Ivison and Yizhong Wang and Valentina Pyatkin and Nathan Lambert and Matthew Peters and Pradeep Dasigi and Joel Jang and David Wadden and Noah A. Smith and Iz Beltagy and Hannaneh Hajishirzi},
      year={2023},
      eprint={2311.10702},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}
@misc{ivison2024unpacking,
      title={Unpacking DPO and PPO: Disentangling Best Practices for Learning from Preference Feedback}, 
      author={Hamish Ivison and Yizhong Wang and Jiacheng Liu and Zeqiu Wu and Valentina Pyatkin and Nathan Lambert and Noah A. Smith and Yejin Choi and Hannaneh Hajishirzi},
      year={2024},
      eprint={2406.09279},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号