Код: Выделить всё
The size of tensor a (50) must match the size of tensor b (3) at non-singleton dimension2
Код: Выделить всё
def training(data, Num, tokenizer_name="bert-base-uncased", max_length=50):
tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
subset_key = list(data)[0]
subset_data = data[subset_key][Num]
inner_key = list(subset_data.keys())[Num]
key_list = list(subset_data[inner_key][0].keys())
results = [f"{key_list[0]}: {item[key_list[0]]}, {key_list[1]}: {item[key_list[1]]}"
for item in subset_data[inner_key]]
tokenized_results = tokenizer(results, padding="max_length", truncation=True, max_length=max_length)
return tokenized_results['input_ids'] , tokenized_results['attention_mask']
train_dataset = training(dataset, 0, tokenizer_name="bert-base-uncased", max_length=30)
Код: Выделить всё
from transformers import Trainer, TrainingArguments
import torch
# DeepSpeed
deepspeed_config = {
"zero_optimization": {
"stage": 2,
"offload_optimizer": {"device": "cpu"},
"offload_param": {"device": "cpu"}
},
"train_micro_batch_size_per_gpu": 3,
"gradient_accumulation_steps": 1,
"fp16": {"enabled": "auto"}
}
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
per_device_train_batch_size=3,
per_device_eval_batch_size=3,
num_train_epochs=3,
logging_dir="./logs",
logging_steps=10,
save_steps=500,
save_total_limit=3,
remove_unused_columns=False,
fp16=False,
deepspeed=deepspeed_config
)
trainer = Trainer(
model=model_1,
args=training_args,
train_dataset=train_dataset,
eval_dataset=dataset["train"],
)
device = torch.device("cpu")
model_1.to(device)
trainer.train()
Я проверил, что input_ids и метки имеют одинаковую форму.
Я проверил пакет размер как в конфигурации Trainer, так и в конфигурации DeepSpeed.
Я также убедился, что модель правильно размещена на устройстве (cuda или процессор).
может быть, я' я не уверен.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -deepspeed
Мобильная версия