mirror of
https://github.com/wassname/Open-Assistant.git
synced 2026-06-30 16:40:05 +08:00
[fix] Fix missing accuracy and eval loss
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from typing import Callable, List, Optional, Tuple, Union, Dict
|
||||
import os
|
||||
os.environ['WANDB_PROJECT'] = 'reward-model'
|
||||
from typing import Any, Callable, List, Optional, Tuple, Union, Dict
|
||||
import torch
|
||||
from torch import nn
|
||||
import numpy as np
|
||||
@@ -60,6 +62,29 @@ class RankTrainer(Trainer):
|
||||
|
||||
return (loss, outputs) if return_outputs else loss
|
||||
|
||||
def _compute_loss(self, model, inputs):
|
||||
inputs = self._prepare_inputs(inputs)
|
||||
outputs = model(**inputs)
|
||||
logits = outputs.get("logits").view(-1, 2)
|
||||
if self.loss_function == 'rank':
|
||||
loss = self.loss_fct(logits[:, 0], logits[:, 1])
|
||||
else:
|
||||
loss = self.loss_fct(logits, torch.zeros(logits.shape[0], device=logits.device, dtype=torch.long))
|
||||
|
||||
return loss, logits
|
||||
|
||||
def prediction_step(self, model: nn.Module, inputs: Dict[str, Union[torch.Tensor, Any]], prediction_loss_only: bool, ignore_keys: Optional[List[str]] = None) -> Tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]:
|
||||
|
||||
with torch.no_grad():
|
||||
# compute loss on predict data
|
||||
loss, logits = self._compute_loss(model, inputs)
|
||||
|
||||
loss = loss.mean().detach()
|
||||
labels = torch.zeros(logits.shape[0], device=logits.device, dtype=torch.long)
|
||||
if self.args.prediction_loss_only:
|
||||
return (loss, None, None)
|
||||
|
||||
return (loss, logits, labels)
|
||||
|
||||
if __name__ == "__main__":
|
||||
model_name = 'bigscience/bloomz-560m'
|
||||
@@ -67,26 +92,25 @@ if __name__ == "__main__":
|
||||
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=1, problem_type='regression')
|
||||
tokenizer = get_tokenizer(model_name)
|
||||
args = CustomTrainingArguments(
|
||||
output_dir=f"outputs/{model_name}-finetuned",
|
||||
fp16=True,
|
||||
output_dir=f"{model_name}-finetuned",
|
||||
num_train_epochs=4,
|
||||
warmup_steps=500,
|
||||
loss_function='rank',
|
||||
learning_rate=3e-5,
|
||||
# half_precision_backend="apex",
|
||||
fp16=True,
|
||||
gradient_checkpointing=False,
|
||||
gradient_accumulation_steps=6,
|
||||
per_device_train_batch_size=12,
|
||||
gradient_accumulation_steps=5,
|
||||
per_device_train_batch_size=16,
|
||||
per_device_eval_batch_size=5,
|
||||
weight_decay=0.01,
|
||||
max_grad_norm=2.0,
|
||||
logging_steps=10,
|
||||
save_total_limit=4,
|
||||
evaluation_strategy='steps',
|
||||
loss_function='rank',
|
||||
eval_steps=500,
|
||||
save_steps=1000,
|
||||
report_to="wandb",
|
||||
run_name='reward-model'
|
||||
report_to='wandb'
|
||||
)
|
||||
dataset = WebGPT()
|
||||
train, eval = train_val_dataset(dataset)
|
||||
@@ -97,6 +121,7 @@ if __name__ == "__main__":
|
||||
train_dataset=train,
|
||||
eval_dataset=eval,
|
||||
data_collator=collate_fn,
|
||||
tokenizer=tokenizer
|
||||
tokenizer=tokenizer,
|
||||
compute_metrics=compute_metrics
|
||||
)
|
||||
trainer.train()
|
||||
|
||||
Reference in New Issue
Block a user