TRL documentation
مدرب التشتيت العام للوجيتات عبر الإنترنت (GOLD)
مدرب التشتيت العام للوجيتات عبر الإنترنت (GOLD)
نظرة عامة
يمثل التعميم في تقطير اللوغيتات عبر الإنترنت (GOLD) امتدادًا لتقطير اللوغيتات الشامل (ULD) يدعم أزواج الطالب/المعلم التي تستخدم مُجزِّئات (tokenizers) مختلفة. يقوم هذا النهج بمواءمة المقاطع النصية الناتجة عن كلا المُجزِّئين ودمج اللوغيتات المرتبطة بها بحيث لا تُستبعد أي رموز إكمال. وهذا يتيح تقطير المعرفة بين مُجزِّئات مختلفة، بما في ذلك عائلات النماذج المختلطة (على سبيل المثال، طلاب من عائلة LLaMA مع معلمين من عائلة Qwen).
الخصائص الرئيسية:
- محاذاة بين مُجزّئات الرموز – يقوم GOLD بفك ترميز رموز الطالب والمعلم بشكل تدريجي، ويجمع المقاطع التي تحمل النص المرئي نفسه في مجموعات، ودمج الاحتمالات داخل كل مجموعة. يضمن هذا أن تُحسب حدود الخسارة على الإكمال الكامل حتى عندما تختلف حدود الرموز.
- خسارة ULD الهجينة – عند تفعيل
uld_use_hybrid_loss، يقارن GOLD تطابقات المفردات الدقيقة مباشرةً ويعود إلى خسارة ULD الأصلية القائمة على الاحتمالات المرتبة للرموز غير المطابقة. وهذا يحسّن الاستقرار للطلاب الذين تتداخل مفرداتهم جزئيًا فقط مع مفردات المعلم. - تكامل سلس مع 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)هي احتمالات شرطية قياسية للرموز الفعلية التي تم توليدها
رؤية أساسية: يتم استخراج احتمالات الشرطية لـ رموز الاستمرار الفعلية كمقاييس فقط. ثم يتم توسيع التوزيع الهامشي الكامل عند الموضع الأول عن طريق ضرب هذه الاحتمالات المقاسة.
يضمن هذا:
- الاحتمال المشترك الصحيح للترتيب الفعلي المولَّد (بموجب قاعدة السلسلة)
- تقريب معقول للرموز المضادة للواقع (مُقيّمة على أساس احتمالية الاستكمال نفسها)
- التوزيعات غير المعيارية التي تحافظ على الاحتمالات النسبية الصحيحة لحساب خسارة 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
< source >( 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 )
تدريب
< 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
المعاملات
- 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
كائن يحتوي على عدد الخطوات العالمية، وخسارة التدريب، والمقاييس.
نقطة الدخول الرئيسية للتدريب.
سيحفظ النموذج، بحيث يمكنك إعادة تحميله باستخدام from_pretrained().
سيتم الحفظ من العملية الرئيسية فقط.
push_to_hub
< source >( 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
< source >( 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.