| name | run2_simpo-trainer-initialization |
| description | Proper initialization of SimPOTrainer with model loading and args setup |
SimPOTrainer Initialization and Setup
Critical Initialization Requirements
The SimPOTrainer extends HuggingFace's Trainer and requires proper initialization to function:
1. Parent Class Initialization (MUST UNCOMMENT)
super().__init__(
model=model,
args=args,
data_collator=data_collator,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
tokenizer=tokenizer,
model_init=model_init,
compute_metrics=compute_metrics,
callbacks=callbacks,
optimizers=optimizers,
preprocess_logits_for_metrics=preprocess_logits_for_metrics,
)
Why Critical: Sets up self.args which is required by all loss functions and training logic.
2. Model Handling
If model is a string (model ID), it must be loaded before passing to parent:
if isinstance(model, str):
model_init_kwargs = args.model_init_kwargs or {}
model = AutoModelForCausalLM.from_pretrained(model, **model_init_kwargs)
Why: The parent Trainer class expects a loaded model instance, not a string ID.
3. Required Arguments (SimPOConfig)
The args parameter must be a SimPOConfig instance with at minimum:
args = SimPOConfig(
output_dir="./simpo_output",
beta=2.0,
gamma_beta_ratio=0.25,
)
Initialization Checklist
Common Initialization Errors
Error 1: AttributeError: 'SimPOTrainer' object has no attribute 'args'
Cause: super().__init__() not called
Fix: Uncomment the super().init() block in init
Error 2: AttributeError: 'str' object has no attribute 'to'
Cause: Passing string model ID without loading it first
Fix: Uncomment the model loading logic that converts string to loaded model
Error 3: TypeError: tokenizer must be specified
Cause: tokenizer parameter is None
Fix: Pass a valid PreTrainedTokenizerBase instance (or handle gracefully)
Testing Initialization
import torch
from scripts.simpo_trainer import SimPOTrainer
from scripts.simpo_config import SimPOConfig
config = SimPOConfig(output_dir="./test_output")
trainer = SimPOTrainer(
model="sshleifer/tiny-gpt2",
args=config
)
assert hasattr(trainer, 'args'), "args not set"
assert hasattr(trainer, 'model'), "model not set"
assert trainer.args.beta == 2.0, "default beta not set"
print("Initialization successful!")
Access to Config Values in Methods
Once properly initialized, any method can access config values:
def some_method(self):
beta = self.args.beta
gamma_ratio = self.args.gamma_beta_ratio
device = self.args.device
lr = self.args.learning_rate
This is essential for the simpo_loss() method to compute gamma correctly.