TRL documentation

Distillation Trainer

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

and get access to the augmented documentation experience

to get started

Distillation Trainer

model badge

Genel Bakış

Distillation Trainer, Rishabh Agarwal, Nino Vieillard, Yongchao Zhou, Piotr Stanczyk, Sabela Ramos, Matthieu Geist ve Olivier Bachem'in On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes makalesinde tanımlanan on-policy bilgi damıtmasını uygular.

Makalenin özeti aşağıdaki gibidir:

Bilgi damıtma (KD), daha küçük bir öğrenci modeli eğiterek öğretmen modelini sıkıştırmak ve çıkarım maliyetini ile bellek ayak izini azaltmak için yaygın olarak kullanılır. Ancak, otoregresif sıra modelleri için mevcut KD yöntemleri, eğitim sırasında görülen çıktı sıraları ile çıkarım sırasında öğrenci tarafından üretilenler arasındaki dağılım uyumsuzluğundan muzdariptir. Bu sorunu ele almak için Genel Bilgi Damıtma (GKD)'yı tanıtıyoruz. Sadece sabit bir çıktı sırası setine güvenmek yerine GKD, bu sıralar üzerindeki öğretmen geri bildirimlerinden yararlanarak öğrenciyi kendi ürettiği çıktı sıraları üzerinde eğitir. Denetimli KD yaklaşımlarının aksine GKD, öğrencinin öğretmen dağılımını taklit edecek ifade gücüne sahip olmadığı durumlarda faydalı olabilecek, öğrenci ve öğretmen arasında alternatif kayıp fonksiyonları kullanma esnekliğini de sunar.

DistillationTrainer, daha küçük bir öğrenci modelini, kendi on-policy üretimlerindeki öğretmen modelinin bir sonraki token dağılımıyla eşleşecek şekilde eğitir. Öğrencinin tamamlamalarını on-policy olarak (isteğe bağlı olarak vLLM destekli) üretir ve öğretmen modelinin tam bir sonraki token dağılımını, bellek açısından verimli parçalı Jensen-Shannon kullancı kaybıyla eşleştirir; böylece öğretmenin yoğun dağılımı asla tam olarak belleğe yüklenmez.

Bu eğitimci Carlos Miguel Patiño tarafından katkı sağlanmıştır.

Eğitimden bağımsızlaştırılmış üretim ve yerel ileri geçiş yerine HTTP üzerinden sunulan bir öğretmen modeline karşı puanlama yapan asenkron bir muadil için AsyncDistillationTrainer sınıfına bakın.

Hızlı başlangıç

Bu örnek, damıtma (distillation) yöntemiyle bir modelin nasıl eğitileceğini göstermektedir. UltraFeedback prompt veri setindeki promptlardan, Qwen 2.5 1.5B Instruct öğretmen modelinden Qwen 2.5 0.5B Instruct model damıtılmaktadır. Veri setindeki verileri burada görüntüleyebilirsiniz:

Aşağıda modeli eğitmek için kullanılan betik yer almaktadır.

# train_distillation.py
from datasets import load_dataset
from trl import DistillationTrainer

dataset = load_dataset("trl-lib/ultrafeedback-prompt", split="train")

trainer = DistillationTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",
    teacher_model="Qwen/Qwen2.5-1.5B-Instruct",
    train_dataset=dataset,
)
trainer.train()

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

torchrun --nproc_per_node 8 train_distillation.py

Damıtma yöntemine daha derinlemesine bakış

On-policy bilgi damıtma, öğrenciyi sabit bir öğretmen çıktısı kümesi yerine kendi ürettiği tamamlamalarda öğretmenin bir sonraki token dağılımını yeniden üretmeye eğitir. Kendi üretimlerinden öğrenme, öğrencinin kendi hatalarını düzeltmesini sağlar ve bu genellikle off-policy damıtmadan daha iyi performans gösterir. Bu bölüm, pratikte nasıl çalıştığını, iki ana adımı kapsayacak şekilde açıklar: tamamlamaları üretme ve kaybı hesaplama.

Tamamlamalar oluşturma

Her eğitim adımında, öğrenci, örneklenen istemler için bir tamamlama grubu üretir.

Kaybın hesaplanması

Kayıp, öğrenci dağılımı genelleştirilmiş Jensen-Shannon ayrılığı (JSD) arasındaki pS p_S ve öğretmen dağılımı pT p_T üzerinde üretilen tamamlama jetonları için beta ile içpolenmiş ve şu şekilde tanımlanır: Lβ=β DKL ⁣[pT∥pM]+(1−β) DKL ⁣[pS∥pM],pM=(1−β) pS+β pT, \mathcal{L}_\beta = \beta \, \mathbb{D}_{\mathrm{KL}}\!\left[ p_T \| p_M \right] + (1 - \beta) \, \mathbb{D}_{\mathrm{KL}}\!\left[ p_S \| p_M \right], \qquad p_M = (1 - \beta) \, p_S + \beta \, p_T,

burada pM p_M iki dağılımın β \beta -karışımıdır. Uç noktalar saf kırılganlara indirgenir: beta=0.0 ileri KL verir DKL ⁣[pT∥pS] \mathbb{D}_{\mathrm{KL}}\!\left[ p_T \| p_S \right] ve beta=1.0 ters KL DKL ⁣[pS∥pT] \mathbb{D}_{\mathrm{KL}}\!\left[ p_S \| p_T \right] .

Uygulamada, sözlük logitlerine projeksiyon ve ayrışma, parçalar halinde hesaplanır; bu nedenle tepe aktivasyon belleği, tam sözlük × dizi uzunluğu logit tensörüyle ölçeklenmez. Bellek Kullanımını Azaltma bölümüne bakın.

Beklenen veri seti türü

Veri seti, konuşmacı sadece istem veri seti biçiminde formatlanmalıdır. Öğrenci, kendi tamamlamalarını politika üzerinde (on-policy) üretir, bu nedenle yalnızca istem gereklidir:

{"prompt": [{"role": "user", "content": "What color is the sky?"}]}

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ı. Araçlar kullanıldığında yalnızca araç dışı tokenlar sayılır.
  • step_time: Eğitim adımının (üretim dahil) ortalama süresi (saniye cinsinden).
  • completions/mean_length: Üretilen tamamlamaların ortalama uzunluğu. Araçlar kullanıldığında yalnızca araç dışı jetonlar sayılır.
  • completions/min_length: Üretilen tamamlamaların (completions) minimum uzunluğu. Araçlar kullanıldığında yalnızca araç dışı jetonlar (tokens) sayılır.
  • completions/max_length: Üretilen tamamlamaların (completions) maksimum uzunluğu. Araçlar kullanıldığında yalnızca araç dışı jetonlar (tokens) sayılır.
  • completions/mean_terminated_length: EOS ile sonlanan üretilen tamamlamaların ortalama uzunluğu. Araçlar kullanıldığında yalnızca araç dışı jetonlar sayılır.
  • completions/min_terminated_length: EOS ile sonlanan üretilen tamamlamaların en küçük uzunluğu. Araçlar kullanıldığında yalnızca araç dışı jetonlar sayılır.
  • completions/max_terminated_length: EOS ile sonlanan üretilen tamamlamaların maksimum uzunluğu. Araçlar kullanıldığında yalnızca araç dışı jetonlar sayılır.
  • completions/clipped_ratio: Kesilen (kırpılan) tamamlamaların oranı.
  • tools/call_frequency: Üretim grubundaki tamamlama başına ortalama araç çağrısı sayısı. Yalnızca tools sağlandığında kaydedilir.
  • tools/failure_frequency: Başarısız olan araç çağrılarının oranı (araç bulunamadı, bir istisna fırlatıldı veya çağrı türü desteklenmiyor). Hiçbir araç çağrılmadığında 0.0'dır. Yalnızca tools sağlandığında kaydedilir.
  • entropy: Üretilen tamamlamalar boyunca token tahminlerinin ortalama entropisi (nat cinsinden).

Özelleştirme

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

Eğitim sırasında on-policy 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'yi kullanmanın iki yolunu destekliyoruz: colocate modu ve server 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 DistillationConfig

training_args = DistillationConfig(
    ...,
    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 DistillationConfig
    
    training_args = DistillationConfig(
        ...,
        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 DistillationConfig içindeki vllm_gpu_memory_utilization parametresini ayarlamanız gerekebilir.

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

PEFT ile adaptörler eğitin

🤗 PEFT kütüphanesiyle sıkı entegrasyon destekliyoruz; bu sayede tüm öğrenci modeli yerine adaptörleri eğitebilir ve Hub üzerinde paylaşabilirsiniz.

from datasets import load_dataset
from trl import DistillationTrainer
from peft import LoraConfig

dataset = load_dataset("trl-lib/ultrafeedback-prompt", split="train")

trainer = DistillationTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",
    teacher_model="Qwen/Qwen2.5-1.5B-Instruct",
    train_dataset=dataset,
    peft_config=LoraConfig(),
)
trainer.train()

Distillation kaybı lm_head.weight değerini doğrudan okur ve öğrenci omurgasını PeftModel.forward() üzerinden geçirmeden çalıştırır. Bu nedenle lm_head üzerindeki adaptörler (target_modules aracılığıyla) ve prompt öğrenme yöntemleri (PromptTuning, PrefixTuning, P-Tuning) sessizce yok sayılacakları için reddedilir. Başlığı eğitmek için bunun yerine modules_to_save=["lm_head"] kullanın.

Ajan Eğitimi

DistillationTrainer, ajan eğitimini destekler: öğrenci, üretim sırasında araçları çağırır ve oluşan yörünge üzerinde damıtılır. Araç sonuç jetonları kayıptan maskelenir, böylece öğrenci yalnızca kendi ürettiği jetonlar üzerinde eğitilir.

Araçlar

tools argümanı, ajanın kullanabileceği araçları tanımlayan Python fonksiyonlarının bir listesini bekler:

from trl import DistillationTrainer

trainer = DistillationTrainer(
    tools=[tool1, tool2],
    ...,
)

Her araç, tip ipuçlu argümanlara ve dönüş türlerine sahip standart bir Python fonksiyonu olmalı ve amacını, argümanlarını ve dönüş değerini açıklayan bir Google tarzı docstring içermelidir. Daha fazla ayrıntı için Araçları geçme kılavuzu'na bakın.

Araç çağrı döngüsü, sohbet şablonunun önek koruyucu olmasını gerektirir (bir araç mesajı eklenmesi, önceki mesajların nasıl görüntülendiğini değiştirmemelidir). Bilinen model aileleri (ör. Qwen3, DeepSeek-V3) için TRL, araçlar etkinleştirildiğinde otomatik olarak yamalı bir eğitim şablonu kullanır. Tam liste için Sohbet Şablonları bölümüne bakın.

DistillationConfig içindeki max_tool_calling_iterations parametresi, araç çağırma turlarının sayısını sınırlamak için kullanılır. Varsayılan olarak bir sınır yoktur ve üretim; öğrenci modelin araç çağrısı içermeyen bir yanıt turu üretmesi, tamamlamanın (tüm turlar ve araç sonuçları dahil) max_completion_length token’a ulaşması veya tam dizinin modelin maksimum uzunluğuna (vllm_mode="colocate" kullanıldığında vllm_max_model_length, aksi halde modelin max_position_embeddings değeri) ulaşması durumunda durur.

Örnek:

from trl import DistillationTrainer

def multiply(a: int, b: int) -> int:
    """
    Multiplies two integers.

    Args:
        a: The first integer.
        b: The second integer.

    Returns:
        The product of the two integers.
    """
    return a * b

trainer = DistillationTrainer(
    tools=[multiply],
    ...,
)

Asenkron araçlar henüz desteklenmiyor — senkron işlevler geçirin.

Çok Modlu Araç Yanıtları

Araçlar, içerik blokları listesini döndürerek metnin yanı sıra görselleri de geri döndürebilir. Bu, aracın görsel geri bildirim sağladığı VLM ajanı eğitiminde (ör. ekran görüntüleri, grafikler, kamera yakalamaları) kullanışlıdır.

from PIL import Image

def take_screenshot() -> list:
    """
    Takes a screenshot of the current screen.

    Returns:
        The screenshot image with a description.
    """
    img = Image.open("screenshot.png")
    return [{"type": "image", "image": img}, {"type": "text", "text": "Here is the screenshot."}]

Dönen görüntüler, sohbetin içine otomatik olarak enjekte edilir ve sonraki üretim turları için VLM'ye iletilir.

Görsel Dil Modellerinin Eğitimi

DistillationTrainer, hem metin hem de görüntü içeren çok modlu veri setlerinde Görsel-Dil Modellerinin (VLM) damıtılmasını destekler. Hem öğrenci hem de öğretmen olarak bir VLM iletin ve örnek başına tek görüntü için image sütunu veya örnek başına görüntü listesi için images sütunu içeren yalnızca istem (prompt) içeren bir veri seti sağlayın. Beklenen veri seti yapısı hakkında daha fazla bilgi için Veri Seti Biçimi — Görsel veri setleri bölümüne bakın.

Test edildi:

  • Gemma 3 — ö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

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.

Komut satırı arayüzü

Komut satırından distilasyon eğitimini başlatmak için trl distillation CLI aracını kullanın. Standart ModelConfig bayrakları aracılığıyla tam eğitim ve LoRA'yı destekler.

# Full training:
trl distillation \
    --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \
    --teacher_model_name_or_path Qwen/Qwen2.5-1.5B-Instruct \
    --dataset_name trl-lib/ultrafeedback-prompt \
    --learning_rate 2e-5 \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 8 \
    --output_dir distilled-model \
    --num_train_epochs 1
# LoRA:
trl distillation \
    --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \
    --teacher_model_name_or_path Qwen/Qwen2.5-1.5B-Instruct \
    --dataset_name trl-lib/ultrafeedback-prompt \
    --learning_rate 2e-4 \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 8 \
    --output_dir distilled-model \
    --num_train_epochs 1 \
    --use_peft \
    --lora_r 64 \
    --lora_alpha 16

DistillationTrainer

sınıf trl.DistillationTrainer

< >

( model: str | PreTrainedModel | PeftModelteacher_model: str | transformers.modeling_utils.PreTrainedModel | None = Noneargs: trl.trainer.distillation_config.DistillationConfig | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | dict[str, datasets.arrow_dataset.Dataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | 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 = Nonetools: list[collections.abc.Callable] | 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.
  • teacher_model (str veya PreTrainedModel, isteğe bağlı) — Öğrencinin, sonraki token dağılımını eşleştirmek üzere eğitildiği öğretmen modeli. Bir model kimliği / yol olabilir (model gibi yüklenir, args.teacher_model_init_kwargs kullanılır) veya örneklenmiş bir PreTrainedModel olabilir. Öğrencinin sözlüğüyle ortaklaşa olmalıdır. Öğretmeni başka bir yoldan sağlayan (ör. uzak bir sunucu) alt sınıflar tarafından atlanabilir.
  • args (DistillationConfig, isteğe bağlı) — Bu trainer 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.
  • 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.
  • tools (Callable listesi, isteğe bağlı) — Modelin üretim sırasında çağırabileceği çağrılabilir araç fonksiyonlarının listesi. Her araç, uygun şekilde tip ipucu eklenmiş argümanlara ve dönüş değerlerine sahip standart bir Python fonksiyonu olmalı ve amacını, argümanlarını ve dönüş değerini açıklayan bir Google tarzı docstring içermelidir. Daha fazla ayrıntı için bkz: https://huggingface.co/docs/transformers/en/chat_extras#passing-tools. Model, fonksiyonun adını, tip ipuçlarını ve docstring'ini kullanarak nasıl çağrılacağını belirler. Modelin sohbet şablonunun araç kullanımını desteklediğinden ve araç çağrısı için ince ayar yapıldığından emin olun.

Bilgi damıtması için Trainer. Öğrenci, on-policy olarak eğitilir — tamamlamaları kendisi üretir — ve On-Policy Distillation of Language Models makalesinde tanıtıldığı gibi, öğretmen modelinin bir sonraki token dağılımını, beta ile ileri KL, ters KL ve JSD arasında interpolasyon yapan genelleştirilmiş Jensen-Shannon kullandığı bir dağılıma uydurmak üzere ayarlanır.

Örnek:

>>> from trl import DistillationTrainer
>>> from datasets import load_dataset

>>> dataset = load_dataset("trl-lib/tldr", split="train")

>>> trainer = DistillationTrainer(
...     model="Qwen/Qwen2.5-0.5B-Instruct",
...     teacher_model="Qwen/Qwen2.5-1.5B-Instruct",
...     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.

DistillationConfig

sınıf trl.DistillationConfig

< >

( 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 = Falseteacher_model_name_or_path: str | None = Noneteacher_model_revision: str | None = Noneteacher_model_init_kwargs: dict[str, typing.Any] | str | None = Nonedisable_dropout: bool = Falsemax_completion_length: int | None = 512ds3_gather_for_generation: bool = Trueshuffle_dataset: bool | None = Truepad_to_multiple_of: int | str | None = 'auto'temperature: 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 = 1.0max_tool_calling_iterations: int | None = Nonelog_completions: bool = Falsenum_completions_to_print: int | None = Nonelog_unique_prompts: bool = False )

Modeli ve öğretmen modelini kontrol eden parametreler

  • model_init_kwargs (str veya dict[str, Any], isteğe bağlı) — Eğiticinin model argümanı bir dize olarak verildiğinde AutoModelForCausalLM.from_pretrained için kullanılan anahtar kelime argümanları. revision değeri, işleme sınıfı 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. Hem öğrenci hem de öğretmen için from_pretrained ve from_pretrained işlevlerine iletilir.
  • teacher_model_name_or_path (str, isteğe bağlı) — Öğretmen modeli için model adı veya yolu. Öğretmen yerel olarak yüklendiğinde kullanılır.
  • teacher_model_revision (str, isteğe bağlı) — Öğretmen modelinin revizyonu (ör. dal adı, etiket veya commit hash'i).
  • teacher_model_init_kwargs (str veya dict[str, Any], isteğe bağlı) — Bir dizgeden öğretmen modelini örneklerken AutoModelForCausalLM.from_pretrained fonksiyonuna iletilen anahtar kelime argümanları
  • disable_dropout (bool, isteğe bağlı, varsayılan False) — Eğitim sırasında öğrenci modelinde dropout'un devre dışı bırakılıp bırakılmayacağı.

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ğı. Trainer, ham prompt sütununu tüketir ve on-policy olarak tamamlamalar üretir, bu nedenle varsayılan değeri False'tir.
  • max_completion_length (int veya None, isteğe bağlı, varsayılan 512) — On-policy üretim sırasında tamamlama başına üretilecek maksimum token sayısı.
  • 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

  • temperature (float, isteğe bağlı, varsayılan 1.0) — Üretim sırasında örneklemeyi ve damıtma kaybını hesaplamayı etkileyen sıcaklık. Daha yüksek değerler daha yumuşak olasılık dağılımları üretir.
  • top_p (float, isteğe bağlı, varsayılan 1.0) — On-policy üretim için Top-p (nucleus) örneklemesi parametresi.
  • top_k (int, isteğe bağlı, varsayılan 0) — On-policy üretim için top-k örneklemesi parametresi. 0, top-k filtrelemeyi devre dışı bırakı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) — Öğrenci modelinden on-policy tamamlamalar üretmek için vLLM kullanılacak mı?
  • vllm_mode (str, isteğe bağlı, varsayılan "colocate") — Öğrenci vLLM entegrasyonu için mod. "server" veya "colocate".
  • vllm_model_impl (str, isteğe bağlı, varsayılan "vllm") — vLLM için model uygulama arka ucu. "vllm" veya "transformers" kullanın.
  • vllm_enable_sleep_mode (bool, isteğe bağlı, varsayılan False) — Optimizatör adımında öğrenci ağırlıklarını boşaltmak için vLLM uyku modunu etkinleştirir.
  • vllm_structured_outputs_regex (str, isteğe bağlı) — vLLM yapılandırılmış çıktıları için regex deseni.

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

  • vllm_server_base_url (str, isteğe bağlı) — Öğrenci vLLM sunucusu için temel URL. Sağlanırsa 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") — Öğrenci vLLM sunucusunun ana makinesi.
  • vllm_server_port (int, isteğe bağlı, varsayılan 8000) — Öğrenci vLLM sunucusunun portu.
  • vllm_server_timeout (float, isteğe bağlı, varsayılan 240.0) — Öğrenci vLLM sunucusuna bağlanma zaman aşımı.
  • vllm_group_port (int, isteğe bağlı, varsayılan 51216) — vLLM ağırlık güncelleme grubu (NCCL iletişimcisi) için port.

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) — Aynı konumda bulunan öğrenci vLLM motoru için GPU bellek kullanımı.
  • vllm_max_model_length (int, isteğe bağlı) — Colocated vLLM motoru için maksimum model dizisi uzunluğu.
  • vllm_tensor_parallel_size (int, isteğe bağlı, varsayılan 1) — Colocate edilmiş öğrenci vLLM motoru için tensor paralel boyutu.

Eğitimi kontrol eden parametreler

  • beta (float, isteğe bağlı, varsayılan 1.0) — Genelleştirilmiş Jensen-Shannon Sapması kaybı için interpolasyon katsayısı. 0.0 olduğunda, kayıp ileri KL sapmasıdır. 1.0 olduğunda, kayıp ters KL sapmasıdır. 0.5 olduğunda, standart JSD'dir. GRPO'nun beta parametresinin (referans modele karşı KL ceza katsayısı) aksine, burada sapmanın kendisini seçer; referans model KL cezası yoktur.
  • max_tool_calling_iterations (int, isteğe bağlı) — Bir ajan eğitilirken araç çağırma turlarının maksimum sayısı. None ise, bir sınır yoktur ve üretim; modelin araç çağrısı içermeyen bir yanıt turu üretmesi, tamamlamanın (tüm turlar ve araç sonuçları) max_completion_length belirteç sayısına ulaşması veya tam dizinin modelin maksimum uzunluğuna (vllm_mode="colocate" için vllm_max_model_length, aksi halde modelin max_position_embeddings değeri) ulaşması durumunda durur.

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.
  • 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.

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

TrainingArguments sınıfını, bilgi damıtmasına özgü parametrelerle genişletir. Gerekli tüm alanlar burada tanımlanmıştır.

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.
Update on GitHub