🏆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 ?

