TRL documentation

RLOO Eğiticisi

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

RLOO Eğiticisi

model badge

Genel Bakış

TRL, Arash Ahmadian, Chris Cremer, Matthias Gallé, Marzieh Fadaee, Julia Kreutzer, Ahmet Üstün ve Sara Hooker tarafından yazılan Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs makalesinde anlatıldığı üzere, dil modellerinin eğitimi için RLOO Trainer'ı destekler.

Makalenin özeti aşağıdaki gibidir:

İnsan Geri Bildiriminden Pekiştirmeli Öğrenme (RLHF) biçimindeki yapay zeka hizalama, yüksek performanslı büyük dil modelleri için giderek daha kritik bir bileşen olarak ele alınmaktadır. Yakın tarihli literatür, Yakınsak Politika Optimizasyonu'nu (PPO) RLHF'nin RL kısmı için standart yöntem olarak konumlandırmıştır. Ancak bu yöntem, hem yüksek hesaplama maliyeti hem de hassas hiperparametre ayarı gerektirmektedir. PPO'nun geliştirilmesine yol açan çoğu motivasyonel ilkenin RLHF bağlamında pratik bir endişe olmadığını öne sürüyor ve performansı koruyan hatta artıran, hesaplama açısından daha az maliyetli bir yöntem savunuyoruz. İnsan tercihlerinden hizalama formülasyonunu RL bağlamında yeniden inceliyoruz. Sadelik bir kılavuz ilke olarak benimsenerek, PPO'nun birçok bileşeninin RLHF bağlamında gereksiz olduğunu ve çok daha basit REINFORCE tarzı optimizasyon varyantlarının hem PPO'yu hem de DPO ve RAFT gibi yeni önerilen “RL'siz” yöntemleri geride bıraktığını gösteriyoruz. Çalışmamız, LLM hizalama özelliklerine özenli bir uyarlamanın, düşük maliyetle çevrimiçi RL optimizasyonundan faydalanmayı mümkün kıldığını göstermektedir.

Bu eğitim sonrası yöntemi Costa Huang tarafından katkıda bulunmuş ve daha sonra Shirin Yamani tarafından yeniden yapılandırılmıştır.

Hızlı başlangıç

Bu örnek, RLOO yöntemiyle bir modelin nasıl eğitileceğini göstermektedir. DeepMath-103K veri setindeki istemlerle bir Qwen 0.5B Instruct modelini eğitiyoruz. Veri setindeki verilere buradan bakabilirsiniz:

Aşağıda modeli eğitmek için kullanılan betik yer almaktadır. accuracy_reward, pip install trl[math_verify] komutuyla kurabileceğiniz math-verify gerektirir.

# train_rloo.py
from datasets import load_dataset
from trl import RLOOTrainer
from trl.rewards import accuracy_reward

dataset = load_dataset("trl-lib/DeepMath-103K", split="train")

trainer = RLOOTrainer(
    model="Qwen/Qwen2-0.5B-Instruct",
    reward_funcs=accuracy_reward,
    train_dataset=dataset,
)
trainer.train()

Aşağıdaki komutu kullanarak betiği çalıştırın:

accelerate launch train_rloo.py

RLOO yönteminin derinlemesine incelenmesi

RLOO, eğitim sırasında eğitilmiş modelin kendisi tarafından üretilen verileri kullanarak iteratif olarak iyileşen bir çevrimiçi öğrenme algoritmasıdır. RLOO hedefinin arkasındaki sezgi, modelin referans politikaya yakın kalmasını sağlarken üretilen tamamlamaların avantajını en üst düzeye çıkarmaktır. RLOO'nun nasıl çalıştığını anlamak için dört ana adıma ayrılabilir: tamamlamaların üretilmesi, avantajın hesaplanması, KL ayrımının tahmin edilmesi ve kaybın hesaplanması.

RLOO

Tamamlamalar oluşturma

Her eğitim adımında, bir istem (prompt) grubu örnekleriz ve her istem için bir dizi G G tamamlama (completion) üretiriz (şu şekilde gösterilir: oi o_i ).

Ödülü hesaplama

RLOO'da ödül, iki bileşenden oluşur: ödül modeli (veya ödül fonksiyonu) tarafından sağlanan ödül ve politikanın sabit bir referans politikadan çok fazla sapmasını caydıran bir KL cezası

  1. Her bir G G üretilen dizi için oi=(oi,1,…,oi,T) o_i = (o_{i,1}, \dots, o_{i,T}) bir sorguya bağlı olarak q q , bir ödül modeli kullanarak skaler bir ödül hesaplarız R(oi,q) R(o_i, q) .
  2. Aynı anda, mevcut politika πθ \pi_\theta ve sabit referans politika πref \pi_{\text{ref}} arasındaki KL sapmasını dizin üzerinde tahmin ederiz. Dizi oi o_i için KL tahmini şudur: DKL ⁣[πθ∥πref]=∑t=1Tlog⁡πθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t). \mathbb{D}_{\mathrm{KL}}\!\left[\pi_\theta\|\pi_{\mathrm{ref}}\right] = \sum_{t=1}^T \log \frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\mathrm{ref}}(o_{i,t} \mid q, o_{i,<t})}.

Dizilere atanan nihai ödül oi o_i şu şekildedir: ri=R(oi,q)−β DKL ⁣[πθ∥πref], r_i = R(o_i, q) - \beta \, \mathbb{D}_{\mathrm{KL}}\!\left[\pi_\theta \|\pi_{\mathrm{ref}}\right],

burada β>0 \beta > 0 KL cezasının gücünü kontrol eder.

Saf çevrimiçi bir ayar (num_iterations = 1, varsayılan) durumunda, veriler mevcut politika tarafından üretilir. Bu durumda, KL cezası doğrudan mevcut politika kullanılarak hesaplanır.

Daha genel bir ayar (ör. batch başına birden fazla gradyan adımı) durumunda, veriler bunun yerine daha önceki bir anlık görüntü tarafından üretilir πold \pi_{\text{old}} . Cezanın örneklem dağılımıyla tutarlı kalmasını sağlamak için KL, bu politika ile ilgili olarak tanımlanır:

DKL ⁣[πold ∥ πref]. \mathbb{D}_{\mathrm{KL}}\!\left[\pi_{\text{old}} \,\|\, \pi_{\text{ref}}\right].

Eşdeğer olarak, örneklenen bir dizi için o o , Monte Carlo tahmini şudur:

DKL ⁣[πold∥πref]=∑t=1Tlog⁡πold(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t). \mathbb{D}_{\mathrm{KL}}\!\left[\pi_{\text{old}} \|\pi_{\mathrm{ref}}\right] = \sum_{t=1}^T \log \frac{\pi_{\text{old}}(o_{i,t} \mid q, o_{i,<t})}{\pi_{\mathrm{ref}}(o_{i,t} \mid q, o_{i,<t})}.

Avantajın hesaplanması

Her tamamlama için ödül hesaplandıktan sonra, mevcut örnek hariç tutularak aynı batch'teki diğer tüm örneklerin ortalama ödülü olarak bir taban (baseline) hesaplanır. Bu taban, politika gradyanı tahmininin varyansını azaltmak için kullanılır. Her tamamlama için avantaj (advantage), kendi ödülü ile bu leave-one-out tabanı arasındaki fark olarak elde edilir.

Resmi olarak, G tamamlama içeren bir parti için tamamlama taban değeri şudur:bi=1G−1∑j≠irj b_i = \frac{1}{G-1} \sum_{j \neq i} r_j

ve ardından her tamamlama için avantaj, ödülü ile taban değer arasındaki fark olarak hesaplanır: Ai=ri−bi A_i = r_i - b_i

Kaybın hesaplanması

REINFORCE kaybı şu şekilde tanımlanır: LRLOO(θ)=−1G∑i=1GA^i log⁡πθ(oi∣q) \mathcal{L}_{\text{RLOO}}(\theta) = - \frac{1}{G} \sum_{i=1}^G \hat{A}_i \, \log \pi_\theta(o_i \mid q)

Uygulamada, aynı batch üzerinde birden fazla gradyan adımı yapmak, eylemleri mevcut parametrelere göre fiilen off-policy hale getirir. Bunu düzeltmek için önem örneklemesi oranını (importance sampling ratio) tanıtırız. Örnekleme ile gradyan adımları arasında politika değiştiğinde aşırı büyük güncellemeleri önlemek için bu oranı kırpma (clip) işlemine tabi tutarız: LRLOO(θ)=−1G∑i=1Gmin⁡(πθ(oi∣q)πθold(oi∣q)A^i, clip(πθ(oi∣q)πθold(oi∣q),1−ϵ,1+ϵ)A^i) \mathcal{L}_{\text{RLOO}}(\theta) = - \frac{1}{G} \sum_{i=1}^G \min \left( \frac{\pi_\theta(o_i \mid q)}{\pi_{\theta_\text{old}}(o_i \mid q)} \hat{A}_i, \, \text{clip}\left(\frac{\pi_\theta(o_i \mid q)}{\pi_{\theta_\text{old}}(o_i \mid q)}, 1-\epsilon, 1+\epsilon\right) \hat{A}_i \right)

Tamamen çevrimiçi, tek adımlı bir ayarlamada (varsayılan), πθ(oi∣q)πθold(oi∣q)=1 \frac{\pi_\theta(o_i \mid q)}{\pi_{\theta_\text{old}}(o_i \mid q)} = 1 ve bu, standart REINFORCE'a indirgenir.

GRPO'dan farklı olarak RLOO, KL terimi üzerinden gradyan geri yayılımı yapmaz. Burada KL tamamen ödül şekillendirme için kullanılır: no_grad altında hesaplanır ve skaler ödülün içine katılır ri r_i , bu da koparılmış avantaja dönüşür A^i \hat{A}_i .

Başka bir deyişle, politika içine giren tek yol, önem oranı terimidir πθ(oi∣q)πθold(oi∣q) \frac{\pi_\theta(o_i \mid q)}{\pi_{\theta_\text{old}}(o_i \mid q)} , ve KL terimi politika içine geri yayılmaz.

Buna karşın, GRPO hedefine, mevcut politika ile anlık olarak hesaplanan açık ve türevlenebilir bir KL terimi ekler πθ \pi_\theta , bu sayede gradyanı hem oran teriminden hem de KL cezasından geçer.

Kaydedilen metrikler

Eğitim ve değerlendirme sırasında aşağıdaki metrikleri kaydederiz:

  • num_tokens: Hem istemler hem de tamamlamalar dahil olmak üzere şu ana kadar işlenen toplam token sayısı.
  • step_time: Eğitim adımının (üretim dahil) ortalama süresi (saniye cinsinden).
  • completions/mean_length: Üretilen tamamlamaların ortalama uzunluğu.
  • completions/min_length: Üretilen tamamlamaların minimum uzunluğu.
  • completions/max_length: Üretilen tamamlamaların maksimum uzunluğu.
  • completions/mean_terminated_length: EOS ile sonlanan üretilen tamamlamaların ortalama uzunluğu.
  • completions/min_terminated_length: EOS ile sonlanan üretilen tamamlamaların en küçük uzunluğu.
  • completions/max_terminated_length: EOS ile sonlanan üretilen tamamlamaların maksimum uzunluğu.
  • completions/clipped_ratio: Kesilen (kırpılan) tamamlamaların oranı.
  • rewards/{reward_func_name}/mean: Belirli bir ödül fonksiyonundan gelen ortalama ödül.
  • rewards/{reward_func_name}/std: Belirli bir ödül fonksiyonundan gelen ödülün standart sapması.
  • reward: Fonksiyonlar üzerinden ödüllerin toplanmasının ardından (ağırlıkları reward_weights ile) elde edilen genel ortalama ödül.
  • reward_std: Fonksiyonlar üzerinden toplanan ödül standart sapması (reward_weights ile ağırlıklandırılmış), tam batch üzerinde hesaplanır.
  • frac_reward_zero_std: Üretim grubundaki örneklerin, ödül standart sapması sıfır olan (bu, o istem için çeşitliliğin az olduğunu, yani tüm yanıtların doğru veya yanlış olduğunu gösterir) oranı.
  • entropy: Üretilen tamamlamalar boyunca token tahminlerinin ortalama entropisi. (mask_truncated_completions=True ise, maskelenmiş dizilerin tokenları hariç tutulur.)
  • aux_loss: Bir Mixture-of-Experts modelinin, router_aux_loss_coef ile ölçeklenip kayba eklenmeden önceki yük dengeleme yardımcı kaybı. Sadece model bir MoE modeli olduğunda ve router_aux_loss_coef sıfır olmadığında kaydedilir.
  • kl: Model ile referans model arasındaki ortalama KL sapması, üretilen tamamlamalar üzerinden hesaplanır. Yalnızca beta sıfırdan farklıysa kaydedilir.
  • clip_ratio/region_mean: RLOO hedefinin güven bölgesi içinde kalacak şekilde kırpıldığı dizi olasılıklarının oranı: clip(ri(θ),1−ϵlow,1+ϵhigh) ,ri(θ)=πθ(oi∣q)πθold(oi∣q) \text{clip}\left( r_{i}(\theta), 1 - \epsilon_\mathrm{low}, 1 + \epsilon_\mathrm{high} \right)\,, \quad r_{i}(\theta) = \frac{\pi_\theta(o_{i} \mid q)}{\pi_{\theta_{\text{old}}}(o_{i} \mid q)} . Daha yüksek bir değer, daha fazla örneğin kırpıldığı anlamına gelir ve bu da politikanın πθ\pi_\theta ne kadar değişebileceğini sınırlar.
  • clip_ratio/low_mean: Güven bölgesinin alt sınırında kırpılan dizi olasılıklarının ortalama oranı: ri,t(θ)<1−ϵlowr_{i,t}(\theta) < 1 - \epsilon_\mathrm{low}.
  • clip_ratio/low_min: Güven bölgesinin alt sınırındaki tamamlama başına en küçük kırpma göstergesi: ri,t(θ)<1−ϵlowr_{i,t}(\theta) < 1 - \epsilon_\mathrm{low}.
  • clip_ratio/high_mean: Güven bölgesinin üst sınırında kırpılan dizi olasılıklarının ortalama oranı: ri,t(θ)>1+ϵhighr_{i,t}(\theta) > 1 + \epsilon_\mathrm{high}.
  • clip_ratio/high_max: Güven bölgesinin üst sınırındaki tamamlama başına en büyük kırpma göstergesi: ri,t(θ)>1+ϵhighr_{i,t}(\theta) > 1 + \epsilon_\mathrm{high}.

Özelleştirme

vLLM destekli üretim ile eğitimi hızlandırın

Eğitim sırasında çevrimiçi yöntemler kullanıldığında üretim genellikle ana darboğazdır. Üretimi hızlandırmak için LLM'ler için yüksek verimli, düşük gecikmeli bir çıkarım motoru olan vLLM'yi kullanabilirsiniz. Bunu etkinleştirmek için önce paketi şu şekilde yükleyin

pip install trl[vllm]

Eğitim sırasında vLLM kullanımı için iki yöntemi destekliyoruz: sunucu modu ve colocate modu.

Seçenek 1: Colocate modu

Bu modda, vLLM eğitimci sürecinin içinde çalışır ve eğitim modeliyle GPU belleğini paylaşır. Bu, ayrı bir sunucu başlatılmasını önler ve GPU kullanımını artırabilir, ancak eğitim GPU'larında bellek çakışmasına yol açabilir. Bu, varsayılan moddur.

from trl import RLOOConfig

training_args = RLOOConfig(
    ...,
    use_vllm=True,  # vllm_mode="colocate" by default
)

Seçenek 2: Sunucu modu

Bu modda, vLLM ayrı bir süreçte (ve ayrı GPU'lar kullanarak) çalışır ve eğitimciyle HTTP üzerinden iletişim kurar. Bu, çıkarım için ayrılmış GPU'larınız varsa idealdir.

  1. vLLM sunucusunu başlatın:

    VLLM_SERVER_DEV_MODE=1 vllm serve <model_name> \
        --weight-transfer-config '{"backend": "nccl"}' \
        --logprobs-mode processed_logprobs \
        --max-logprobs -1
  2. Eğitim betiğinizde sunucu modunu etkinleştirin:

    from trl import RLOOConfig
    
    training_args = RLOOConfig(
        ...,
        use_vllm=True,
        vllm_mode="server",
    )

Sunucunun eğitimciyle farklı GPU'lar kullandığından emin olun, aksi takdirde NCCL hatalarıyla karşılaşabilirsiniz. Kullanılacak GPU'ları CUDA_VISIBLE_DEVICES ortam değişkeniyle belirleyebilirsiniz.

Model boyutuna ve eğitim için genel GPU bellek gereksinimlerine bağlı olarak, düşük kullanım oranı veya bellek taşması hatalarını önlemek için RLOOConfig içindeki vllm_gpu_memory_utilization parametresini ayarlamanız gerekebilir.

Model yapılandırmanıza ve deney ayarlarınıza dayalı olarak önerilen GPU bellek kullanımını tahmin etmenize yardımcı olmak için bir HF Space sunuyoruz. vllm_gpu_memory_utilization önerisini almak için aşağıdaki gibi kullanmanız yeterlidir:

Önerilen değer ortamınızda işe yaramıyorsa, istikrarı sağlamak için önerilen değere küçük bir pay (ör. +0.05 veya +0.1) eklemenizi öneririz.

Hâlâ bellek dışı (out-of-memory) hataları alıyorsanız vllm_enable_sleep_mode değerini True olarak ayarlayın; bu durumda vllm parametreleri ve önbellek, optimizasyon adımı sırasında dışa aktarılır. Daha fazla bilgi için vLLM Sleep Mode ile Bellek Kullanımını Azaltma başlıklı bölümü inceleyin.

Varsayılan olarak RLOO, vLLM için MASTER_ADDR=localhost ve MASTER_PORT=12345 değerlerini kullanır, ancak bu değerleri ortam değişkenlerini buna göre ayarlayarak geçersiz kılabilirsiniz.

Daha fazla bilgi için vLLM ile eğitimi hızlandırma başlıklı bölümü inceleyin.

RLOO ölçeğinde: birden fazla düğümde 70B+ Model eğitimi

Qwen2.5-72B gibi büyük modelleri eğitirken, eğitimin birden çok GPU ve düğüm arasında verimli ve ölçeklenebilir olması için birkaç temel optimizasyona ihtiyaç duyarsınız. Bunlar şunları içerir:

  • DeepSpeed ZeRO Stage 3: ZeRO, model durumlarını (ağırlıklar, gradyanlar, optimizör durumları) birden fazla GPU ve CPU arasında dağıtmak için veri paralelliğinden yararlanarak her cihazdaki bellek ve hesaplama gereksinimlerini azaltır. Büyük modeller tek bir GPU'ya sığmadığından, bu tür modellerin eğitimi için ZeRO Stage 3 kullanılması gerekir. Daha fazla ayrıntı için DeepSpeed Integration bölümüne bakın.
  • Accelerate: Accelerate, birden fazla GPU ve düğüm arasında dağıtık eğitimi basitleştiren bir kütüphanedir. Dağıtık eğitimi başlatmak için basit bir API sunar ve veri paralelliği, gradyan biriktirme ve dağıtık veri yükleme gibi dağıtık eğitimin karmaşıklıklarını yönetir. Daha fazla ayrıntı için Eğitimi Dağıtma bölümüne bakın.
  • vLLM: Üretim hızını artırmak için vLLM'in nasıl kullanılacağını görmek için önceki bölüme bakın.

Aşağıda, RLOO ile 70B parametreli bir modelin birden fazla düğümde eğitilmesi için örnek bir SLURM betiği yer almaktadır. Bu betik, modeli 4 düğümde eğitir ve vLLM destekli üretim için 5. düğümü kullanır.

#!/bin/bash
#SBATCH --nodes=5
#SBATCH --gres=gpu:8

# Get the list of allocated nodes
NODELIST=($(scontrol show hostnames $SLURM_JOB_NODELIST))

# Assign the first 4 nodes for training and the 5th node for vLLM
TRAIN_NODES="${NODELIST[@]:0:4}"  # Nodes 0, 1, 2, 3 for training
VLLM_NODE="${NODELIST[4]}"  # Node 4 for vLLM

# Run training on the first 4 nodes (Group 1)
srun --nodes=4 --ntasks=4 --nodelist="${NODELIST[@]:0:4}" accelerate launch \
     --config_file examples/accelerate_configs/deepspeed_zero3.yaml \
     --num_processes 32 \
     --num_machines 4 \
     --main_process_ip ${NODELIST[0]} \
     --machine_rank $SLURM_PROCID \
     --rdzv_backend c10d \
     train_rloo.py \
     --server_ip $VLLM_NODE &

# Run vLLM server on the 5th node (Group 2)
srun --nodes=1 --ntasks=1 --nodelist="${NODELIST[4]}" env VLLM_SERVER_DEV_MODE=1 vllm serve Qwen/Qwen2.5-72B --tensor-parallel-size 8 \
    --weight-transfer-config '{"backend": "nccl"}' \
    --logprobs-mode processed_logprobs \
    --max-logprobs -1 &

wait
import argparse

from datasets import load_dataset
from trl import RLOOTrainer, RLOOConfig

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--vllm_server_host", type=str, default="", help="The server IP")
    args = parser.parse_args()

    # Example dataset from TLDR
    dataset = load_dataset("trl-lib/tldr", split="train")

    # Dummy reward function: count the number of unique characters in the completions
    def reward_num_unique_chars(completions, **kwargs):
        return [len(set(c)) for c in completions]

    training_args = RLOOConfig(
        output_dir="Qwen2.5-72B-RLOO",
        per_device_train_batch_size=4,
        bf16=True,
        use_vllm=True,
        vllm_mode="server",
        vllm_server_host=args.vllm_server_host.replace("ip-", "").replace("-", "."),  # from ip-X-X-X-X to X.X.X.X
    )

    trainer = RLOOTrainer(model="Qwen/Qwen2.5-72B", args=training_args, reward_funcs=reward_num_unique_chars, train_dataset=dataset)
    trainer.train()

if __name__=="__main__":
    main()

Özel bir ödül fonksiyonu kullanma

RLOOTrainer, yoğun ödül modelleri yerine özel ödül işlevlerinin kullanılmasını destekler. Uyumluluğu sağlamak için ödül işlevinizin aşağıdaki gereksinimleri karşılaması gerekir:

Ödül işlevleri, senkron Python çağrılabilirleri veya asenkron async def koro-rutinleri olabilir. Birden fazla asenkron ödül işlevi sağladığınızda, bunlar eşzamanlı olarak beklenir (asyncio.gather aracılığıyla paralel çalıştırılır) böylece gecikmeleri üst üste gelir.

  1. Girdi argümanları:

    • Fonksiyon aşağıdakileri anahtar kelime argümanları olarak kabul etmelidir:

      • prompts (istemleri içerir),
      • completions (üretilen tamamlamaları içerir),
      • completion_ids (tokenize edilmiş tamamlamaları içerir),
      • trainer_state (TrainerState): Eğiticinin (trainer) mevcut durumu. Bu, eğitim ilerlemesine göre ödülün ayarlandığı müfredat öğrenimi (curriculum learning) gibi dinamik ödül fonksiyonlarını uygulamak için kullanılabilir.
      • log_extra: tamamlamalar tablosuna ek sütunlar eklemek için kullanılabilen log_extra(column: str, values: list) çağrılabilir bir nesne. Örnek 6'ya bakın.
      • log_metric: kl, entropy vb. metriklerin yanı sıra skaler metrikleri grafik olarak günlüğe kaydetmek için kullanılan, çağrılabilir log_metric(name: str, value: float). Örnek 6'ya bakın.
      • Veri setinin sahip olabileceği tüm sütun adları (prompt hariç). Örneğin, veri seti ground_truth adında bir sütun içeriyorsa, fonksiyon ground_truth anahtar kelime argümanı olarak çağrılır.

      Bu gerekliliğe uymak için en kolay yol, fonksiyon imzasında **kwargs kullanmaktır.

    • Veri seti biçimine bağlı olarak girdi değişecektir:

      • standart biçim için prompts ve completions dizeleri listeleri olacaktır.
      • sohbet formatı için prompts ve completions, mesaj sözlüklerinden oluşan listeler olacaktır.
  2. Dönüş değeri: İşlev, birer tamamlamaya karşılık gelen ödülü temsil eden birer ondalık sayıdan oluşan bir liste döndürmelidir.

Örnek 1: Daha uzun tamamlamaları ödüllendirin

Aşağıda, daha uzun tamamlamaları ödüllendiren standart bir biçim için ödül fonksiyonu örneği verilmiştir:

def reward_func(completion_ids, **kwargs):
    """Reward function that assigns higher scores to longer completions (in terms of token count)."""
    return [float(len(ids)) for ids in completion_ids]

Bunu şu şekilde test edebilirsiniz:

>>> prompts = ["The sky is", "The sun is"]  # not used in the reward function, but the trainer will pass it
>>> completions = [" blue.", " in the sky."]  # not used in the reward function, but the trainer will pass it
>>> completion_ids = [[6303, 13], [304, 279, 12884, 13]]
>>> reward_func(prompts=prompts, completions=completions, completion_ids=completion_ids)
[2.0, 4.0]

Örnek 1.1: Daha uzun tamamlamaları ödüllendir (karakter sayısına dayalı)

Önceki örnekle aynı, ancak bu sefer ödül fonksiyonu token sayısı yerine karakter sayısına dayanıyor.

def reward_func(completions, **kwargs):
    """Reward function that assigns higher scores to longer completions (in terms of character count)."""
    return [float(len(completion)) for completion in completions]

Bunu şu şekilde test edebilirsiniz:

>>> prompts = ["The sky is", "The sun is"]
>>> completions = [" blue.", " in the sky."]
>>> completion_ids = [[6303, 13], [304, 279, 12884, 13]]  # not used in the reward function, but the trainer will pass it
>>> reward_func(prompts=prompts, completions=completions, completion_ids=completion_ids)
[6.0, 12.0]

Örnek 2: Belirli bir biçimde tamamlamaları ödüllendirme

Aşağıda, tamamlamanın belirli bir formata sahip olup olmadığını kontrol eden bir ödül fonksiyonu örneği yer almaktadır. Bu örnek, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning makalesinde kullanılan format reward fonksiyonundan ilham alınmıştır. Yapılandırılmış mesajlardan oluşan istem ve tamamlamaların kullanıldığı bir sohbet formatı için tasarlanmıştır.

import re

def format_reward_func(completions, **kwargs):
    """Reward function that checks if the completion has a specific format."""
    pattern = r"^<think>.*?</think><answer>.*?</answer>$"
    completion_contents = [completion[0]["content"] for completion in completions]
    matches = [re.match(pattern, content) for content in completion_contents]
    return [1.0 if match else 0.0 for match in matches]

Bu fonksiyonu şu şekilde test edebilirsiniz:

>>> prompts = [
...     [{"role": "user", "content": "What is the result of (1 + 2) * 4?"}],
...     [{"role": "user", "content": "What is the result of (3 + 1) * 2?"}],
... ]
>>> completions = [
...     [{"role": "assistant", "content": "<think>The sum of 1 and 2 is 3, which we multiply by 4 to get 12.</think><answer>(1 + 2) * 4 = 12</answer>"}],
...     [{"role": "assistant", "content": "The sum of 3 and 1 is 4, which we multiply by 2 to get 8. So (3 + 1) * 2 = 8."}],
... ]
>>> format_reward_func(prompts=prompts, completions=completions)
[1.0, 0.0]

Örnek 3: Referansa dayalı tamamlamaları ödüllendirme

Aşağıda, tamamlamanın doğru olup olmadığını kontrol eden bir ödül fonksiyonu örneği yer almaktadır. Bu örnek, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning makalesinde kullanılan accuracy reward fonksiyonundan ilham alınarak hazırlanmıştır. Bu örnek, veri setinin ground_truth adlı bir sütun içerdiği standard format için tasarlanmıştır.

import re

def reward_func(completions, ground_truth, **kwargs):
    # Regular expression to capture content inside \boxed{}
    matches = [re.search(r"\\boxed\{(.*?)\}", completion) for completion in completions]
    contents = [match.group(1) if match else "" for match in matches]
    # Reward 1 if the content is the same as the ground truth, 0 otherwise
    return [1.0 if c == gt else 0.0 for c, gt in zip(contents, ground_truth)]

Bu fonksiyonu şu şekilde test edebilirsiniz:

>>> prompts = ["Problem: Solve the equation $2x + 3 = 7$. Solution:", "Problem: Solve the equation $3x - 5 = 10$."]
>>> completions = [r" The solution is \boxed{2}.", r" The solution is \boxed{6}."]
>>> ground_truth = ["2", "5"]
>>> reward_func(prompts=prompts, completions=completions, ground_truth=ground_truth)
[1.0, 0.0]

Örnek 4: Çoklu görev ödül işlevleri

Aşağıda, RLOOTrainer ile birden fazla ödül fonksiyonunun kullanımına dair bir örnek yer almaktadır. Bu örnekte, iki görev özel ödül fonksiyonu tanımlanır: math_reward_func ve coding_reward_func. math_reward_func, matematik problemlerini doğruluklarına göre ödüllendirirken, coding_reward_func kodlama problemlerini çözümün çalışıp çalışmadığına göre ödüllendirir.

from datasets import Dataset
from trl import RLOOTrainer

# Define a dataset that contains both math and coding problems
dataset = Dataset.from_list(
    [
        {"prompt": "What is 2+2?", "task": "math"},
        {"prompt": "Write a function that returns the sum of two numbers.", "task": "code"},
        {"prompt": "What is 3*4?", "task": "math"},
        {"prompt": "Write a function that returns the product of two numbers.", "task": "code"},
    ]
)

# Math-specific reward function
def math_reward_func(prompts, completions, task, **kwargs):
    rewards = []
    for prompt, completion, t in zip(prompts, completions, task):
        if t == "math":
            # Calculate math-specific reward
            correct = check_math_solution(prompt, completion)
            reward = 1.0 if correct else -1.0
            rewards.append(reward)
        else:
            # Return None for non-math tasks
            rewards.append(None)
    return rewards

# Coding-specific reward function
def coding_reward_func(prompts, completions, task, **kwargs):
    rewards = []
    for prompt, completion, t in zip(prompts, completions, task):
        if t == "code":
            # Calculate coding-specific reward
            works = test_code_solution(prompt, completion)
            reward = 1.0 if works else -1.0
            rewards.append(reward)
        else:
            # Return None for non-coding tasks
            rewards.append(None)
    return rewards

# Use both task-specific reward functions
trainer = RLOOTrainer(
    model="Qwen/Qwen2-0.5B-Instruct",
    reward_funcs=[math_reward_func, coding_reward_func],
    train_dataset=dataset,
)

trainer.train()

Bu örnekte math_reward_func ve coding_reward_func, hem matematik hem de kodlama problemleri içeren karışık bir veri setiyle çalışacak şekilde tasarlanmıştır. Veri setindeki task sütunu, her probleme hangi ödül fonksiyonunun uygulanacağını belirlemek için kullanılır. Veri setindeki bir örnek için ilgili bir ödül fonksiyonu yoksa, ödül fonksiyonu None döndürür ve RLOOTrainer geçerli fonksiyonlar ve görevlerle devam eder. Bu, RLOOTrainer'ın farklı uygulama alanlarına sahip birden fazla ödül fonksiyonunu işleyebilmesini sağlar.

RLOOTrainer'in, ödül fonksiyonları tarafından döndürülen None ödüllerini yoksayacağını ve yalnızca ilgili fonksiyonlar tarafından döndürülen ödüleri dikkate alacağını unutmayın. Bu, modelin yalnızca ilgili görevler üzerinde eğitilmesini ve ilgili ödül fonksiyonu olmayan görevlerin yoksayılmasını sağlar.

Örnek 5: Asenkron ödül işlevleri

Özel ödül fonksiyonları ayrıca async def koro-rutinleri olarak da tanımlanabilir. Ödülünüz yavaş GÇ'ye (örneğin, uzak bir servise çağrı yapma) bağlıysa bu işe yarar. Birden çok asenkron ödül fonksiyonu geçirdiğinizde RLOOTrainer bunları eşzamanlı olarak çalıştırır ve gecikmeleri üst üste bindirir.

Aşağıda, I/O yoğun bir işlemi simüle eden asenkron bir ödül fonksiyonunun minimal bir örneği yer almaktadır:

import asyncio

async def async_reward_func(prompts, completions, **kwargs):
    # Simulate an I/O-bound call (e.g., HTTP request, database lookup)
    await asyncio.sleep(0.01)
    # Simple toy reward: 1.0 if the completion is non-empty, else 0.0
    return [1.0 if completion else 0.0 for completion in completions]

Örnek 6: Ek sütunlar ve metrikler kaydetme

Aşağıda, tamamlamalar tablosuna ek sütunlar ve skaler metrikleri grafikler olarak kaydeden bir ödül fonksiyonu örneği yer almaktadır.

import re

def reward_func(completions, ground_truth, log_extra=None, log_metric=None, **kwargs):
    extracted = [re.search(r"\\boxed\{(.*?)\}", c) for c in completions]
    extracted = [m.group(1) if m else None for m in extracted]
    rewards = [1.0 if e == gt else 0.0 for e, gt in zip(extracted, ground_truth)]

    if log_extra:
        log_extra("golden_answer", list(ground_truth))
        log_extra("extracted_answer", [e or "[none]" for e in extracted])

    if log_metric:
        log_metric("accuracy", sum(rewards) / len(rewards))

    return rewards

Ödül fonksiyonunu eğitimciye (trainer) iletme

Özel ödül fonksiyonunuzu kullanmak için bunu RLOOTrainer sınıfına aşağıdaki gibi iletin:

from trl import RLOOTrainer

trainer = RLOOTrainer(
    reward_funcs=reward_func,
    ...,
)

Birden fazla ödül fonksiyonunu bir liste olarak iletebilirsiniz; bu liste hem senkron hem de asenkron fonksiyonlar içerebilir:

from trl import RLOOTrainer

trainer = RLOOTrainer(
    reward_funcs=[reward_func, async_reward_func1, async_reward_func2],
    ...,
)

ve ödül, her bir fonksiyondan gelen ödüllerin toplamı olarak veya yapılandırmada reward_weights sağlanırsa ağırlıklı toplam olarak hesaplanır.

RLOOTrainer'in farklı türlerde birden fazla ödül fonksiyonunu desteklediğini unutmayın. Daha fazla ayrıntı için parametre dokümantasyonuna bakın.

Görsel Dil Modellerinin Eğitimi

RLOO, hem metin hem de görüntü içeren çok modlu veri setlerinde Görüntü-Dil Modelleri (VLM) eğitimi destekler.

Desteklenen Modeller

Test edildi:

  • Gemma3 — örn. google/gemma-3-4b-it
  • LLaVA-NeXT — örn. llava-hf/llava-v1.6-mistral-7b-hf
  • Qwen2-VL — örn. Qwen/Qwen2-VL-2B-Instruct
  • Qwen2.5-VL — örn. Qwen/Qwen2.5-VL-3B-Instruct
  • SmolVLM2 — örn. HuggingFaceTB/SmolVLM2-2.2B-Instruct

Tüm VLM'lerle uyumluluk garanti edilmemektedir. Bir modelin desteklenmesi gerektiğini düşünüyorsanız, GitHub'da bir sorun (issue) açmaktan çekinmeyin — ya da daha iyisi, gerekli değişiklikleri içeren bir çekme isteği (pull request) gönderin.

Hızlı Başlangıç

Bir VLM'yi ince ayar yapmak için rloo_vlm.py dosyasını kullanın. lmms-lab/multimodal-open-r1-8k-verified üzerinde eğitim için örnek komut:

accelerate launch \
  --config_file=examples/accelerate_configs/deepspeed_zero3.yaml \
  examples/rloo_visual_math/rloo_visual_math.py \
  --model_name_or_path Qwen/Qwen2.5-VL-3B-Instruct \
  --output_dir rloo-Qwen2.5-VL-3B-Instruct \
  --learning_rate 1e-5 \
  --dtype bfloat16 \
  --max_completion_length 1024 \
  --use_vllm \
  --vllm_mode colocate \
  --use_peft \
  --lora_target_modules "q_proj", "v_proj" \
  --log_completions

Yapılandırma İpuçları

  • Görüntü-dil projeksiyon katmanlarında LoRA kullanın
  • Bellek kullanımını azaltmak için 4-bit kuantizasyonu etkinleştirin
  • VLM'ler bellek yoğun — daha küçük batch boyutlarıyla başlayın
  • Çoğu model vLLM ile uyumludur (server ve colocate modları)

Veri Seti Biçimi

Her eğitim örneği şunları içermelidir:

  • prompt: İşleyicinin sohbet şablonu aracılığıyla biçimlendirilmiş metin
  • image/images: PIL Image veya PIL Image listesi

Trainer, modelin görüntü işleyicisi aracılığıyla görüntüden tensöre dönüşümü otomatik olarak yönetir.

RLOOTrainer

sınıf trl.RLOOTrainer

< >

( model: str | PreTrainedModel | PeftModelreward_funcs: str | transformers.modeling_utils.PreTrainedModel | collections.abc.Callable[..., list[float | None]] | list[str | transformers.modeling_utils.PreTrainedModel | collections.abc.Callable[..., list[float | None]]]args: trl.trainer.rloo_config.RLOOConfig | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | datasets.dataset_dict.DatasetDict | datasets.dataset_dict.IterableDatasetDict | dict[str, datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonereward_processing_classes: transformers.tokenization_utils_base.PreTrainedTokenizerBase | list[transformers.tokenization_utils_base.PreTrainedTokenizerBase] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[typing.Optional[torch.optim.Optimizer], typing.Optional[torch.optim.lr_scheduler.LambdaLR]] = (None, None)quantization_config: BitsAndBytesConfig | None = Nonepeft_config: PeftConfig | None = None )

Parametreler

  • model (str veya PreTrainedModel veya PeftModel) — Eğitilecek model. Şunlardan biri olabilir:
    • Bir dize, huggingface.co üzerindeki bir model deposunda barındırılan ön eğitilmiş bir modelin model kimliği veya save_pretrained kullanılarak kaydedilmiş model ağırlıklarını içeren bir dizin yolu, örneğin './my_model_directory/'. Model, args.model_init_kwargs içindeki anahtar kelime argümanlarıyla, <ModelArchitecture>.from_pretrained (burada <ModelArchitecture> model yapılandırmasından türetilir) kullanılarak yüklenir. dtype, args.model_init_kwargs içinde belirtilmediyse, varsayılan olarak float32 olur. Bu, from_pretrained'den farklıdır; orada (Transformers v5'ten itibaren) dtype model yapılandırmasından çıkarılır.
    • Bir PreTrainedModel nesnesi. Yalnızca nedensel dil modelleri desteklenir.
    • Bir PeftModel nesnesi. Yalnızca nedensel dil modelleri desteklenir.
  • reward_funcs (RewardFunc | list[RewardFunc]) — Ödülleri hesaplamak için kullanılacak ödül işlevleri. Ödülleri hesaplamak için tüm ödül işlevleri, istemler (prompts) ve tamamlamalar (completions) ile çağrılır ve ödüller toplanır. Aşağıdakilerden biri olabilir:
    • Örneğin aşağıdaki gibi tek bir ödül fonksiyonu:

      • Bir dize: huggingface.co üzerindeki bir model deposunda barındırılan ön eğitilmiş bir modelin model kimliği veya save_pretrained kullanılarak kaydedilmiş model ağırlıklarını içeren bir dizin yolu, örneğin './my_model_directory/'. Model, num_labels=1 ve args.model_init_kwargs içindeki anahtar kelime argümanlarıyla from_pretrained kullanılarak yüklenir.

      • Bir PreTrainedModel nesnesi: Yalnızca sıra sınıflandırma modelleri desteklenir.

      • Özel ödül fonksiyonu: Fonksiyona, istemler (prompts) ve üretilen tamamlamalar ile veri setindeki ek sütunlar sağlanır. Bir ödül listesi döndürmelidir. Özel ödül fonksiyonları senkron veya asenkron olabilir ve ödülün ilgili örnekler için geçerli olmadığı durumlarda None döndürebilir. Bu, farklı ödül fonksiyonlarının farklı örnek türlerine uygulandığı çoklu görev eğitiminde faydalıdır. Bir ödül fonksiyonu bir örnek için None döndürdüğünde, o ödül fonksiyonu o örneğin ödül hesabından hariç tutulur. Daha fazla ayrıntı için bkz. Özel bir ödül fonksiyonu kullanma.

        Eğiticinin durumu, ödül fonksiyonuna da iletilir. Eğiticinin durumu, TrainerState sınıfının bir örneğidir ve ödül fonksiyonunun imzasındaki trainer_state argümanına erişilerek kullanılabilir.

    • Ödül fonksiyonlarının bir listesi, her öğe bağımsız olarak yukarıdaki türlerden herhangi biri olabilir. Listede farklı türlerin karıştırılması (ör. bir dize model kimliği ve özel bir ödül fonksiyonu) izin verilir.

  • args (RLOOConfig, isteğe bağlı) — Bu eğitimci için yapılandırma. None ise varsayılan yapılandırma kullanılır.
  • train_dataset (Dataset veya IterableDataset) — Eğitimde kullanılacak veri seti. Şu sütunu içermelidir: "prompt". Veri setindeki ek sütunlar yok sayılır. Örneklerin biçimi şu şekillerden biri olabilir:
    • Standart: Her örnek düz metin içerir.
    • Sohbet: Her örnek yapılandırılmış mesajlar içerir (ör. rol ve içerik).

    train_dataset bir IterableDataset (ör. bir akış veri seti) olduğunda, uzunluğu çıkarılamadığı ve eğitim döngüsünü sınırlamak ile öğrenme oranı zamanlayıcısını yapılandırmak için toplam eğitim adım sayısının gerekli olması nedeniyle, max_steps eğitim argümanlarında ayarlanmalıdır.

  • eval_dataset (Dataset, IterableDataset, DatasetDict, IterableDatasetDict veya dict[str, Dataset | IterableDataset]) — Değerlendirme için kullanılacak veri seti. train_dataset ile aynı gereksinimleri karşılaması gerekir.
  • processing_class (PreTrainedTokenizerBase, ProcessorMixin, isteğe bağlı) — Verileri işlemek için kullanılan işleme sınıfı. Dolgu tarafı “left” olarak ayarlanmalıdır. None ise, işleme sınıfı, from_pretrained ile modelin adından yüklenir. Bir dolgu belirteci, tokenizer.pad_token, ayarlanmış olmalıdır. İşleme sınıfı bir dolgu belirteci ayarlamadıysa, varsayılan olarak tokenizer.eos_token kullanılır.
  • reward_processing_classes (PreTrainedTokenizerBase veya list[PreTrainedTokenizerBase], isteğe bağlı) — reward_funcs içinde belirtilen ödül fonksiyonlarına karşılık gelen işleme sınıfları reward_funcs. Şu seçeneklerden biri olabilir:
    • Tek bir işleme sınıfı: reward_funcs yalnızca bir ödül fonksiyonu içerdiğinde kullanılır.
    • İşleme sınıfları listesi: reward_funcs içindeki ödül fonksiyonlarının sırası ve uzunluğuyla eşleşmelidir. None olarak ayarlanırsa veya PreTrainedModel ile eşleşen listenin bir öğesi None ise, modelin belirteçleyicisi (tokenizer) otomatik olarak from_pretrained kullanılarak yüklenir. reward_funcs içindeki özel ödül fonksiyonları (yani PreTrainedModel olmayanlar) için reward_processing_classes içindeki karşılık gelen girdiler yok sayılır.
  • callbacks (liste TrainerCallback, isteğe bağlı) — Eğitim döngüsünü özelleştirmek için kullanılacak geri çağrılar listesi. Bunlar, burada.

    Varsayılan olarak kullanılan geri çağrılardan birini kaldırmak istiyorsanız, remove_callback metodunu kullanın.

  • optimizers (tuple[torch.optim.Optimizer | None, torch.optim.lr_scheduler.LambdaLR | None], isteğe bağlı, varsayılan (None, None)) — Kullanılacak optimizörü ve zamanlayıcıyı içeren bir demet. Modelinizde AdamW örneği ve args tarafından kontrol edilen get_linear_schedule_with_warmup tarafından verilen bir zamanlayıcı olarak varsayılan değerlere sahip olacaktır.
  • quantization_config (BitsAndBytesConfig, isteğe bağlı) — Model bir model tanımlayıcısından yüklenirken kullanılan nicelleştirme yapılandırması. QLoRA eğitimi için peft_config ile birleştirin. Model zaten örneklenmişse yok sayılır.
  • peft_config (PeftConfig, isteğe bağlı) — Modeli sarmak için kullanılan PEFT yapılandırması. None ise model sarılmaz.

Reinforce Leave One Out (RLOO) yöntemi için Trainer. Bu algoritma ilk olarak Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs makalesinde önerilmiştir.

Örnek:

>>> from trl import RLOOTrainer
>>> from trl.rewards import accuracy_reward
>>> from datasets import load_dataset

>>> dataset = load_dataset("trl-lib/DeepMath-103K", split="train")

>>> trainer = RLOOTrainer(
...     model="Qwen/Qwen2.5-0.5B-Instruct",
...     reward_funcs=accuracy_reward,
...     train_dataset=dataset,
... )
>>> trainer.train()

eğit

< >

( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → ~trainer_utils.TrainOutput

Parametreler

  • resume_from_checkpoint (str veya bool, isteğe bağlı) — str ise, önceki bir Trainer örneği tarafından kaydedilen bir kontrol noktasının yerel yolu. bool ise ve True değerine eşitse, önceki bir Trainer örneği tarafından args.output_dir içinde kaydedilen son kontrol noktasını yükler. Mevcutsa, eğitim burada yüklenen model/optimizör/zamanlayıcı durumlarından devam eder.
  • trial (optuna.Trial veya dict[str, Any], isteğe bağlı) — Hiperparametre araması için deneme çalışması veya hiperparametre sözlüğü.
  • ignore_keys_for_eval (list[str], isteğe bağlı) — Eğitim sırasında değerlendirme için tahminleri toplarken göz ardı edilmesi gereken, model çıktısındaki (bir sözlükse) anahtarların listesi.

Dönüş değeri

~trainer_utils.TrainOutput

Küresel adım sayısını, eğitim kaybını ve metrikleri içeren nesne.

Ana eğitim giriş noktası.

save_model

< >

( output_dir: str | None = None_internal_call: bool = False )

Modeli kaydeder, böylece from_pretrained() kullanarak yeniden yükleyebilirsiniz.

Yalnızca ana süreçten kaydedecektir.

push_to_hub

< >

( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )

Parametreler

  • commit_message (str, isteğe bağlı, varsayılan "End of training") — İterlerken gönderilecek mesaj.
  • blocking (bool, isteğe bağlı, varsayılan True) — Fonksiyonun yalnızca git push işlemi tamamlandığında mı değer döndürmesi gerektiğini belirtir.
  • token (str, isteğe bağlı, varsayılan None) — Trainer'ın orijinal argümanlarını üzerine yazma iznine sahip jeton.
  • revision (str, isteğe bağlı) — Commit'in alınacağı git revizyonu. Varsayılan olarak “main” dalının başıdır.
  • kwargs (dict[str, Any], isteğe bağlı) — ~Trainer.create_model_card ile birlikte iletilen ek anahtar kelime argümanları.

self.model ve self.processing_class öğelerini self.args.hub_model_id deposundaki 🤗 model hub'ına yükleyin.

RLOOConfig

sınıf trl.RLOOConfig

< >

( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 1e-06lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool | None = Nonefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Nonegradient_checkpointing: bool = Truegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 10logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list[str] = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: accelerate.parallelism_config.ParallelismConfig | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool | None = Falselabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'random'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1model_init_kwargs: dict[str, typing.Any] | str | None = Nonetrust_remote_code: bool = Falserouter_aux_loss_coef: float | None = Nonedisable_dropout: bool = Falsenum_generations: int | None = 2num_generations_eval: int | None = Nonemax_completion_length: int | None = 512ds3_gather_for_generation: bool = Trueshuffle_dataset: bool | None = Truepad_to_multiple_of: int | str | None = 'auto'generation_batch_size: int | None = Nonesteps_per_generation: int | None = Nonetemperature: float = 1.0top_p: float = 1.0top_k: int = 0min_p: float | None = Nonegeneration_kwargs: dict | str | None = Nonechat_template_kwargs: dict | str | None = Nonerepetition_penalty: float = 1.0cache_implementation: str | None = Noneuse_vllm: bool = Falsevllm_mode: str = 'colocate'vllm_model_impl: str = 'vllm'vllm_enable_sleep_mode: bool = Falsevllm_structured_outputs_regex: str | None = Nonevllm_server_base_url: str | None = Nonevllm_server_host: str = '0.0.0.0'vllm_server_port: int = 8000vllm_server_timeout: float = 240.0vllm_group_port: int = 51216vllm_gpu_memory_utilization: float = 0.3vllm_max_model_length: int | None = Nonevllm_tensor_parallel_size: int = 1beta: float = 0.05num_iterations: int = 1epsilon: float = 0.2epsilon_high: float | None = Nonereward_weights: list[float] | None = Nonenormalize_advantages: bool = Falsereward_clip_range: tuple[float, float] | None = Nonemask_truncated_completions: bool = Falsesync_ref_model: bool = Falseref_model_mixup_alpha: float = 0.6ref_model_sync_steps: int = 512log_completions: bool = Falselog_multimodal: bool = Truenum_completions_to_print: int | None = Nonelog_unique_prompts: bool = Falseuse_transformers_continuous_batching: bool = Falsetransformers_continuous_batching_config: dict | str | None = Noneuse_transformers_paged: bool = False )

Model ve referans modeli kontrol eden parametreler

  • model_init_kwargs (str veya dict[str, Any], isteğe bağlı) — model argümanı RLOOTrainer için bir dize olarak verildiğinde from_pretrained için kullanılan anahtar kelime argümanları. revision değeri, işleme sınıfları yüklenirken de kullanılır.
  • trust_remote_code (bool, isteğe bağlı, varsayılan False) — Hub'dan özel Python kodu içeren modellerin ve tokenizer'ların yüklenmesine izin verilip verilmeyeceğini belirtir. from_pretrained ve from_pretrained işlevlerine aktarılır. Ödül modeli ve ödül tokenizer'ı yüklemelerine de uygulanır.
  • router_aux_loss_coef (float, isteğe bağlı) — Mixture-of-Experts (MoE) modelleri için yük dengeleme yardımcı kaybının katsayısı, eğitim kaybına bu ağırlıkla eklenir. Ayarlanmadığında, model yapılandırmasında beyan edilen değer kullanılır. Devre dışı bırakmak için 0.0 olarak ayarlayın. MoE olmayan bir modelle kullanıldığında hata verir.
  • disable_dropout (bool, isteğe bağlı, varsayılan False) — Modelde dropout'un devre dışı bırakılıp bırakılmayacağı. Bu, referans model ile eğitim sırasında faydalıdır; çünkü modelin aynı giriş için farklı logprobs üretmesini engeller.

Veri ön işleme sürecini kontrol eden parametreler

  • remove_unused_columns (bool, isteğe bağlı, varsayılan False) — Veri setinde yalnızca "prompt" sütununun korunup korunmayacağını belirtir. "prompts" ve "completions" dışında herhangi bir sütun gerektiren özel bir ödül fonksiyonu kullanıyorsanız, bu değeri False olarak bırakmalısınız.
  • num_generations (int, isteğe bağlı, varsayılan olarak 2) — Her prompt için örneklenmesi gereken nesil sayısı. Etkili batch boyutu (num_processes * per_device_batch_size
    • gradient_accumulation_steps) bu değere tam olarak bölünmelidir.
  • num_generations_eval (int, isteğe bağlı) — Değerlendirme sırasında örneklenmesi gereken nesil sayısı. Bu, hesaplama tasarrufu sağlamak için değerlendirme sırasında daha az nesil kullanılmasına olanak tanır. None ise num_generations değeri kullanılır.
  • max_completion_length (int veya None, isteğe bağlı, varsayılan 512) — Oluşturulan tamamlamanın maksimum uzunluğu.
  • ds3_gather_for_generation (bool, isteğe bağlı, varsayılan True) — Bu ayar, DeepSpeed ZeRO-3 için geçerlidir. Etkinleştirilirse, üretim için politika modeli ağırlıkları toplanır ve üretim hızı artırılır. Ancak bu seçeneğin devre dışı bırakılması, tek bir GPU'nun VRAM kapasitesini aşan modellerin eğitimine olanak tanır; bunun bedeli ise daha yavaş bir üretime yol açmasıdır. Bu seçeneğin devre dışı bırakılması, vLLM üretimiyle uyumlu değildir.
  • shuffle_dataset (bool, isteğe bağlı, varsayılan True) — Eğitim veri setinin karıştırılıp karıştırılmayacağı.
  • pad_to_multiple_of (int veya str, isteğe bağlı, varsayılan "auto") — Belirlenirse, prompt kimlikleri ve tamamlama kimlikleri bu değerin katına yastıklanır. "auto", Neuron (AWS Trainium) üzerinde 128'in katına yastıklar; bu platform her giriş şekli için bir kez derleme yapar ve başka yerlerde yastıklama uygulanmaz.

Üretimi kontrol eden parametreler

  • generation_batch_size (int, isteğe bağlı) — Üretim için kullanılacak parti boyutu. None ise, etkin eğitim parti boyutuna ayarlanır: per_device_train_batch_size * num_processes * steps_per_generation. Başka bir deyişle, her optimizasyon adımı için bir üretim partisi işlenir. steps_per_generation ile birlikte kullanılamaz.
  • steps_per_generation (int, isteğe bağlı) — Her üretim için adım sayısı. None ise, varsayılan olarak gradient_accumulation_steps değerini alır. generation_batch_size ile birlikte kullanılamaz.
  • temperature (float, isteğe bağlı, varsayılan 1.0) — Örnekleme için sıcaklık. Sıcaklık ne kadar yüksekse, tamamlamalar o kadar rastgele olur.
  • top_p (float, isteğe bağlı, varsayılan 1.0) — Dikkate alınacak üst tokenların kümülatif olasılığını kontrol eden float. (0, 1] aralığında olmalıdır. Tüm tokenları dikkate almak için 1.0 olarak ayarlayın.
  • top_k (int, isteğe bağlı, varsayılan 0) — Top-k filtreleme için en yüksek olasılığa sahip tutulacak sözlük belirteçlerinin sayısı. 0 ise top-k filtreleme devre dışı bırakılır ve tüm belirteçler dikkate alınır.
  • min_p (float, isteğe bağlı) — En olası token'ın olasılığına göre ölçeklendirilen minimum token olasılığı. 0.0 ile 1.0 arasında bir değer olmalıdır. Tipik değerler 0.01-0.2 aralığındadır.
  • generation_kwargs (dict[str, Any], isteğe bağlı) — Tamamlamalar örneklenirken GenerationConfig (transformers kullanılıyorsa) veya SamplingParams (vLLM kullanılıyorsa) iletilmesi için ek anahtar kelime argümanları. Bu, suppress_tokens, num_beams gibi ayarları yapılandırarak üretim davranışını daha da özelleştirmek için kullanılabilir. Diğer üretim parametreleriyle (ör. min_p, top_p vb.) çakışan anahtarlar içeriyorsa, bunlar onları geçersiz kılar.
  • chat_template_kwargs (dict[str, Any], isteğe bağlı) — Tamamlamalar oluşturulurken apply_chat_template fonksiyonuna iletilecek ek anahtar kelime argümanları.
  • repetition_penalty (float, isteğe bağlı, varsayılan 1.0) — İstemde ve şu ana kadar üretilen metinde görünüp görünmediklerine göre yeni token'ları cezalandıran bir ondalık sayı. 1.0'dan büyük değerler modelin yeni token'lar kullanmasını teşvik ederken, 1.0'dan küçük değerler modelin token'ları tekrarlamasını teşvik eder.
  • cache_implementation (str, isteğe bağlı) — use_vllm False olarak ayarlandığında daha hızlı üretim için önbellek yönteminin uygulaması.

vLLM tarafından desteklenen üretim hızlandırmasını kontrol eden parametreler

  • use_vllm (bool, isteğe bağlı, varsayılan False) — Tamamlamaları üretmek için vLLM kullanılacak mı? True olarak ayarlanırsa, eğitimci üretim için varsayılan model.generate() yerine vLLM kullanır. Bunun için vllm paketinin yüklü olması gerekir.
  • vllm_mode (str, isteğe bağlı, varsayılan olarak "colocate") — kullanıldığında vLLM entegrasyonu için kullanılacak mod use_vllm olarak ayarlanırsa True. aşağıdakilerden biri olmalıdır: "server" veya "colocate".
    • "server": Eğitmen, üretim isteklerini ayrı bir vLLM sunucusuna gönderir. Bir vLLM sunucusunun çalıştığından emin olun (vllm serve ile başlatın).
    • "colocate": vLLM aynı süreçte çalışır ve eğitim GPU'larını paylaşır. Bu, ayrı bir sunucuya olan ihtiyacı ortadan kaldırır ancak eğitimle kaynak çakışmasına neden olabilir.
  • vllm_model_impl (str, isteğe bağlı, varsayılan "vllm") — vLLM için kullanılacak model uygulaması. "transformers" veya "vllm" değerlerinden biri olmalıdır. "transformers": Model uygulaması için transformers arka ucunu kullanır. "vllm": Model uygulaması için vllm kütüphanesini kullanır.
  • vllm_enable_sleep_mode (bool, isteğe bağlı, varsayılan False) — Optimizatör adımı sırasında ağırlıkları/önbelleği boşaltmak için vLLM uyku modunu etkinleştirir. GPU bellek kullanımını düşük tutar, ancak motorun uyanması ev sahibi–cihaz aktarma gecikmesi ekler.
  • vllm_structured_outputs_regex (str, isteğe bağlı) — vLLM yapılandırılmış çıktıları için regex. None (varsayılan) ise yapılandırılmış çıktılar devre dışıdır.

vLLM sunucusunu kontrol eden parametreler (yalnızca `vllm_mode` `"server"` olduğunda kullanılır)

  • vllm_server_base_url (str, isteğe bağlı) — vLLM sunucusu için temel URL (ör. "http://localhost:8000"). Verildiğinde vllm_server_host ve vllm_server_port yok sayılır.
  • vllm_server_host (str, isteğe bağlı, varsayılan "0.0.0.0") — Bağlanacak vLLM sunucusunun host adresi. vllm_server_base_url sağlanırsa yok sayılır.
  • vllm_server_port (int, isteğe bağlı, varsayılan 8000) — Bağlanacak vLLM sunucusunun portu. vllm_server_base_url sağlanırsa yok sayılır.
  • vllm_server_timeout (float, isteğe bağlı, varsayılan 240.0) — vLLM sunucusunun ayağa kalkması için beklenen toplam zaman aşımı süresi (saniye cinsinden). Sunucu zaman aşımı süresinin sonunda ayağa kalkmazsa bir ConnectionError yükseltilir.
  • vllm_group_port (int, isteğe bağlı, varsayılan 51216) — Ağırlık güncelleme grubu için port numarası. Bu, vLLM sunucusuyla iletişim kurmak için kullanılır. Port meşgul değilse değiştirmeye gerek yoktur.

Colocate edilmiş vLLM çalıştırmayı kontrol eden parametreler (yalnızca `vllm_mode` `"colocate"` olduğunda kullanılır)

  • vllm_gpu_memory_utilization (float, isteğe bağlı, varsayılan 0.3) — vLLM için GPU bellek kullanımını kontrol edin. Bu ayar yalnızca vllm_mode değeri "colocate" olarak ayarlandığında geçerlidir. vllm_mode="server" kullanıyorsanız, bu parametrenin vLLM sunucusunu --vllm_gpu_memory_utilization bayrağıyla başlatırken ayrı olarak geçirilmesi gerekir.
  • vllm_max_model_length (int, isteğe bağlı) — vLLM için bağlam penceresi. Veri setindeki en uzun istem uzunluğuna max_completion_length eklenerek en az bu değere ayarlayın; belirtilmezse model yapılandırmasından çıkarılır.
  • vllm_tensor_parallel_size (int, isteğe bağlı, varsayılan 1) — vLLM için tensor paralel boyutunu kontrol eder. Bu ayar yalnızca vllm_mode değeri "colocate" olarak ayarlandığında geçerlidir. vllm_mode="server" kullanıyorsanız, bu parametrenin vLLM sunucusunu --vllm_tensor_parallel_size bayrağıyla başlatırken ayrı olarak geçirilmesi gerekir.

Eğitimi kontrol eden parametreler

  • beta (float, isteğe bağlı, varsayılan 0.05) — KL katsayısı. 0.0 ise referans model yüklenmez, bu da bellek kullanımını azaltır ve eğitim hızını artırır.
  • num_iterations (int, isteğe bağlı, varsayılan 1) — Parti başına yineleme sayısı (algoritmada μ olarak gösterilir).
  • epsilon (float, optional, defaults to 0.2) — Epsilon value for clipping.
  • epsilon_high (float, isteğe bağlı) — Kesme işlemi için üst sınır epsilon değeri. Belirtilmezse, epsilon argümanında belirtilen alt sınır değeriyle aynı varsayılır. DAPO makalesi 0.28 değerini önerir.
  • reward_weights (list[float], isteğe bağlı) — Her ödül fonksiyonu için ağırlıklar. Ödül fonksiyonlarının sayısıyla eşleşmelidir. None ise, tüm ödüller 1.0 ağırlığıyla eşit şekilde ağırlıklandırılır.
  • normalize_advantages (bool, isteğe bağlı, varsayılan False) — Avantajların normalize edilip edilmeyeceği. Normalizasyon, ortalamanın 0.0 ve standart sapmanın 1.0 olması için her üretim partisi (generation batch) için yapılır.
  • reward_clip_range (tuple[float, float], isteğe bağlı) — Ödüllere uygulanacak kırpma aralığı (min, max). None ise kırpma uygulanmaz.
  • mask_truncated_completions (bool, isteğe bağlı, varsayılan False) — Etkinleştirildiğinde, kesilen tamamlamalar kayıp hesabından hariç tutulur; böylece yanlışlıkla cezalandırılmaları ve eğitim sırasında gürültüye yol açmaları önlenir. DAPO makalesine göre bu, eğitim kararlılığı için iyi bir uygulamadır.
  • sync_ref_model (bool, isteğe bağlı, varsayılan False) — Referans modelin, ref_model_mixup_alpha parametresini kullanarak her ref_model_sync_steps adımda aktif modelle senkronize edilip edilmeyeceğini belirtir. Bu senkronizasyon TR-DPO makalesinden kaynaklanmaktadır.
  • ref_model_mixup_alpha (float, isteğe bağlı, varsayılan 0.6) — TR-DPO makalesindeki α parametresi, güncellemeler sırasında mevcut politika ile önceki referans politika arasındaki karışımı kontrol eder. Referans politika şu denkleme göre güncellenir: π_ref = α * π_θ + (1 - α) * π_ref_prev. Bu parametreyi kullanmak için sync_ref_model=True değerini ayarlamanız gerekir.
  • ref_model_sync_steps (int, isteğe bağlı, varsayılan 512) — TR-DPO makalesindeki τ parametresi, mevcut politikanın referans politika ile ne sıklıkta senkronize edileceğini belirler. Bu parametreyi kullanmak için sync_ref_model=True değerini ayarlamanız gerekir.

Kayıt tutmayı kontrol eden parametreler

  • log_completions (bool, isteğe bağlı, varsayılan False) — Her logging_steps adımında (prompt, completion) çiftlerinin bir örneğinin günlüğe kaydedilip kaydedilmeyeceğini belirtir. rich yüklüyse, örneği yazdırır. wandb ve/veya trackio günlüğü etkinleştirildiyse, wandb ve/veya trackio üzerinden kaydeder.
  • log_multimodal (bool, isteğe bağlı, varsayılan True) — Tamamlamalarla birlikte çok modlu içeriklerin (görseller, videolar vb.) günlüğe kaydedilip kaydedilmeyeceğini belirtir. Yüksek çözünürlüklü çok modlu veriler kullanırken günlük boyutunu azaltmak için bunu devre dışı bırakın.
  • num_completions_to_print (int, isteğe bağlı) — rich ile yazdırılacak tamamlama sayısı. None ise tüm tamamlamalar günlüğe kaydedilir.
  • log_unique_prompts (bool, isteğe bağlı, varsayılan False) — Benzersiz istemlerin (prompts) kaydedilip kaydedilmeyeceğini belirtir. True ise yalnızca benzersiz istemler kaydedilir. False ise tüm istemler kaydedilir.

transformers sürekli toplu işleme (continuous batching) ile güçlendirilen üretim hızlandırmasını kontrol eden parametreler

  • use_transformers_continuous_batching (bool, isteğe bağlı, varsayılan False) — Tamamlamaları üretmek için transformers'ın sürekli toplama (continuous batching) motorunun kullanılıp kullanılmayacağı. transformers>=5.8.0 gerektirir.
  • transformers_continuous_batching_config (dict, isteğe bağlı) — ContinuousBatchingConfig için anahtar kelime argümanları.

Kullanımdan kaldırılan parametreler

  • use_transformers_paged —

    use_transformers_paged parametresi kullanımdan kaldırılmıştır ve v2.0.0 sürümünde kaldırılacaktır. Bunun yerine use_transformers_continuous_batching kullanın.

RLOOTrainer için yapılandırma sınıfı.

Bu sınıf yalnızca RLOO eğitimine özgü parametreleri içerir. Eğitim argümanlarının tam listesi için lütfen TrainingArguments belgelerine başvurun. Bu sınıftaki varsayılan değerlerin TrainingArguments içindeki değerlerden farklı olabileceğini unutmayın.

HfArgumentParser kullanarak bu sınıfı, komut satırında belirtilebilen argparse argümanlarına dönüştürebiliriz.

Bu parametrenin TrainingArguments'ten farklı varsayılan değerleri vardır:

  • logging_steps: Varsayılan olarak 500 yerine 10 değerine ayarlanır.
  • gradient_checkpointing: Varsayılan olarak False yerine True değerini alır.
  • bf16: fp16 ayarlanmadıysa varsayılan olarak True, False yerine.
  • learning_rate: Varsayılan olarak 5e-5 yerine 1e-6 olarak ayarlanır.

Referanslar

  1. RLOO Makalesi
  2. Temellere Dönüş: LLM'lerde İnsan Geri Bildiriminden Öğrenme İçin REINFORCE Tarzı Optimizasyonun Yeniden İncelenmesi
  3. Makale - REINFORCE++: Büyük Dil Modellerini Hizalandırmak İçin Basit ve Verimli Bir Yaklaşım
  4. Blog Yazısı - RLHF'e RL'i Geri Getirmek
  5. Blog Yazısı - RLHF ve Varyantlarını Çözümleme: İlerleme ve Pratik Mühendislik İçgörüleri
  6. Youtube - RLOO: LLM'lerde İnsan Geri Bildiriminden Öğrenme için Maliyet-Etkin Bir Optimizasyon

Eski uygulama (0.21 ve öncesi) içinden Geçiş Kılavuzu

0.22.0 sürümünün yayınlanmasıyla birlikte, RLOOTrainer yeniden tasarlanarak kütüphanedeki GRPOTrainer gibi diğer çevrimiçi eğitimcilerle daha uyumlu hale getirildi. Bu yeni uygulama, eğitimcinin yapılandırma parametrelerinde ve genel yapısında çeşitli değişiklikler getiriyor. Aşağıda, RLOOConfig için ana değişikliklerin bir özeti yer almaktadır:

TRL ≤ 0.21.xTRL ≥ 0.22.0
rloo_knum_generations olarak yeniden adlandırıldı
cliprangeepsilon olarak yeniden adlandırıldı
kl_coefbeta olarak yeniden adlandırıldı
exp_namerun_name olarak yeniden adlandırıldı. Eski davranışı yeniden oluşturmak için run_name = f"{exp_name}__{seed}__{int(time.time())}" kullanın
normalize_rewardnormalize_advantages olarak yeniden adlandırıldı. Not: bu, avantajları her zaman normalize ediyordu (eski adına rağmen)
num_ppo_epochsnum_iterations olarak yeniden adlandırıldı (varsayılan: 1)
token_level_klkaldırıldı – KL artık yalnızca dizi düzeyinde hesaplanır
dataset_num_prockaldırıldı – kullanılmıyordu
num_mini_batchessteps_per_generation olarak yeniden adlandırıldı
total_episodesBunun yerine max_steps=total_episodes / gradient_accumulation_steps kullanın
local_rollout_forward_batch_sizekaldırıldı – artık otomatik olarak per_device_train_batch_size (veya değerlendirme sırasında per_device_eval_batch_size) olarak ayarlanır
num_sample_generationskaldırıldı – üretim günlük kaydı sıklığını kontrol etmek için logging_steps kullanın
response_lengthmax_completion_length olarak yeniden adlandırıldı (varsayılan: 512)
stop_tokenkaldırıldı
stop_token_idkaldırıldı – bunun yerine processing_class.eos_token_id kullanın
missing_eos_penaltykaldırıldı – eos_token_id'nin completion_ids içinde olup olmadığını kontrol eden özel bir ödül fonksiyonuyla çoğaltın

Aşağıda RLOOTrainer için ana değişikliklerin bir özeti yer almaktadır:

TRL ≤ 0.21.xTRL ≥ 0.22.0
configargs olarak yeniden adlandırıldı
reward_modelreward_funcs olarak yeniden adlandırıldı; artık hem ödül modellerini hem de özel ödül işlevlerini destekler
policymodel olarak yeniden adlandırıldı
ref_policykaldırıldı – referans model artık model üzerinden otomatik olarak oluşturulur
data_collatorkaldırıldı
Update on GitHub