🏆Optimisation des préférences - DPO, ORPO & KTO

Apprenez l'alignement des préférences via l'affinage 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 dans le docs SFTarrow-up-right et le docs DPOarrow-up-right.

Code DPO

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

from unsloth import FastLanguageModel, PatchDPOTrainer
from unsloth import is_bfloat16_supported
PatchDPOTrainer()
import torch
from trl import DPOTrainer, DPOConfig  # Changé depuis TrainingArguments

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 ou "unsloth" pour des contextes très longs
    random_state = 3407,
    max_seq_length = max_seq_length,
)

dpo_trainer = DPOTrainer(
    model = model,
    ref_model = None,
    args = DPOConfig( # Utiliser DPOConfig
        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()

Mis à jour

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