Трансформеры с Python 3.12.3 выдают множество ошибокPython

Программы на Python
Anonymous
 Трансформеры с Python 3.12.3 выдают множество ошибок

Сообщение Anonymous »

Я установил Python 3.12.3 на сервер Ubuntu. Я пытался установить преобразователи, токенизаторы, наборы данных и ускорение, чтобы использовать Seq2SeqTrainer в преобразователях.
Я использовал виртуальную среду для установки, чтобы гарантировать, что установка пакетов не повлияет на исходную систему. После активации виртуальной среды я установил вышеуказанные пакеты через:

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

pip install transformers tokenizers accelerate --upgrade
который установил следующие версии: ускорение 1.11.0 преобразователи 4.57.1 ​​токенизаторы 0.22.0 (последняя версия на момент написания статьи).
Минимальные тестовые коды следующие:

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

from transformers import (
AutoModelForSeq2SeqLM,
AutoTokenizer,
BartForConditionalGeneration,
BertTokenizer,
DataCollatorForSeq2Seq,
EarlyStoppingCallback,
EncoderDecoderModel,
IntervalStrategy,
Seq2SeqTrainer,
Seq2SeqTrainingArguments,
Text2TextGenerationPipeline
)
from datasets import Dataset, DatasetDict, load_dataset, disable_progress_bar
import evaluate
import numpy as np

default_dataset = "raptorkwok/cantonese-traditional-chinese-parallel-corpus-gen3"
base_model_name = "fnlp/bart-base-chinese"

canton_ds = load_dataset(default_dataset)
yuezh_train = canton_ds["train"]
yuezh_test = canton_ds["test"]
yuezh_val = canton_ds["validation"]
print("Train Dataset Count: ", len(yuezh_train))
print("Test Dataset Count: ", len(yuezh_test))
print("Validation Dataset Count: ", len(yuezh_val))
yuezh_master = DatasetDict({"train": yuezh_train, "test": yuezh_test, "val": yuezh_val})

base_tokenizer = BertTokenizer.from_pretrained(base_model_name)
base_model = BartForConditionalGeneration.from_pretrained(base_model_name, output_hidden_states = True)

# ======================================================================================
# Process Dataset and Tokenization
# ======================================================================================
print("Training: Process Dataset and Tokenization")
def _filter_valid_examples(example):
return (
isinstance(example["yue"], str) and example["yue"].strip() and
isinstance(example["zh"], str) and example["zh"].strip()
)

def _preprocess_dataset(examples):
inputs = [text for text in examples["yue"]]
targets = [text for text in examples["zh"]]
model_inputs = base_tokenizer(inputs, text_target=targets, max_length=550, truncation=True)
return model_inputs

def _postprocess_text(preds, labels):
preds = [pred.strip() for pred in preds]
labels = [[label.strip()] for label in labels]

return preds, labels

# Filter with valid examples only
filtered_yuezh_master = yuezh_master.filter(_filter_valid_examples)

# Tokenization
tokenized_yuezh_master = filtered_yuezh_master.map(_preprocess_dataset, batched=True)

# remove unused columns
tokenized_yuezh_master = tokenized_yuezh_master.remove_columns(yuezh_train.column_names)

metric_bleu = evaluate.load("sacrebleu")
metric_chrf = evaluate.load("chrf")

data_collator = DataCollatorForSeq2Seq(tokenizer=base_tokenizer, model=base_model)

def _compute_metrics(eval_preds): # For Trainer
preds, labels = eval_preds
if isinstance(preds, tuple):
preds = preds[0]
decoded_preds = base_tokenizer.batch_decode(preds, skip_special_tokens=True)

labels = np.where(labels != -100, labels, base_tokenizer.pad_token_id)
decoded_labels = base_tokenizer.batch_decode(labels, skip_special_tokens=True)
decoded_preds, decoded_labels = _postprocess_text(decoded_preds, decoded_labels)

result_bleu = metric_bleu.compute(predictions=decoded_preds, references=decoded_labels, tokenize='zh')
result_chrf = metric_chrf.compute(predictions=decoded_preds, references=decoded_labels, word_order=2)
results = {"bleu": result_bleu["score"], "chrf": result_chrf["score"]}

prediction_lens = [np.count_nonzero(pred != base_tokenizer.pad_token_id) for pred in preds]
results["gen_len"] = np.mean(prediction_lens)
results = {k:  round(v, 4) for k, v in results.items()}
return results

model_path = "test_minimal"
batch_size = 8
num_epochs = 1
training_args = Seq2SeqTrainingArguments(
output_dir = model_path,
evaluation_strategy = IntervalStrategy.STEPS,
logging_strategy = "no",
optim = "adamw_torch",
eval_steps = 10000,
save_steps = 10000,
learning_rate = 2e-5,
per_device_train_batch_size = batch_size,
per_device_eval_batch_size = batch_size,
weight_decay = 0.01,
save_total_limit = 1,
num_train_epochs = num_epochs,
predict_with_generate=True,
remove_unused_columns=True,
fp16 = True,
push_to_hub = False,
metric_for_best_model = "bleu",
load_best_model_at_end = True,
report_to = "wandb"
)

trainer = Seq2SeqTrainer(
model = base_model,
args = training_args,
train_dataset = tokenized_yuezh_master['train'],
eval_dataset = tokenized_yuezh_master['val'],
tokenizer = base_tokenizer,
data_collator = data_collator,
compute_metrics = _compute_metrics,
)
trainer.train()
Появляется следующая ошибка:

AttributeError: AcceleratorState Объект не имеет атрибутараспределенный_тип. Это происходит, если был вызван AcceleratorState._reset_state() и Accelerator или PartialState не был повторно инициализирован.

Мои коды не использовали Accelerator; Внутренние коды Трансформаторов используют его. После поиска в Интернете я обнаружил, что это вызвано проблемами с версией. Затем я попробовал следующие комбинации версий (все, что смог найти в Интернете):
Accelerate 1.4.0 Transformers 4.37.2 Tokenizers 0.15.2

TypeError: Accelerator.init() получил неожиданный аргумент ключевого слова 'dispatch_batches'

ускорить преобразователи 0.15.0 4.35.2 токенизаторы 0.14.0
ускорить преобразователи 0.28.0 4.36.0 токенизаторы 0.15.2

Ошибка атрибута: Объект AcceleratorState не имеет атрибута distributed_type

Мой вопрос: Как мне запустить коды поездов без ошибок в Python 3.12.3? В идеале используйте самую последнюю возможную версию, чтобы свести к минимуму вероятность возникновения ошибок.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -of-errors

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