赞
踩
你知道吗?现在只用几行代码就能在自己的数据上训练所有Llama-2模型!
而且甚至可以在单个A100 GPU上使用70亿参数的模型,这要归功于4bit和PEFT的魔力!
通过PPO微调语言模型大致包括三个步骤:
生成(Rollout):语言模型根据查询(query)生成一个响应或连续文本,查询可能是一个句子的开头。
评估(Evaluation):使用一个函数、模型、人工反馈或它们的组合来对查询和生成的响应进行评估。重要的是,该过程应为每个查询/响应对产生一个标量值。
优化(Optimization):这是最复杂的部分。在优化步骤中,使用查询和生成的响应对来计算序列中每个令牌的对数概率。这是通过已经训练过的模型和一个参考模型来完成的,参考模型通常是微调之前的预训练模型。两个模型输出之间的KL散度被用作额外的奖励信号,以确保生成的响应不会偏离参考语言模型太远。然后使用PPO来训练主要的语言模型。
这个过程在下面的示意图中说明:
安装:
要通过pip安装Python库:
pip install trl
如果你想从源代码运行库中的示例,还需要安装一些额外的库。首先,你需要克隆该库的代码仓库,然后使用pip安装它。
git clone https://github.com/lvwerra/trl.gitcd trl/pip install .
如果你希望开发TRL(指上文提到的名为"trl"的Python库),可以使用可编辑模式进行安装
pip install -e .
如何使用:
SFTTrainer
以下是如何使用库中的SFTTrainer的基本示例。SFTTrainer是transformers Trainer的轻量级封装,可以轻松地在自定义数据集上微调语言模型或适配器。
# imports
from datasets import load_dataset
from trl import SFTTrainer
# get datasetdataset = load_dataset("imdb", split="train")
# get trainer
trainer = SFTTrainer(
"facebook/opt-350m",
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=512,)
# train
trainer.train()
RewardTrainer
以下是如何使用库中的RewardTrainer的基本示例。
# imports
from transformers import AutoModelForSequenceClassification, AutoTokenizerfrom trl import RewardTrainer
# load model and dataset - dataset needs to be in a specific formatmodel = AutoModelForSequenceClassification.from_pretrained("gpt2")tokenizer = AutoTokenizer.from_pretrained("gpt2")
...
# load trainer
trainer = RewardTrainer(
model=model, t
okenizer=tokenizer,
train_dataset=dataset,)
# train
trainer.train()
PPOTrainer
以下是如何使用库中的PPOTrainer的基本示例。根据查询,语言模型创建一个响应,然后对该响应进行评估。评估可以由人类参与,也可以是另一个模型的输出。
# importsi
mport torch
from transformers import AutoTokenizerf
rom trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead, create_reference_model
from trl.core import respond_to_batch
# get models
model = AutoModelForCausalLMWithValueHead.from_pretrained('gpt2')
model_ref = create_reference_model(model)
tokenizer = AutoTokenizer.from_pretrained('gpt2')
# initialize trainer
ppo_config = PPOConfig(
batch_size=1,)
# encode a queryquery_txt = "This morning I went to the "
query_tensor = tokenizer.encode(query_txt, return_tensors="pt")
# get model response
response_tensor = respond_to_batch(model, query_tensor)
# create a ppo trainer
ppo_trainer = PPOTrainer(ppo_config, model, model_ref, tokenizer)
# define a reward for response
# (this could be any reward such as human feedback or output from another model)reward = [torch.tensor(1.0)]
# train model for one step with ppotrain_stats = ppo_t
rainer.step([query_tensor[0]], [response_tensor[0]], reward)
高级示例:IMDB情感分类
要了解详细的示例,请查看项目examples/scripts/sentiment_tuning.py中的示例Python脚本。下面是在优化之前和之后,从语言模型中提取的几个示例:GitHub项目地址:https://github.com/lvwerra/trl
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。