🏆嗜好最適化トレーニング - DPO、ORPO & KTO

Unsloth を通じて DPO、GRPO、ORPO、または KTO による嗜好整合のファインチューニングについて学び、以下の手順に従ってください:

DPO(Direct Preference Optimization)、ORPO(Odds Ratio Preference Optimization)、PPO、KTO報酬モデリングはすべてUnslothで動作します。

GRPO、ORPO、DPO Zephyr、KTO、SimPOを再現するためのGoogle Colabノートブックを用意しています:

また、🤗Hugging Faceの公式ドキュメントにも掲載されています!私たちは SFTドキュメントarrow-up-rightDPOドキュメントarrow-up-right.

DPOコード

python
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0" # オプション:GPUデバイスIDを設定

from unsloth import FastLanguageModel, PatchDPOTrainer
from unsloth import is_bfloat16_supported
PatchDPOTrainer()
import torch
from transformers import TrainingArguments
from trl import DPOTrainer

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/zephyr-sft-bnb-4bit",
    max_seq_length = max_seq_length,
    dtype = None,
    load_in_4bit = True,
)

# モデルパッチ適用と高速LoRA重みの追加を行う
model = FastLanguageModel.get_peft_model(
    model,
    r = 64,
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 64,
    lora_dropout = 0, # 任意をサポートしますが = 0 が最適化されています
    bias = "none",    # 任意をサポートしますが = "none" が最適化されています
    # [新] 「unsloth」はVRAMを30%削減し、2倍のバッチサイズに対応します!
    use_gradient_checkpointing = "unsloth", # 非常に長いコンテキストには True または "unsloth"
    random_state = 3407,
    max_seq_length = max_seq_length,
)

dpo_trainer = DPOTrainer(
    model = model,
    ref_model = None,
    args = TrainingArguments(
        per_device_train_batch_size = 4,
        gradient_accumulation_steps = 8,
        warmup_ratio = 0.1,
        num_train_epochs = 3,
        fp16 = not is_bfloat16_supported(),
        bf16 = is_bfloat16_supported(),
        logging_steps = 1,
        optim = "adamw_8bit",
        seed = 42,
        output_dir = "outputs",
    ),
    beta = 0.1,
    train_dataset = YOUR_DATASET_HERE,
    # eval_dataset = YOUR_DATASET_HERE,
    tokenizer = tokenizer,
    max_length = 1024,
    max_prompt_length = 512,
)
dpo_trainer.train()

最終更新

役に立ちましたか?