For the complete documentation index, see llms.txt. This page is also available as Markdown.

🏆Entraînement de l'optimisation des préférences - DPO, ORPO et KTO

Découvrez le fine-tuning d'alignement des préférences avec DPO, GRPO, ORPO ou KTO via Unsloth, suivez les étapes ci-dessous :

DPO (Direct Preference Optimization), ORPO (Odds Ratio Preference Optimization), PPO et la modélisation de récompense KTO fonctionnent tous avec Unsloth.

Nous avons des notebooks Google Colab pour reproduire GRPO, ORPO, DPO Zephyr, KTO et SimPO :

Nous sommes aussi dans les docs officielles de 🤗Hugging Face ! Nous sommes dans les docs SFT et les docs DPO.

Code DPO

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0" # Définition facultative de l'ID du périphérique GPU

from unsloth import FastLanguageModel, PatchDPOTrainer
from unsloth import is_bfloat16_supported
PatchDPOTrainer()
import torch
from trl import DPOTrainer, DPOConfig  # Modifié à partir de 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 patch 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 lot 2x plus grandes !
    use_gradient_checkpointing = "unsloth", # True ou "unsloth" pour un contexte très long
    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 ?