Loading

LLMs Fine-tuning 学习笔记(一):trl+peft

1 基本信息

From:Fine-tuning 20B LLMs with RLHF on a 24GB consumer GPU (huggingface.co)

Codes:trl/examples/sentiment/scripts/gpt-neox-20b_peft at main · lvwerra/trl · GitHub

相关工具:

使用RLHF训练LLM的三个基本步骤:

  1. 构建一个由prompt和respond组成的数据集,用这个数据集来微调LLM
  2. 收集第一步中训好的LLM对各prompt的不同回复,对同一个prompt的不同回复内容按质量好坏进行排序,排序后的数据将构成新的数据集用在第三步中
  3. 使用强化学习算法(比如PPO)根据第二步得到的数据集对第一步得到的LLM进行RLHF微调

可选的基础模型(截至March 9, 2023):

关于模型和GPU显存之间的关系

  • 建议基础模型参数量大于100亿,这类模型全精度工作一般需要40G以上显存
  • 在GPU上以全精度(FP32)加载模型,每10亿参数需要消耗 4GB显存,以半精度(FP32)加载模型需要的显存是全精度的一半

关于模型/数据并行及分布式训练:

对RLHF的理解:

  • 在RLHF中,Actor Model(生成模型)需要Instruct Tuning来学习如何follow指令,而Reward model将学习人类的偏好,对Actor Model的输出进行打分。因此,可以把Reward Model理解为一个针对Actor Model输出结果的分类器。

对PPO的理解:

  • Overview of the PPO training setup in TRL:

  • The active model is the model being trained, and a copy of it is periodically made as the reference model. When the policy changes, the reference model is used as a baseline to evaluate whether the changes made by the active model are good or bad.

在单GPU中完成RLHF的关键技术要素:adapters 和 8bit matrix multiplication

2 实现步骤

第一步:以8-bit精度加载预训练模型

第二步:使用peft在预训练模型中增加一个可训练的Adapter

  • 这样我们在微调模型时只需要动Adapter中的参数即可,不需要调整整个Active模型的参数:

第三步:使用添加了Adapter的模型来做PPO,实现RLHF

  • peft提供了便捷的API ,使我们可以随时启用或禁用模型中额外添加的Adapter。禁用Adapter时就是Reference Model,启用Adapter时就是Active Model:

3 代码分析

这个坑等后面有空再填。。。

posted @ 2023-05-18 20:51  云野Winfield  阅读(1152)  评论(0编辑  收藏  举报