TRL documentation
Distillation Trainer
Distillation Trainer
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 ve öğretmen dağılımı üzerinde üretilen tamamlama jetonları için beta ile içpolenmiş ve şu şekilde tanımlanır:
burada iki dağılımın -karışımıdır. Uç noktalar saf kırılganlara indirgenir: beta=0.0 ileri KL verir ve beta=1.0 ters KL .
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ızcatoolssağ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ığında0.0'dır. Yalnızcatoolssağ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.
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 -1Eğ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_DEVICESortam 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_utilizationparametresini 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.weightdeğerini doğrudan okur ve öğrenci omurgasınıPeftModel.forward()üzerinden geçirmeden çalıştırır. Bu nedenlelm_headüzerindeki adaptörler (target_modulesaracı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 yerinemodules_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 16DistillationTrainer
sınıf trl.DistillationTrainer
< source >( 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 (
strveya 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_kwargsiç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_kwargsiçinde belirtilmediyse, varsayılan olarakfloat32olur. 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.
- 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
- teacher_model (
strveya 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 (modelgibi yüklenir,args.teacher_model_init_kwargskullanı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.
Noneise 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_datasetbir 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_stepseğ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_datasetile 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.
Noneise, 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 olaraktokenizer.eos_tokenkullanı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. ModelinizdeAdamWörneği veargstarafı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_configile 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ı.
Noneise model sarılmaz. - tools (
Callablelistesi, 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
< source >( 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 (
strveyabool, isteğe bağlı) —strise, önceki birTrainerörneği tarafından kaydedilen bir kontrol noktasının yerel yolu.boolise veTruedeğerine eşitse, önceki birTrainerö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.Trialveyadict[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ı.
Modeli kaydeder, böylece from_pretrained() kullanarak yeniden yükleyebilirsiniz.
Yalnızca ana süreçten kaydedecektir.
push_to_hub
< source >( 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ılanTrue) — Fonksiyonun yalnızcagit pushişlemi tamamlandığında mı değer döndürmesi gerektiğini belirtir. - token (
str, isteğe bağlı, varsayılanNone) — 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_cardile 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
< source >( 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 (
strveyadict[str, Any], isteğe bağlı) — Eğiticininmodelargümanı bir dize olarak verildiğindeAutoModelForCausalLM.from_pretrainediçin kullanılan anahtar kelime argümanları.revisiondeğeri, işleme sınıfı yüklenirken de kullanılır. - trust_remote_code (
bool, isteğe bağlı, varsayılanFalse) — 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 (
strveyadict[str, Any], isteğe bağlı) — Bir dizgeden öğretmen modelini örneklerkenAutoModelForCausalLM.from_pretrainedfonksiyonuna iletilen anahtar kelime argümanları - disable_dropout (
bool, isteğe bağlı, varsayılanFalse) — 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ılanFalse) — 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ğeriFalse'tir. - max_completion_length (
intveyaNone, isteğe bağlı, varsayılan512) — On-policy üretim sırasında tamamlama başına üretilecek maksimum token sayısı. - ds3_gather_for_generation (
bool, isteğe bağlı, varsayılanTrue) — 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ılanTrue) — Eğitim veri setinin karıştırılıp karıştırılmayacağı. - pad_to_multiple_of (
intveyastr, 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ılan1.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ılan1.0) — On-policy üretim için Top-p (nucleus) örneklemesi parametresi. - top_k (
int, isteğe bağlı, varsayılan0) — 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.0ile1.0arasında bir değer olmalıdır. Tipik değerler0.01-0.2aralığındadır. - generation_kwargs (
dict[str, Any], isteğe bağlı) — Tamamlamalar örneklenirken GenerationConfig (transformers kullanılıyorsa) veyaSamplingParams(vLLM kullanılıyorsa) iletilmesi için ek anahtar kelime argümanları. Bu,suppress_tokens,num_beamsgibi ayarları yapılandırarak üretim davranışını daha da özelleştirmek için kullanılabilir. Diğer üretim parametreleriyle (ör.min_p,top_pvb.) çakışan anahtarlar içeriyorsa, bunlar onları geçersiz kılar. - chat_template_kwargs (
dict[str, Any], isteğe bağlı) — Tamamlamalar oluşturulurkenapply_chat_templatefonksiyonuna iletilecek ek anahtar kelime argümanları. - repetition_penalty (
float, isteğe bağlı, varsayılan1.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_vllmFalseolarak 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ılanFalse) — Öğ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ılanFalse) — 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ırsavllm_server_hostvevllm_server_portyok 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ılan8000) — Öğrenci vLLM sunucusunun portu. - vllm_server_timeout (
float, isteğe bağlı, varsayılan240.0) — Öğrenci vLLM sunucusuna bağlanma zaman aşımı. - vllm_group_port (
int, isteğe bağlı, varsayılan51216) — 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ılan0.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ılan1) — Colocate edilmiş öğrenci vLLM motoru için tensor paralel boyutu.
Eğitimi kontrol eden parametreler
- beta (
float, isteğe bağlı, varsayılan1.0) — Genelleştirilmiş Jensen-Shannon Sapması kaybı için interpolasyon katsayısı.0.0olduğunda, kayıp ileri KL sapmasıdır.1.0olduğunda, kayıp ters KL sapmasıdır.0.5olduğunda, standart JSD'dir. GRPO'nunbetaparametresinin (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ı.Noneise, 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_lengthbelirteç sayısına ulaşması veya tam dizinin modelin maksimum uzunluğuna (vllm_mode="colocate"içinvllm_max_model_length, aksi halde modelinmax_position_embeddingsdeğeri) ulaşması durumunda durur.
Kayıt tutmayı kontrol eden parametreler
- log_completions (
bool, isteğe bağlı, varsayılanFalse) — Herlogging_stepsadımında (prompt, completion) çiftlerinin bir örneğinin günlüğe kaydedilip kaydedilmeyeceğini belirtir.richyüklüyse, örneği yazdırır.wandbve/veyatrackiogünlüğü etkinleştirildiyse,wandbve/veyatrackioüzerinden kaydeder. - num_completions_to_print (
int, isteğe bağlı) —richile yazdırılacak tamamlama sayısı.Noneise tüm tamamlamalar günlüğe kaydedilir. - log_unique_prompts (
bool, isteğe bağlı, varsayılanFalse) — Benzersiz istemlerin (prompts) kaydedilip kaydedilmeyeceğini belirtir.Trueise yalnızca benzersiz istemler kaydedilir.Falseise 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 olarak500yerine10değerine ayarlanır.gradient_checkpointing: Varsayılan olarakFalseyerineTruedeğerini alır.bf16:fp16ayarlanmadıysa varsayılan olarakTrue,Falseyerine.learning_rate: Varsayılan olarak5e-5yerine1e-6olarak ayarlanır.