TRL documentation

مدرب التشتيت العام للوجيتات عبر الإنترنت (GOLD)

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

مدرب التشتيت العام للوجيتات عبر الإنترنت (GOLD)

All_models-GOLD-blue

نظرة عامة

يمثل التعميم في تقطير اللوغيتات عبر الإنترنت (GOLD) امتدادًا لتقطير اللوغيتات الشامل (ULD) يدعم أزواج الطالب/المعلم التي تستخدم مُجزِّئات (tokenizers) مختلفة. يقوم هذا النهج بمواءمة المقاطع النصية الناتجة عن كلا المُجزِّئين ودمج اللوغيتات المرتبطة بها بحيث لا تُستبعد أي رموز إكمال. وهذا يتيح تقطير المعرفة بين مُجزِّئات مختلفة، بما في ذلك عائلات النماذج المختلطة (على سبيل المثال، طلاب من عائلة LLaMA مع معلمين من عائلة Qwen).

الخصائص الرئيسية:

  1. محاذاة بين مُجزّئات الرموز – يقوم GOLD بفك ترميز رموز الطالب والمعلم بشكل تدريجي، ويجمع المقاطع التي تحمل النص المرئي نفسه في مجموعات، ودمج الاحتمالات داخل كل مجموعة. يضمن هذا أن تُحسب حدود الخسارة على الإكمال الكامل حتى عندما تختلف حدود الرموز.
  2. خسارة ULD الهجينة – عند تفعيل uld_use_hybrid_loss، يقارن GOLD تطابقات المفردات الدقيقة مباشرةً ويعود إلى خسارة ULD الأصلية القائمة على الاحتمالات المرتبة للرموز غير المطابقة. وهذا يحسّن الاستقرار للطلاب الذين تتداخل مفرداتهم جزئيًا فقط مع مفردات المعلم.
  3. تكامل سلس مع GKD – يرث GOLD جدولة على السياسة مقابل خارج السياسة من experimental.gkd.GKDTrainer، مما يتيح لك دمج تقطير المستوى التسلسلي، وJSD المعمم، وتقطير عبر المرمّزات في جلسة تدريب واحدة.

يُعد GOLD حاليًا جزءًا من مساحة الأسماء trl.experimental. قد تتغير واجهات برمجة التطبيقات دون إشعار مسبق أثناء تطوير الميزة وتحسينها.

نصائح للاستخدام

يُشكّل experimental.gold.GOLDTrainer فئة فرعية من SFTTrainer ويقبل نفس مجموعات البيانات التي تقبلها مدرّبات TRL الأخرى (قوائم رسائل بنمط ChatML). وتشمل أعلام التهيئة المهمة في experimental.gold.GOLDConfig:

  • use_uld_loss – يفعّل أو يعطّل Universal Logit Distillation. اضبط هذا على True لإعدادات cross-tokenizer.
  • teacher_tokenizer_name_or_path – مطلوب عند use_uld_loss=True؛ يستخدم GOLD مُجزِّئ المعلم لمواءمة الرموز.
  • uld_use_hybrid_loss، uld_hybrid_matched_weight، uld_hybrid_unmatched_weight – تفعّل وتوزّن خسارة المطابقة/عدم المطابقة الهجينة.
  • beta، lmbda، seq_kd – مُورثة من experimental.gkd.GKDConfig، تتحكم في الاستيفاء المعمّم لـ JSD ونسبة أخذ العينات على السياسة.
  • num_generations، generation_batch_size – تتحكم في توليد الانتشار المخزّن عبر نوافذ تراكم التدرجات. generation_batch_size هو عدد الأوامر الفريدة لكل عامل في كل خطوة مُحسِّن.

مثال شامل من البداية إلى النهاية بأقل قدر من التفاصيل:

from datasets import load_dataset
from trl.experimental.gold import GOLDConfig, GOLDTrainer

train_dataset = load_dataset(
    "HuggingFaceTB/OpenR1-Math-220k-default-verified",
    "all",
    split="train[:1024]",
)

trainer = GOLDTrainer(
    model="meta-llama/Llama-3.2-1B-Instruct",
    teacher_model="Qwen/Qwen2.5-0.5B-Instruct",
    args=GOLDConfig(output_dir="gold-model", use_uld_loss=True, teacher_tokenizer_name_or_path="Qwen/Qwen2.5-0.5B-Instruct"),
    train_dataset=train_dataset,
)
trainer.train()

يمكنك الاعتماد على المعرّفات النصية كما هو موضح أعلاه في سير العمل السريع—حيث سيتولى المدرب تحميل النموذج ومجزّئ الرموز نيابةً عنك. يُنصح فقط بتوليد AutoModelForCausalLM وAutoTokenizer صراحةً، أو بتعبئة GOLDConfig، في حالات الاستخدام المتقدمة التي تتطلب تحكماً دقيقاً في التهيئة.

قد يبدو الإعداد الأكثر صراحةً على النحو التالي عندما تحتاج إلى تخصيص تحميل النموذج، أو إعدادات المُجزِّئ، أو حُجج التدريب:

from datasets import load_dataset
from trl.experimental.gold import GOLDConfig, GOLDTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer

student_name = "meta-llama/Llama-3.2-1B-Instruct"
teacher_name = "Qwen/Qwen2.5-0.5B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(student_name)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(student_name)
teacher_model = AutoModelForCausalLM.from_pretrained(teacher_name)

train_dataset = load_dataset(
    "HuggingFaceTB/Countdown-Task-GOLD",
    "verified_Qwen2.5-0.5B-Instruct",
    split="train",
)

training_args = GOLDConfig(
    output_dir="gold-model",
    per_device_train_batch_size=1,
    teacher_model_name_or_path=teacher_name,
    teacher_tokenizer_name_or_path=teacher_name,
    use_uld_loss=True,
    uld_use_hybrid_loss=True,
)

trainer = GOLDTrainer(
    model=model,
    teacher_model=teacher_model,
    args=training_args,
    processing_class=tokenizer,
    train_dataset=train_dataset,
)
trainer.train()

تخزّن GOLD دفعة توليد كاملة لنافذة المُحسِّن (per_device_train_batch_size * gradient_accumulation_steps) وتعيد استخدامها عبر خطوات التراكم. إذا كانت الدفعة الأخيرة أصغر من الحجم المطلوب، فإن GOLD تُصدر تحذيرًا وتُلغي تلك الدفعة الأخيرة (Dropping last batch due to unexpected batch size). اضبط dataloader_drop_last=True لتجنّب هذا التحذير.

نوع مجموعة البيانات المتوقع

يتطلب GOLD مجموعة بيانات حوارية لـنمذجة اللغة، على سبيل المثال:

{"messages": [{"role": "user", "content": "What color is the sky?"},
              {"role": "assistant", "content": "It is blue."}]}

يحافظ GOLDTrainer على الرسائل الخام حتى يتمكن مُجمِّع ChatML من بناء المحفّزات والإكمالات مع الحدود الصحيحة.

كيف يعمل دمج الرموز

عندما يستخدم الطالب والمعلم مُجزِّئات (tokenizers) مختلفة، قد يتم تقسيم النص نفسه بطرق مختلفة:

  • الطالب: "Hugging Face" → رمز واحد
  • المعلم: "Hugging"، " Face" → 2 رموز

يُحاذا GOLD هذه التسلسلات ودمج احتمالات الرموز المتعددة للمعلم في توزيع واحد يمكن مقارنته بتوزيع الرمز الواحد للطالب.

دمج الاحتمالات

لأُسْلُوب مُعَلِّم من الرموز [token₀, token₁, ..., tokenₖ] الذي يُقابِل رمز طالب واحد، يحسب GOLD:

P_merged(y) = P(y | context) × P(token₁ | token₀, context) × ... × P(tokenₖ | ..., context)

حيث:

  • P(y | context) هي التوزيع الاحتمالي الهامشي على جميع رموز المفردات في الموضع الأول
  • P(tokenᵢ | ..., context) هي احتمالات شرطية قياسية للرموز الفعلية التي تم توليدها

رؤية أساسية: يتم استخراج احتمالات الشرطية لـ رموز الاستمرار الفعلية كمقاييس فقط. ثم يتم توسيع التوزيع الهامشي الكامل عند الموضع الأول عن طريق ضرب هذه الاحتمالات المقاسة.

يضمن هذا:

  1. الاحتمال المشترك الصحيح للترتيب الفعلي المولَّد (بموجب قاعدة السلسلة)
  2. تقريب معقول للرموز المضادة للواقع (مُقيّمة على أساس احتمالية الاستكمال نفسها)
  3. التوزيعات غير المعيارية التي تحافظ على الاحتمالات النسبية الصحيحة لحساب خسارة ULD

مثال

المعطى:

P(x₀):         ["HF": 0.6,  "is": 0.3,  "cool": 0.1]
P(x₁ | "HF"):  ["HF": 0.05, "is": 0.9,  "cool": 0.05]

إذا تم دمج الرمزين 0 و 1، وكان التسلسل الفعلي هو ["HF", "is"]:

P_merged("HF")   = 0.6 × 0.9 = 0.54  ✓ (correct joint probability)
P_merged("is")   = 0.3 × 0.9 = 0.27
P_merged("cool") = 0.1 × 0.9 = 0.09

التوزيع المدمج غير مُعايَر (مجموعه 0.81)، لكن هذا مقصود وصحيح لحساب خسارة ULD، الذي يستخدم الفرص والمسافة L1.

مثال على السكربت

استخدم examples/gold_chatbot_arena/gold_chatbot_arena.py لإطلاق تدريب GOLD من سطر الأوامر. يدعم هذا السكربت التدريب الكامل وLoRA عبر أعلام ModelConfig القياسية.

python examples/gold_chatbot_arena/gold_chatbot_arena.py \
    --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \
    --teacher_model_name_or_path Qwen/Qwen2-1.5B-Instruct \
    --dataset_name trl-lib/chatbot_arena_completions \
    --learning_rate 2e-5 \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 8 \
    --output_dir gold-model \
    --num_train_epochs 1 \
    --push_to_hub

تدريب نماذج اللغة البصرية

يدعم experimental.gold.GOLDTrainer تقطير نماذج الرؤية واللغة إلى نماذج رؤية ولغة. يجب أن يكون كل من النموذج الطالب والمعلم من نماذج الرؤية واللغة. لتدريب نموذج رؤية ولغة، قدّم مجموعة بيانات تحتوي إما على عمود image (صورة واحدة لكل عينة) أو عمود images (قائمة من الصور لكل عينة). لمزيد من المعلومات حول بنية مجموعة البيانات المتوقعة، راجع قسم Dataset Format — Vision datasets.

عندما يتشارك الطالب والمعلم نفس البنية ومُجزّئ الرموز (مثل Qwen3-VL-8B إلى Qwen3-VL-2B)، يُطبَّق خسارة JSD المعممة القياسية مباشرةً. أما عندما يختلف model_type بينهما (مثل Qwen3-VL إلى LFM2.5-VL)، فاضبط use_uld_loss=True لتفعيل محاذاة عبر مُجزّئات الرموز المختلفة عبر التقطير الشامل للنتائج اللوجستية. تُعالَج الصور بشكل منفصل عبر مُعالج كل نموذج.

from datasets import load_dataset
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
from trl.experimental.gold import GOLDConfig, GOLDTrainer

student_name = "Qwen/Qwen3-VL-2B-Instruct"
teacher_name = "Qwen/Qwen3-VL-8B-Instruct"

processor = AutoProcessor.from_pretrained(student_name, padding_side="left")
student_model = AutoModelForImageTextToText.from_pretrained(student_name, dtype=torch.bfloat16)
teacher_model = AutoModelForImageTextToText.from_pretrained(teacher_name, dtype=torch.bfloat16)

train_dataset = load_dataset("trl-lib/llava-instruct-mix", split="train")

trainer = GOLDTrainer(
    model=student_model,
    teacher_model=teacher_model,
    args=GOLDConfig(
        output_dir="gold-vlm-model",
        max_length=None,
        teacher_model_name_or_path=teacher_name,
        use_uld_loss=False,
    ),
    train_dataset=train_dataset,
    processing_class=processor,
)
trainer.train()

للتقطير بين عائلات النماذج، اضبط use_uld_loss=True وteacher_tokenizer_name_or_path على اسم نموذج المعلم.

استخدم examples/gold_qwen3_vl/gold_qwen3_vl.py لإطلاق تدريب GOLD VLM من سطر الأوامر:

# Same-family distillation (JSD loss, vLLM enabled)
torchrun --nproc_per_node 8 examples/gold_qwen3_vl/gold_qwen3_vl.py \
    --student_model_name Qwen/Qwen3-VL-2B-Instruct \
    --teacher_model_name Qwen/Qwen3-VL-8B-Instruct

# Cross-family distillation (ULD loss, local generation)
torchrun --nproc_per_node 8 examples/gold_qwen3_vl/gold_qwen3_vl.py \
    --student_model_name LiquidAI/LFM2.5-VL-1.6B \
    --teacher_model_name Qwen/Qwen3-VL-8B-Instruct \
    --use_uld_loss \
    --no-use_vllm

في نماذج الرؤية-اللغة (VLMs)، لا يُدعم truncation_mode='keep_end' لأن رموز الصور تقع في جزء الاستعلام من التسلسل وقد تُحذف بصمت. استخدم truncation_mode='keep_start' (الافتراضي) أو اضبط max_length=None في experimental.gold.GOLDConfig. وهذا يتيح للنموذج معالجة طول التسلسل الكامل دون اقتطاع رموز الصور.

GOLDConfig(max_length=None, ...)

استخدم max_length فقط بعد أن تتأكد من أن القصّ لن يُزيل رموز الصور في كامل مجموعة البيانات.

يتطلب التقطير بين معماريات نماذج اللغة المرئية use_uld_loss=True. سيرفع المدرب خطأً إذا حاولت إجراء تقطير بين معماريات مختلفة دون خسارة ULD.

GOLDTrainer

فئة trl.experimental.gold.GOLDTrainer

< >

( model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, str, NoneType] = Noneteacher_model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, str] = Noneargs: trl.experimental.gold.gold_config.GOLDConfig | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | 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.image_processing_utils.BaseImageProcessor | transformers.feature_extraction_utils.FeatureExtractionMixin | transformers.processing_utils.ProcessorMixin | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalPrediction], dict] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR] = (None, None)preprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = Nonepeft_config: typing.Optional[ForwardRef('PeftConfig')] = None )

تدريب

< >

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

المعاملات

  • resume_from_checkpoint (str أو bool، اختياري) — إذا كان str، فهو المسار المحلي لنقطة تفتيش محفوظة بواسطة نسخة سابقة من Trainer. وإذا كان bool ويساوي True، يتم تحميل آخر نقطة تفتيش في args.output_dir كما حفظتها نسخة سابقة من Trainer. إذا كانت موجودة، فسيستأنف التدريب من حالات النموذج/المُحسِّن/المُجدوِل المحمَّلة هنا.
  • trial (optuna.Trial أو dict[str, Any]، اختياري) — التجربة أو قاموس المعاملات الفائقة للبحث في المعاملات الفائقة.
  • ignore_keys_for_eval (list[str]، اختياري) — قائمة بالمفاتيح في مخرجات النموذج الخاص بك (إذا كان قاموسًا) التي يجب تجاهلها عند جمع التوقعات للتقييم أثناء التدريب.

يعيد

~trainer_utils.TrainOutput

كائن يحتوي على عدد الخطوات العالمية، وخسارة التدريب، والمقاييس.

نقطة الدخول الرئيسية للتدريب.

generate_on_policy_outputs

< >

( modelinputsgeneration_config )

save_model

< >

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

سيحفظ النموذج، بحيث يمكنك إعادة تحميله باستخدام from_pretrained().

سيتم الحفظ من العملية الرئيسية فقط.

push_to_hub

< >

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

المعاملات

  • commit_message (str، اختياري، الافتراضي "End of training") — الرسالة التي تُرسل عند الدفع.
  • blocking (bool، اختياري، الافتراضي True) — ما إذا كان ينبغي للدالة أن تُرجع فقط بعد اكتمال git push.
  • token (str، اختياري، القيمة الافتراضية None) — رمز (Token) يملك صلاحية الكتابة لتجاوز الحجج الأصلية الخاصة بـ Trainer.
  • revision (str، اختياري) — مراجعة git التي سيتم الالتزام منها. الافتراضي هو رأس فرع “main”.
  • kwargs (dict[str, Any]، اختياري) — معلمات إضافية تُمرَّر إلى ~Trainer.create_model_card.

ارفع self.model وself.processing_class إلى مركز النماذج 🤗 في المستودع self.args.hub_model_id.

GOLDConfig

فئة trl.experimental.gold.GOLDConfig

< >

( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 1e-07lr_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 = Truelabel_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 = Nonechat_template_path: str | None = Nonedataset_text_field: str = 'text'dataset_kwargs: dict[str, typing.Any] | str | None = Nonedataset_num_proc: int | None = Noneeos_token: str | None = Nonemax_length: int | None = 1024truncation_mode: str = 'keep_start'shuffle_dataset: bool = Falsepacking: bool = Falsepacking_strategy: str = 'bfd'padding_free: bool = Falsepad_to_multiple_of: int | str | None = 'auto'eval_packing: bool | None = Nonecompletion_only_loss: bool | None = Noneassistant_only_loss: bool = Falseloss_type: str = 'nll'activation_offloading: bool = Falsepad_token: str | None = Nonetemperature: float = 0.9top_p: float = 0.95top_k: int = 0lmbda: float = 0.5beta: float = 0.5max_completion_length: int = 128teacher_model_name_or_path: str | None = Noneteacher_model_revision: str | None = Noneteacher_model_init_kwargs: dict[str, typing.Any] | str | None = Noneteacher_tokenizer_name_or_path: str | None = Nonedisable_dropout: bool = Trueseq_kd: bool = Falsenum_generations: int = 1generation_batch_size: int | None = Noneuse_uld_loss: bool = Falseuld_token_merge_strategy: str = 'observed'use_extended_uld: bool = Trueuld_use_hybrid_loss: bool = Falseuld_hybrid_matched_weight: float | None = Noneuld_hybrid_unmatched_weight: float | None = Noneuld_crossentropy_weight: float = 0.0uld_distillation_weight: float = 1.0uld_student_temperature: float = 1.0uld_teacher_temperature: float = 1.0uld_skip_student_eos: bool = Trueuld_skip_teacher_eos: bool = Truextoken_loss_type: str = 'none'xtoken_projection_matrix_path: str | None = Nonextoken_temperature: float = 1.0xtoken_dynamic_scaling: bool = Truextoken_uncommon_topk: int = 8192xtoken_vocab_topk: int = 8192xtoken_kl_weight: float = 1.0xtoken_ce_scale: float = 0.1use_vllm: bool = Falsevllm_mode: str = 'colocate'vllm_server_base_url: str | None = Nonevllm_server_host: str = '0.0.0.0'vllm_server_port: int = 8001vllm_server_timeout: float = 240.0vllm_group_port: int = 51216vllm_gpu_memory_utilization: float = 0.9vllm_tensor_parallel_size: int = 1vllm_max_model_length: int | None = Nonevllm_model_impl: str = 'vllm'vllm_structured_outputs_regex: str | None = Nonevllm_sync_frequency: int = 1vllm_enable_sleep_mode: bool = Falselog_completions: bool = Falselog_completions_steps: int = 100num_completions_to_print: int | None = Nonewandb_log_unique_prompts: bool = Truecallbacks: list[str] = <factory> )

المعاملات التي تتحكم في التوليد وحلقة التدريب

  • temperature (float، اختياري، القيمة الافتراضية 0.9) — درجة الحرارة للعينات. كلما زادت درجة الحرارة، زادت عشوائية المكملات.
  • top_p (float، اختياري، القيمة الافتراضية 0.95) — إذا تم ضبطه على قيمة float < 1، فإن مجموعة الرموز الأكثر احتمالاً الأصغر التي تضيف احتمالاتها إلى top_p أو أعلى هي التي تُحتفظ بها للتوليد.
  • top_k (int، اختياري، القيمة الافتراضية 0) — عدد رموز المفردات ذات أعلى احتمالات التي يجب الاحتفاظ بها لتصفية top-k. إذا كانت القيمة 0، يتم تعطيل تصفية top-k وتُعتبر جميع الرموز.
  • lmbda (float، اختياري، القيمة الافتراضية 0.5) — معامل Lambda الذي يتحكم في نسبة بيانات الطالب (أي نسبة المخرجات التي يولدها الطالب وفق السياسة).
  • beta (float، اختياري، القيمة الافتراضية 0.5) — معامل الاستيفاء بين 0.0 و1.0 لخسارة تباعد جنسن-شونون المعمّم. عندما تكون قيمة beta هي 0.0، تكون الخسارة هي تباعد KL. وعندما تكون قيمة beta هي 1.0، تكون الخسارة هي تباعد KL العكسي.
  • max_completion_length (int، اختياري، القيمة الافتراضية 128) — الحد الأقصى لعدد الرموز (tokens) التي سيتم توليدها لكل استكمال.
  • teacher_model_name_or_path (str, اختياري) — اسم النموذج أو المسار الخاص بنموذج المعلم. إذا كان None، فسيكون نموذج المعلم هو نفسه النموذج قيد التدريب.
  • teacher_model_revision (str أو None، اختياري، القيمة الافتراضية None) — مراجعة نموذج المعلم (مثل اسم الفرع، أو العلامة، أو تجزئة الالتزام). إذا كانت None، تُستخدم المراجعة الافتراضية.
  • teacher_model_init_kwargs (dict[str, Any], اختياري) — حجج الكلمات المفتاحية التي يتم تمريرها إلى AutoModelForCausalLM.from_pretrained عند إنشاء نموذج المعلم من نص. كما تُستخدم قيمة revision عند تحميل فئة معالجة المعلم.
  • teacher_tokenizer_name_or_path (str, اختياري) — اسم أو مسار مُجزِّئ الرموز (tokenizer) لنموذج المعلم. إذا كان None عند استخدام خسارة ULD، فسيتم استخدام نفس مُجزِّئ الرموز المستخدم في نموذج الطالب (غير موصى به للتقطير بين مُجزِّئات رموز مختلفة).
  • disable_dropout (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تعطيل إسقاط العينة (dropout) في النموذج.
  • seq_kd (bool، اختياري، القيمة الافتراضية False) — المعامل الذي يتحكم في ما إذا كان سيتم تنفيذ KD على مستوى التسلسل (يمكن النظر إليه على أنه تدريب موجه على المخرجات التي يولّدها المعلم).
  • num_generations (int، اختياري، القيمة الافتراضية 1) — عدد الأجيال لكل موجه. يُكرَّر كل موجه هذا العدد من المرات في دفعة التوليد.
  • generation_batch_size (int أو None، اختياري، القيمة الافتراضية None) — عدد الموجهات الفريدة لكل عامل في كل خطوة من خطوات المُحسِّن. إذا كانت None، يتم حسابها من (per_device_train_batch_size * gradient_accumulation_steps) // num_generations.

المعاملات التي تتحكم في خسارة ULD

  • use_uld_loss (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب استخدام خسارة Universal Logit Distillation (ULD) بدلاً من خسارة Generalized Jensen-Shannon Divergence.
  • use_extended_uld (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تفعيل محاذاة ULD الممتدة التي تستخدم أدوات الترميز (tokenizers) لمحاذاة ودمج احتمالات الرموز (tokens) عبر ترميزات الطالب والمعلم. عند تعيين True، سيقوم المدرب بحساب خرائط الرموز ودمج الاحتمالات للرموز المقسمة؛ أما عند تعيين False، فستستخدم ULD اقتطاعًا موضعيًا بسيطًا كما في ورقة ULD الأصلية. عيّن False لأدوات الترميز التي ليست من نوع ByteLevel ولا من نوع BPE مع تراجع إلى البايتات (byte-fallback) (مثل Llama 2).
  • uld_token_merge_strategy (str، اختياري، القيمة الافتراضية "observed") — الاستراتيجية المستخدمة لمحاذاة قيم logits للإجابات ودمج احتمالات الرموز في خسارة ULD. عند استخدام "observed"، تُقصّ قيم logits للإجابات عند مواضع الإجابة، وتُدمج الرموز المقسمة (عندما يكون use_extended_uld=True) بضرب التوزيع الهامشي عند الموضع الأول في الاحتمالات الشرطية القياسية للرموز اللاحقة الفعلية. عند استخدام "bayesian"، يُزاح مقطع logits للإجابة بموضع واحد إلى الأمام بحيث يتنبأ probs[k] بـ token_ids[k] (قاعدة السلسلة)، وتُدمج الرموز المقسمة باستخدام التوزيع الكامل للموضع الأخير، مشروطًا بالرموز السابقة الفعلية، مضروبًا في الاحتمالات القياسية للرموز السابقة. يُطبَّق إزاحة محاذاة logits سواء كان use_extended_uld مفعّلًا أم لا.
  • uld_use_hybrid_loss (bool, اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام دالة خسارة هجينة تجمع بين خسارة ULD وخسارة JSD. عند تعيين True، تكون الخسارة النهائية مزيجًا من JSD لتعيينات الرموز المعروفة وULD لتعيينات الرموز غير المعروفة.
  • uld_hybrid_matched_weight (float أو None، اختياري) — الوزن المخصص لمكوّن خسارة الرموز المطابقة عند استخدام خسارة ULD الهجينة + JSD. يقوم هذا الوزن بمقياس خسارة JSD المحسوبة على الرموز التي يوجد بينها تطابق مباشر بين ترقيمات الطالب والمعلم. إذا كانت None، يتم استخدام وزن تكيفي بناءً على تداخل المفردات. يجب ضبطه معًا مع uld_hybrid_unmatched_weight (كلاهما None أو كلاهما float).
  • uld_hybrid_unmatched_weight (float أو None، اختياري) — الوزن المخصص لمكوّن خسارة الرموز غير المطابقة عند استخدام خسارة ULD الهجينة + JSD. يقوم هذا الوزن بمقياس خسارة ULD المحسوبة على الرموز التي لا يوجد لها تطابق مباشر بين ترقيمات الطالب والمعلم. إذا كانت None، يتم استخدام وزن تكيفي بناءً على تداخل المفردات. يجب ضبطه معًا مع uld_hybrid_matched_weight (كلاهما None أو كلاهما float).
  • uld_crossentropy_weight (float، اختياري، القيمة الافتراضية 0.0) — الوزن لمكوّن خسارة الانتروبيا المتقاطعة في خسارة ULD. إذا كانت القيمة 0، تُستخدم خسارة تقطير ULD فقط.
  • uld_distillation_weight (float، اختياري، القيمة الافتراضية 1.0) — الوزن المخصص لمكوّن خسارة التقطير في خسارة ULD.
  • uld_student_temperature (float، اختياري، القيمة الافتراضية 1.0) — درجة الحرارة الخاصة بـ logits للطلاب في حساب خسارة ULD.
  • uld_teacher_temperature (float، اختياري، القيمة الافتراضية 1.0) — درجة الحرارة لقيم المعلم (teacher logits) في حساب خسارة ULD.
  • uld_skip_student_eos (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تجاوز رمز EOS للطالب في حساب خسارة ULD.
  • uld_skip_teacher_eos (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تجاوز رمز EOS للمعلم في حساب خسارة ULD.

معاملات KD بين المُرمِّزات عبر X-Token (https

  • xtoken_loss_type (str، اختياري، القيمة الافتراضية "none") — نوع KD بين المُرمِّزات: "none" (معطَّل)، أو "p_kl" (KL الإسقاط)، أو "h_kl" (KL هجين مع مجموعة مشتركة مرسَلة). يتطلب teacher_tokenizer_name_or_path وxtoken_projection_matrix_path.
  • xtoken_projection_matrix_path (str, اختياري) — مسار إلى ملف مصفوفة إسقاط محسوبة مسبقًا. مطلوب عندما xtoken_loss_type != "none".
  • xtoken_temperature (float، اختياري، القيمة الافتراضية 1.0) — درجة الحرارة T لخسارة X-Token KD؛ تُضرب الخسارة في T² (Hinton 2015).
  • xtoken_dynamic_scaling (bool، اختياري، القيمة الافتراضية True) — قم بتقيد KD بواسطة stop_gradient(abs(CE) / abs(KD)) لكل microbatch لموازنة أحجام الخسارة (المعادلة 7 في الورقة).
  • xtoken_uncommon_topk (int، اختياري، القيمة الافتراضية 8192) — H-KL: تحديد مقارنة L1 غير الشائعة المرتبة إلى أعلى k رمز لكل جانب.
  • xtoken_vocab_topk (int، اختياري، القيمة الافتراضية 8192) — P-KL: تقييد KL على أعلى k رموز للمعلم على مستوى المجموعة الكلية بناءً على أقصى قيمة logit. يتفاعل مع مصفوفة الإسقاط --top-k: فرموز المعلم التي تقع خارج نطاق المصفوفة تحصل على كتلة طالب مُسقطة شبه معدومة وتسيطر على KL، لذا فإن القيم الأصغر تركز الخسارة على الرموز التي يمكن للطالب مطابقتها.
  • xtoken_kl_weight (float، اختياري، القيمة الافتراضية 1.0) — الوزن الخاص بحد X-Token KD عندما يكون xtoken_dynamic_scaling=False.
  • xtoken_ce_scale (float، اختياري، القيمة الافتراضية 0.1) — معامل التدرج لحَد CE في خسارة X-Token عندما يكون xtoken_dynamic_scaling=False.

المعاملات التي تتحكم في تكامل vLLM

  • use_vllm (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام vLLM لتوليد الإكمالات من نموذج الطالب. يتطلب تثبيت vllm.
  • vllm_mode (str، اختياري، القيمة الافتراضية "colocate") — الوضع الخاص بتكامل vLLM للطالب. إما "server" (الاتصال بخادم vLLM قيد التشغيل) أو "colocate" (تشغيل vLLM في نفس العملية).
  • vllm_server_host (str، اختياري، القيمة الافتراضية "0.0.0.0") — عنوان مضيف خادم vLLM لنموذج الطالب (إذا كان vllm_mode="server").
  • vllm_server_port (int, اختياري، القيمة الافتراضية 8001) — منفذ خادم vLLM لنموذج الطالب (إذا كان vllm_mode="server").
  • vllm_server_timeout (float، اختياري، القيمة الافتراضية 240.0) — مهلة الاتصال بخادم vLLM للطالب (إذا كان vllm_mode="server").
  • vllm_gpu_memory_utilization (float, اختياري، القيمة الافتراضية 0.9) — نسبة استخدام ذاكرة وحدة معالجة الرسوميات (GPU) لمحرك vLLM الخاص بالطالب المُجمَّع (إذا كان vllm_mode="colocate"). يُوصى بتعيين قيمة منخفضة لهذا المعامل إذا كان نموذج الطالب ونموذج المعلم يتشاركان نفس وحدة معالجة الرسوميات.
  • vllm_tensor_parallel_size (int، اختياري، القيمة الافتراضية 1) — حجم التوازي للتوتر لمحرك vLLM للطالب المُقام معًا (إذا كان vllm_mode="colocate").
  • vllm_structured_outputs_regex (str، اختياري) — نمط Regex للمخرجات المهيكلة في vLLM لنموذج الطالب.
  • vllm_server_base_url (str, اختياري) — العنوان الأساسي لخادم vLLM (مثل "http://localhost:8001"). إذا تم تقديمه، يتم تجاهل vllm_server_host و vllm_server_port.
  • vllm_group_port (int، اختياري، القيمة الافتراضية 51216) — منفذ لمجموعة تحديث أوزان vLLM (مُوصِّل NCCL). ما لم يكن المنفذ مشغولاً، فلا حاجة إلى تغييره.
  • vllm_max_model_length (int, اختياري) — الحد الأقصى لطول تسلسل النموذج لمحرك vLLM المتشارك الموقع عندما يكون vllm_mode="colocate". القيمة الافتراضية هي الحد الأقصى لطول سياق النموذج.
  • vllm_model_impl (str، اختياري، القيمة الافتراضية "vllm") — خلفية التنفيذ المستخدمة للنموذج في vLLM. استخدم "vllm" (الافتراضي) أو "transformers".
  • vllm_sync_frequency (int، اختياري، القيمة الافتراضية 1) — التردد (بخطوات التدريب) لمزامنة أوزان نموذج الطالب مع محرك vLLM. اضبطه على 1 للمزامنة بعد كل خطوة.
  • vllm_enable_sleep_mode (bool، اختياري، القيمة الافتراضية False) — تفعيل وضع السكون في vLLM لتفريغ أوزان الطالب/الذاكرة المؤقتة أثناء خطوة المُحسِّن. يُبقي استخدام ذاكرة وحدة معالجة الرسوميات منخفضًا، لكن استيقاظ المحرّك يضيف زمن انتقال بين المضيف والوحدة.

المعاملات التي تتحكم في التسجيل

  • log_completions (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تسجيل عينة من أزواج (الموجّه، الإكمال) كل logging_steps خطوات. إذا كان rich مثبّتًا، فسيتم طباعة العينة. إذا كان تسجيل wandb مفعّلًا، فسيتم تسجيلها في wandb.
  • log_completions_steps (int، اختياري، القيمة الافتراضية 100) — عدد الخطوات بين تسجيل أزواج (الموجز، الإكمال). يُستخدم فقط إذا كان log_completions مضبوطاً على True.
  • num_completions_to_print (int أو None، اختياري) — عدد المكملات التي سيتم طباعتها باستخدام rich. إذا كانت None، يتم تسجيل جميع المكملات.
  • wandb_log_unique_prompts (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تسجيل الموجهات الفريدة في wandb. سيؤدي هذا إلى إنشاء تشغيل جديد لكل موجه فريد.
  • callbacks (list[str]، اختياري، الافتراضي []) — المكالمات العكسية التي سيتم تشغيلها أثناء التدريب.

فئة التهيئة لـ experimental.gold.GOLDTrainer.

تتضمن هذه الفئة فقط المعلمات الخاصة بتدريب GOLD. للحصول على قائمة كاملة بحجج التدريب، يرجى الرجوع إلى توثيق TrainingArguments و SFTConfig.

تتميز هذه المعلمات بقيم افتراضية مختلفة عن TrainingArguments:

  • learning_rate: القيمة الافتراضية هي 1e-7 بدلاً من 5e-5.
Update on GitHub