Spaces:
Sleeping
Sleeping
import torch | |
from datasets import load_from_disk | |
from transformers import ( | |
AutoModelForSeq2SeqLM, | |
AutoTokenizer, | |
DataCollatorForSeq2Seq, | |
Trainer, | |
TrainingArguments, | |
) | |
from src.TextSummarizer.entity import entities | |
class ModelTrainer: | |
""" | |
Train a model. | |
""" | |
def __init__(self, config: entities.ModelTrainerConfig): | |
self.config = config | |
def train(self): | |
""" | |
Train the model. | |
""" | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
tokenizer = AutoTokenizer.from_pretrained(self.config.model_ckpt) | |
model_pegasus = AutoModelForSeq2SeqLM.from_pretrained(self.config.model_ckpt).to(device) | |
seq2seq_data_collator = DataCollatorForSeq2Seq(tokenizer, model=model_pegasus) | |
#loading data | |
dataset = load_from_disk(self.config.data_path) | |
# trainer_args = TrainingArguments( | |
# output_dir=self.config.root_dir, num_train_epochs=self.config.num_train_epochs, warmup_steps=self.config.warmup_steps, | |
# per_device_train_batch_size=self.config.per_device_train_batch_size, per_device_eval_batch_size=self.config.per_device_train_batch_size, | |
# weight_decay=self.config.weight_decay, logging_steps=self.config.logging_steps, | |
# evaluation_strategy=self.config.evaluation_strategy, eval_steps=self.config.eval_steps, save_steps=1e6, | |
# gradient_accumulation_steps=self.config.gradient_accumulation_steps | |
# ) | |
trainer_args = TrainingArguments( | |
output_dir=self.config.root_dir, | |
num_train_epochs=1, | |
warmup_steps=500, | |
per_device_train_batch_size=1, | |
per_device_eval_batch_size=1, | |
weight_decay=0.01, | |
logging_steps=10, | |
evaluation_strategy='steps', | |
eval_steps=500, | |
save_steps=1e6, | |
gradient_accumulation_steps=16 | |
) | |
trainer = Trainer( | |
model=model_pegasus, | |
args=trainer_args, | |
tokenizer=tokenizer, | |
data_collator=seq2seq_data_collator, | |
train_dataset=dataset["train"], | |
eval_dataset=dataset["validation"]) | |
# trainer.train() | |
## Save model | |
model_pegasus.save_pretrained(self.config.model_path) | |
## Save tokenizer | |
tokenizer.save_pretrained(self.config.tokenizer_path) | |