🏆Entraînement d'optimisation des préférences - DPO, ORPO & KTO

Apprenez l'alignement des préférences par ajustement avec DPO, GRPO, ORPO ou KTO via Unsloth, suivez les étapes ci-dessous :

DPO (Direct Preference Optimization), ORPO (Odds Ratio Preference Optimization), PPO, KTO Reward Modelling fonctionnent tous avec Unsloth.

Nous disposons de notebooks Google Colab pour reproduire GRPO, ORPO, DPO Zephyr, KTO et SimPO :

Nous sommes également dans la documentation officielle de 🤗Hugging Face ! Nous sommes sur le docs SFTarrow-up-right et le docs DPOarrow-up-right.

Code DPO

python
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0" # Optionnel : définir l'ID du périphérique GPU

from unsloth import FastLanguageModel, PatchDPOTrainer
from transformers import TrainingArguments,Trainer,DataCollatorForSeq2Seq
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,
)

# Effectuer le patching du modèle et ajouter des poids LoRA rapides
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, # Prend en charge n'importe quelle valeur, mais = 0 est optimisé
    bias = "none",    # Prend en charge n'importe quelle valeur, mais = "none" est optimisé
    # [NOUVEAU] "unsloth" utilise 30 % de VRAM en moins, permet des tailles de batch 2x plus grandes !
    use_gradient_checkpointing = "unsloth", # True or "unsloth" pour des contextes très longs
    random_state = 3407,
    max_seq_length = max_seq_length,
)

dpo_trainer = DPOTrainer(
    trainer = Trainer(
    ref_model = None,
    train_dataset = dataset,
        per_device_train_batch_size = 4,
        gradient_accumulation_steps = 8,
        warmup_ratio = 0.1,
        num_train_epochs = 3,
        learning_rate = 2e-4,
        fp16 = not is_bfloat16_supported(),
        bf16 = is_bfloat16_supported(),
        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()

Mis à jour

Ce contenu vous a-t-il été utile ?