作业二:奖励建模与直接偏好对齐
本次作业重点关注基于偏好数据集的对齐方法。具体包括 奖励建模(Reward Modeling) 和 直接偏好对齐微调(Direct Preference Optimization, DPO)。
提交内容包括完整代码和实验报告。注意,如果在作业中遇到问题,先尝试自己解决或和同学讨论。环境配置可以参考代码库中README的介绍。自己实在无法解决,请在align-anything仓库中提issue/disscussion询问(详细流程会在后文介绍)。
本次作业提供了120%的得分点,上限为100%,你只需在报告中呈现在完成情况即可踩点得分。在这些作业的基础上,鼓励自行探索,如果你能有一些创新的想法、观察、改进,可以在报告中写清楚并高亮出来,可以考虑加分。
本次作业有一定工作量,建议尽早开始做。
0. align-anything部署(40%)
预估时间:2小时。
这部分内容为完成本次作业所需的前置工作,包括代码部署、模型下载和数据下载三个部分,它们是参与大模型项目开发所需要的必备能力,熟悉这些流程将为你后续基于开源框架开发大模型提供便利。
实验材料一览
模型:PKU-Alignment/Beaver-0.5B-Instruct
数据:PKU-Alignment/PKU-SafeRLHF-single-dimension
代码:PKU-Alignment/align-anything
本作业的代码仓库经历过2次补丁更新,强烈建议同学们使用谷歌云盘下载代码仓库,而不是直接用服务器上的已有代码。
PS: 如果你不想在课程服务器上完成作业,请从以下地址将代码下载至你的计算设备上:
如果你在本系作业的GPU集群上发生GPU相关报错,请执行:
nvidia-smi
如果你发现:
Failed to initialize NVML: Unknown Error
请在备份好数据(基于你初次登陆服务器以后的改动),然后私信助教Jiayi,帮忙重启服务器。
0.0 最简部署指南
- 在你熟悉的编译器软件,如VS Code中,配置助教提供的ssh远程连接。
- 在 VS Code 中,安装 Remote - SSH 和 Jupyter 插件。
- 点击 VS Code 左侧的 Remote Explorer 选项卡,点击配置或添加按钮,效果基本相同。
配置实例:
Host homework-2
HostName www.example.com # 请将www.example.com替换为你的服务器地址
User coder # 请将coder替换为你的用户名
Port 30316 # 请将30316替换为你的端口号
IdentityFile ~/.ssh/id_rsa # 请将id_rsa替换为你的公钥文件名
- 随后点击远程资源管理器,点击homework-2建立连接,操作平台选择Linux,在确保公钥正确的情况下,即可连接远程服务器。
参考教程:https://server.51cto.com/article/684146.html
- 除VS Code外,你也可以使用命令行终端连接服务器,示例:
ssh -i ~/.ssh/id_rsa [email protected] -p 30316
登录上服务器后,进入工作目录下,执行setup.sh
cd /home/align-anything
bash setup.sh
随后,安装align-anything,即可完成部署
cd align-anything
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install -e .
【以下内容(0.1至0.2)为扩展阅读材料,仅供参考,不需要同学们完成】
0.1 代码部署指南
- 使用你的个人邮箱创建github账号,github地址为:https://github.com
- 点击PKU-Alignment/align-anything进入项目主页
- 点击网页右上角的Fork按钮
- 点击Create fork
将你fork完成的仓库克隆到服务器,随后,根据PKU-Alignment/align-anything主页中提供的安装教程完成安装。
关于GitHub的建议操作可以参考GitHub教程。
0.2 模型下载指南
Huggig Face是目前最被广泛使用的大模型开源社区。本次作业涉及的模型与数据集均已被上传至该平台。在完成后续操作前,请注册一个Hugging Face账号,并在个人设置页面获取hf_token,形如:hf_xxxxxxxxx。
注意,Hugging Face只会显示一次hf_token,请在生成hf_token后及时保存。
- huggingface-cli登陆
完成代码部署后,在虚拟环境激活的前提下,在命令行执行:
huggingface-cli login
随后终端会提示你输入hf_token,请将先前保存的内容粘贴至终端。
- huggingface-cli下载模型
在命令行执行:
huggingface-cli download --resume-download PKU-Alignment/Beaver-0.5B-Instruct --local-dir LOCAL_DIR
请在LOCAL_DIR参数处指定你希望模型保存的路径,例如/home/user/Beaver-0.5B-Instruct
0.3 数据集下载指南
与下载模型类似,下载数据集的命令为:
huggingface-cli download --repo-type dataset --resume-download PKU-Alignment/PKU-SafeRLHF-single-dimension --local-dir LOCAL_DIR --local-dir-use-symlinks False
关于网络问题,没办法使用HuggingFace,可以参考HF-Mirror设置。
1. 奖励模型实现(40%)
- 预估时间:5小时。
- 训练所需时间:2小时
- 显存占用:不超过20GB
作业目的
- 熟悉大模型微调框架的部署;
- 熟悉大语言模型奖励建模的作用,原理;
- 使用给定偏好数据集完成奖励模型的训练;
- 在提供的验证集上进行评测,并基于验证集表现进行参数调优;
算力要求
- 该部分作业需要在GPU上运行。
学习资料
以下是一些可以参考的资料:
- Training language models to follow instructions with human feedback
- Scaling Laws for Reward Model Overoptimization
- PKU-SafeRLHF: Towards Multi-Level Safety Alignment for LLMs with Human Preference
1.1 部署align-anything,训练奖励模型(30%)
1.1.1 偏好数据集键值转换(10%)
大语言模型对齐研究往往需要研究不同偏好数据集,而不同的偏好数据集往往包含不同的键值名称,因此需要完成偏好数据集的键值转换。例如,本实验使用的PKU-SafeRLHF偏好数据集的键值名称为:
{
"prompt": "...",
"reponse_0": "...",
"reponse_1": "...",
"better_response_id": "..."
}
而align-anything在进行奖励建模时,需要的键值名称为:
{
"better_text": "...",
"worse_text": "...",
}
align-anything提供了一套名为template的机制,位于align-anything/configs/template.py,可以完成偏好数据集的键值转换。请根据上述信息,实现一个名为HOMEWORK的template,并基于该template完成偏好数据集的键值转换。
1.1.2 训练奖励模型(10%)
基于上述实现好的template,使用align-anything完成奖励模型训练。
训练的脚本位于align-anything/scripts/rm.sh,而奖励模型训练的超参数位于align-anything/configs/train/text_to_text/rm.yaml。你需要在脚本中指定好初始模型路径、数据集路径以及输出路径参数。
随后,运行如下命令完成奖励模型训练:
cd align-anything/scripts
bash rm.sh