open-instruct - 训练开放式指令跟随语言模型
文章目录
- 关于 open-instruct
- 设置
- 训练
- 微调
- 偏好调整
- RLVR
- 污染检查
- 开发中
- 仓库结构
- 致谢
关于 open-instruct
- github : https://github.com/allenai/open-instruct
这个仓库是我们对在公共数据集上对流行的预训练语言模型进行指令微调的开放努力。我们发布这个仓库,并将持续更新它,包括:
- 使用最新技术和指令数据集统一格式微调语言模型的代码。
- 在一系列基准上运行标准评估的代码,旨在针对这些语言模型的多种能力。
- 我们在探索中构建的检查点或其他有用的工件。
请参阅我们的第一篇论文
How Far Can Camels Go? Exploring the State of Instruction Tuning on Open Resources
关于这个项目背后的更多想法以及我们的初步发现,请参阅我们的第二篇论文。
Camels in a Changing Climate: Enhancing LM Adaptation with Tulu 2
关于使用Llama-2模型和直接偏好优化的结果。我们仍在开发更多模型。有关涉及PPO和DPO的更近期的结果,请参阅我们的第三篇论文
Unpacking DPO and PPO: Disentangling Best Practices for Learning from Preference Feedback
设置
我们的设置大部分遵循我们的
Dockerfile
, 使用 Python 3.10。注意,Open Instruct 是一个研究代码库,不保证向后兼容性。 我们提供两种安装策略:
- 本地安装:这是推荐安装 Open Instruct 的方式。您可以通过运行以下命令安装依赖项:
pip install --upgrade pip "setuptools<70.0.0" wheel
# TODO, unpin setuptools when this issue in flash attention is resolved
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip install packaging
pip install flash-attn==2.6.3 --no-build-isolation
pip install -r requirements.txt
python -m nltk.downloader punkt
pip install -e .
- Docker 安装: 您也可以使用 Dockerfile 来构建 Docker 镜像。您可以使用以下命令来构建镜像:
docker build --build-arg CUDA=12.1.0 --build-arg TARGET=cudnn8-devel --build-arg DIST=ubuntu20.04 . -t open_instruct_dev
# if you are interally at AI2, you can create an image like this:
beaker image delete $(whoami)/open_instruct_dev
beaker image create open_instruct_dev -n open_instruct_dev -w ai2/$(whoami)
如果您在 AI2 内部,您可以使用我们始终最新的自动构建镜像来启动实验:nathanl/open_instruct_auto
。
训练
设置好环境后,您就可以开始一些实验了。我们在下面提供了一些示例。要了解有关如何重现Tulu 3模型的更多信息,请参阅Tulu 3自述文件。Tulu 1和Tulu 2的说明和文档在Tulu 1和2自述文件中。
微调
您可以使用以下命令开始:
# quick debugging run using 1 GPU
sh scripts/finetune_with_accelerate_config.sh 1 configs/train_configs/sft/mini.yaml
# train an 8B tulu3 model using 8 GPU
sh scripts/finetune_with_accelerate_config.sh 8 configs/train_configs/tulu3/tulu3_sft.yaml
偏好调整
# quick debugging run using 1 GPU
sh scripts/dpo_train_with_accelerate_config.sh 1 configs/train_configs/dpo/mini.yaml
# train an 8B tulu3 model using 8 GPU
sh scripts/finetune_with_accelerate_config.sh 8 configs/train_configs/tulu3/tulu3_dpo_8b.yaml
RLVR
# quick debugging run using 2 GPU (1 for inference, 1 for training)
# here we are using `HuggingFaceTB/SmolLM2-360M-Instruct`; it's prob not
# gonna work, but it's easy to test run and print stuff.
python open_instruct/ppo_vllm_thread_ray_gtrl.py \--dataset_mixer '{"ai2-adapt-dev/gsm8k_math_ifeval_ground_truth_mixed": 1.0}' \--dataset_train_splits train \--dataset_eval_mixer '{"ai2-adapt-dev/gsm8k_math_ground_truth": 1.0}' \--dataset_eval_splits test \--max_token_length 2048 \--max_prompt_token_length 2048 \--response_length 2048 \--model_name_or_path HuggingFaceTB/SmolLM2-360M-Instruct \--reward_model_path HuggingFaceTB/SmolLM2-360M-Instruct \--non_stop_penalty \--stop_token eos \--temperature 1.0 \--ground_truths_key ground_truth \--chat_template tulu \--sft_messages_key messages \--learning_rate 3e-7 \--total_episodes 10000 \--penalty_reward_value -10.0 \--deepspeed_stage 3 \--per_device_train_batch_size 2 \--local_rollout_forward_batch_size 2 \--local_mini_batch_size 32 \--local_rollout_batch_size 32 \--num_epochs 1 \--actor_num_gpus_per_node 1 \--vllm_tensor_parallel_size 1 \--beta 0.05 \--apply_verifiable_reward true \--output_dir output/rlvr_1b \--seed 3 \--num_evals 3 \--save_freq 100 \--reward_model_multiplier 0.0 \--gradient_checkpointing \--with_tracking# train an 8B tulu3 model using 8 GPU (1 for inference, 7 for training)
python open_instruct/ppo_vllm_thread_ray_gtrl.py \--dataset_mixer '{"ai2-adapt-dev/gsm8k_math_ifeval_ground_truth_mixed": 1.0}' \--dataset_train_splits train \--dataset_eval_mixer '{"ai2-adapt-dev/gsm8k_math_ground_truth": 1.0}' \--dataset_eval_splits test \--max_token_length 2048 \--max_prompt_token_length 2048 \--response_length 2048 \--model_name_or_path allenai/Llama-3.1-Tulu-3-8B-DPO \--reward_model_path allenai/Llama-3.1-Tulu-3-8B-RM \--non_stop_penalty \--stop_token eos \--temperature 1.0 \--ground_truths_key ground_truth \--chat_template tulu \--sft_messages_key messages \--learning_rate 3e-7 \--total_episodes 10000000 \--penalty_reward_value -10.0 \--deepspeed_stage 3 \--per_device_train_batch_size 2 \--local_rollout_forward_batch_size 2 \--local_mini_batch_size 32 \--local_rollout_batch_size 32 \--actor_num_gpus_per_node 7 \--vllm_tensor_parallel_size 1 \--beta 0.05 \--apply_verifiable_reward true \--output_dir output/rlvr_8b \--seed 3 \--num_evals 3 \--save_freq 100 \--reward_model_multiplier 0.0 \--gradient_checkpointing \--with_tracking
污染检查
我们发布了用于测量指令调整数据集和评估数据集之间重叠的脚本./decontamination
。有关更多详细信息,请参阅自述文件。
开发中
当向此仓库提交PR时,我们使用以下方式检查open_instruct/
中的核心代码样式:
make style
make quality
仓库结构
├── assets/ <- Images, licenses, etc.
├── configs/
| ├── beaker_configs/ <- AI2 Beaker configs
| ├── ds_configs/ <- DeepSpeed configs
| └── train_configs/ <- Training configs
├── decontamination/ <- Scripts for measuring train-eval overlap
├── eval/ <- Evaluation suite for fine-tuned models
├── human_eval/ <- Human evaluation interface (not maintained)
├── open_instruct/ <- Source code (flat)
├── quantize/ <- Scripts for quantization
├── scripts/ <- Core training and evaluation scripts
└── Dockerfile <- Dockerfile
致谢
Open Instruct 是一个受益于许多开源项目和库的项目。我们特别感谢以下项目:
- HuggingFace Transformers : 我们为微调脚本适配了 Hugging Face 的 Trainer。
- HuggingFace TRL 和 eric-mitchell/direct-preference-optimization : 我们的偏好调整代码改编自 TRL 和 Eric Mitchell 的 DPO 代码。
- OpenAI 的 lm-human-preferences, summarize-from-feedback, 和vwxyzjn/summarize_from_feedback_details : 我们的核心PPO代码是从OpenAI的原始RLHF代码改编而来。
Huang et al (2024)'s reproduction work 关于OpenAI的基于反馈的总结工作的内容。 - OpenRLHF : 我们将 OpenRLHF 的 Ray + vLLM 分布式代码进行了适配,以扩展 PPO RLVR 训练至 70B 规模。
相关文章:

open-instruct - 训练开放式指令跟随语言模型
文章目录 关于 open-instruct设置训练微调偏好调整RLVR 污染检查开发中仓库结构 致谢 关于 open-instruct github : https://github.com/allenai/open-instruct 这个仓库是我们对在公共数据集上对流行的预训练语言模型进行指令微调的开放努力。我们发布这个仓库,并…...

DI依赖注入详解
DI依赖注入 声明了一个成员变量(对象)之后,在该对象上面加上注解AutoWired注解,那么在程序运行时,该对象自动在IOC容器中寻找对应的bean对象,并且将其赋值给成员变量,完成依赖注入。 AutoWire…...

TDengine在debian安装
参考官网文档: 官网安装文档链接 从列表中下载获得 Deb 安装包; TDengine-server-3.3.4.3-Linux-x64.deb (61 M) 进入到安装包所在目录,执行如下的安装命令: sudo dpkg -i TDengine-server-<version>-Linux-x64.debNOTE 当…...

【C#设计模式(15)——命令模式(Command Pattern)】
前言 命令模式的关键通过将请求封装成一个对象,使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令,如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令(抽象类) public abstract class …...
XGBoost库介绍:提升机器学习模型的性能
XGBoost库介绍:提升机器学习模型的性能 在机器学习领域,模型的准确性和训练效率是最为关注的两大因素。特别是在处理大量数据和复杂任务时,传统的机器学习算法可能无法满足高效和准确性的需求。XGBoost(eXtreme Gradient Boostin…...
网络安全构成要素
一、防火墙 组织机构内部的网络与互联网相连时,为了避免域内受到非法访问的威胁,往往会设置防火墙。 使用NAT(NAPT)的情况下,由于限定了可以从外部访问的地址,因此也能起到防火墙的作用。 二、IDS入侵检…...

SpringMVC——SSM整合
SSM整合 创建工程 在pom.xml中导入坐标 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_…...

Windows系统电脑安装TightVNC服务端结合内网穿透实现异地远程桌面
文章目录 前言1. 安装TightVNC服务端2. 局域网VNC远程测试3. Win安装Cpolar工具4. 配置VNC远程地址5. VNC远程桌面连接6. 固定VNC远程地址7. 固定VNC地址测试 前言 在追求高效、便捷的数字化办公与生活的今天,远程桌面服务成为了连接不同地点、不同设备之间的重要桥…...

【ubuntu24.04】GTX4700 配置安装cuda
筛选显卡驱动显卡驱动 NVIDIA-Linux-x86_64-550.135.run 而后重启:最新的是12.6 用于ubuntu24.04 ,但是我的4700的显卡驱动要求12.4 cuda...
Spring Boot 动态数据源切换
背景 随着互联网应用的快速发展,多数据源的需求日益增多。Spring Boot 以其简洁的配置和强大的功能,成为实现动态数据源切换的理想选择。本文将通过具体的配置和代码示例,详细介绍如何在 Spring Boot 应用中实现动态数据源切换,帮…...

MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中
MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MyS…...
大语言模型LLM的微调中 QA 转换的小工具 xlsx2json.py
在训练语言模型中,需要将文件整理成规范的文档,因为文档本身会有很多不规范的地方,为了训练的正确,将文档进行规范处理。代码的功能是读取一个 Excel 文件,将其数据转换为 JSON 格式,并将 JSON 数据写入到一…...

CFD 在生物反应器放大过程中的作用
工艺工程师最常想到的一个问题是“如何将台式反应器扩大到工业规模的反应器?”。这个问题的答案并不简单,也不容易得到。例如,人们误以为工业规模的反应器的性能与台式反应器相同。因此,扩大规模的过程并不是一件容易的事。必须对…...
Axios与FastAPI结合:构建并请求用户增删改查接口
在现代Web开发中,FastAPI以其高性能和简洁的代码结构成为了构建RESTful API的热门选择。而Axios则因其基于Promise的HTTP客户端特性,成为了前端与后端交互的理想工具。本文将介绍FastAPI和Axios的结合使用,通过一个用户增删改查(C…...

美畅物联丨如何通过ffmpeg排查视频问题
在我们日常使用畅联AIoT开放云平台的过程中,摄像机视频无法播放是较为常见的故障。尤其是当碰到摄像机视频不能正常播放的状况时,哪怕重启摄像机,也仍然无法使其恢复正常的工作状态,这着实让人感到头疼。这个时候,可以…...

基于OpenCV视觉库让机械手根据视觉判断物体有无和分类抓取的例程
项目实例,在一个无人封闭的隔绝场景中,根据视觉判断物件的有无,通过机械手 进行物件分类提取,并且返回状态结果; 实际的场景是有一个类似采血的固件支架盘,上面很多采血管,采血管帽颜色可能不同…...

QChart数据可视化
目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …...
转换的艺术:如何在JavaScript中序列化Set为Array、Object及逆向操作
先认识一下Set 概念:存储唯一值的集合,元素只能是值,没有键与之对应。Set中的每个值都是唯一的。 特性: 值的集合,值可以是任何类型。 值的唯一性,每个值只能出现一次。 保持了插入顺序。 不支持通过索引来…...
万能门店小程序管理系统存在前台任意文件上传漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
详解Rust泛型用法
文章目录 基础语法泛型与结构体泛型约束泛型与生命周期泛型与枚举泛型和Vec静态泛型(const 泛型)类型别名默认类型参数Sized Trait与泛型常量函数与泛型泛型的性能 Rust是一种系统编程语言,它拥有强大的泛型支持,泛型是Rust中用于实现代码复用和类型安全…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...