「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
huggingface/trl SFTTrainer
Instruction Tuningは、言語モデルに 命令(Instruction)とその応答(Response)を学習させることで、指示に従う能力を高める手法
text = f"以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい\n\n### 指示: \n{example['instruction'][i]} \n\n### 応答: \n{example['output'][i]}<|endoftext|>"text = f"Please answer the question based on the given context. \n\n### question\n{example['question'][i]}\n\n ### context\n{example['context'][i]}\n\n### answer\n{example['answer'][i]}<|endoftext|>"print(tokenizer.eos_token)
#'<|endoftext|>'
def formatting_prompts_func(example):
output_texts = []
for i in range(len(example['instruction'])):
text = f"以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい\n\n### 指示:\n{example['instruction'][i]}\n\n### 応答:\n{example['output'][i]}<|endoftext|>"
output_texts.append(text)
return output_textsresponse_template = "### 応答:\n" # "### answer\n"
instruction_template = "### 指示:\n" # "### question\n"
from trl import DataCollatorForCompletionOnlyLM # response_templateは必須指定 response_template = "### 応答:\n" collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
from transformers import TrainingArguments
from trl import SFTTrainer
# SFTTrainerはTrainingArgumentsを使用することができる。
# 指定しない場合、TrainingArgumentsのデフォルトが指定される。
args = TrainingArguments(
output_dir='./output',
num_train_epochs=2,
gradient_accumulation_steps=8,
per_device_train_batch_size=8,
save_strategy="no",
logging_steps=20,
lr_scheduler_type="constant",
save_total_limit=1,
fp16=True,
)
# data_collatorが指定されていない場合、以下のようにDataCollatorForLanguageModelingがmlm=Falseで使われる。
# つまり通常のCausal LMを学習することになる。
# if data_collator is None:
# data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
# packing=False(default)ではdataset_text_fieldかformatting_funcを指定する必要あり
trainer = SFTTrainer(
model,
args=args,
train_dataset=dolly_train_dataset,
formatting_func=formatting_prompts_func,
max_seq_length=1024,
data_collator=collator,
)
trainer.train() trainer.save_model()
The AI community building the future.