Оптимизация LLM с использованием DPO: устранение неполадок со значениями потерь во время оценкиPython

Программы на Python
Anonymous
Оптимизация LLM с использованием DPO: устранение неполадок со значениями потерь во время оценки

Сообщение Anonymous »

Я хочу оптимизировать LLM на основе DPO. Когда я попытался обучить и оценить модель, но в результатах оценки есть значения nan.

Код: Выделить всё

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import Dataset
from trl import DPOTrainer, DPOConfig
from datasets import load_dataset

model_name = "EleutherAI/pythia-14m"
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

def preprocess_data(item):
return {
'prompt': 'Instruct: ' + item['prompt'] + '\n',
'chosen': 'Output: ' + item['chosen'],
'rejected': 'Output: ' + item['rejected']
}

dataset = load_dataset('jondurbin/truthy-dpo-v0.1', split="train")
dataset = dataset.map(preprocess_data)
split_dataset = dataset.train_test_split(test_size=0.1)  # Adjust the test_size as needed
train_dataset = split_dataset['train']
val_dataset = split_dataset['test']

print(f"Length of train data: {len(train_dataset)}")
print(f"Length of validation data: {len(val_dataset)}")

# Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.unk_token

# Model to fine-tune
model = AutoModelForCausalLM.from_pretrained(
model_name,
low_cpu_mem_usage=True,
torch_dtype=torch.float16
).to(device)

model_ref = AutoModelForCausalLM.from_pretrained(
model_name,
low_cpu_mem_usage=True,
torch_dtype=torch.float16
).to(device)

# Config
training_args = DPOConfig(
output_dir="./output",
beta=0.1,
max_length=512,
max_prompt_length=128,
remove_unused_columns=False,
)

# Load trainer
dpo_trainer = DPOTrainer(
model,
model_ref,
args=training_args,
train_dataset=train_dataset,
eval_dataset=val_dataset,
tokenizer=tokenizer,
)

# Train
dpo_trainer.train()

# Evaluate
evaluation_results = dpo_trainer.evaluate()
print("Evaluation Results:", evaluation_results)
Это код, используемый для обучения простой модели «pythia-14m». Ниже представлен результат.

Код: Выделить всё

Evaluation Results: {'eval_loss': nan, 'eval_runtime': 0.5616, 'eval_samples_per_second': 181.61, 'eval_steps_per_second': 12.463, 'eval_rewards/chosen': nan, 'eval_rewards/rejected': nan, 'eval_rewards/accuracies': 0.0, 'eval_rewards/margins': nan, 'eval_logps/rejected': nan, 'eval_logps/chosen': nan, 'eval_logits/rejected': nan, 'eval_logits/chosen': nan, 'epoch': 3.0}
есть идеи, почему значение nan во время оценки? что-то не так в коде?

Подробнее здесь: https://stackoverflow.com/questions/786 ... evaluation

Вернуться в «Python»