【问题标题】:RuntimeError: Input tensor at index 3 has invalid shape [2, 2, 16, 128, 64] but expected [2, 4, 16, 128, 64]RuntimeError:索引 3 处的输入张量具有无效的形状 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]
【发布时间】:2021-04-25 13:17:59
【问题描述】:

使用 SageMaker 中的 Huggingface 库微调预训练的 GPT2-medium 模型时出现运行时错误 - ml.p3.8xlarge 实例。

finetuning_gpt2_script.py 包含以下内容,

图书馆:

from transformers import Trainer, TrainingArguments
from transformers import EarlyStoppingCallback
from transformers import GPT2LMHeadModel, GPT2Tokenizer
from transformers import TextDataset,DataCollatorForLanguageModeling

预训练模型:

gpt2_model = GPT2LMHeadModel.from_pretrained("gpt2-medium")
gpt2_tokenizer = GPT2Tokenizer.from_pretrained("gpt2-medium")

训练和测试数据构建:

train_dataset = TextDataset(
          tokenizer=gpt2_tokenizer,
          file_path=train_path,
          block_size=128)
    
test_dataset = TextDataset(
          tokenizer=gpt2_tokenizer,
          file_path=test_path,
          block_size=128)
    
data_collator = DataCollatorForLanguageModeling(
        tokenizer=gpt2_tokenizer, mlm=False,
    )

train_path & test_path 是大小为 145 万和 20 万行数据的非结构化文本数据文件

训练参数:

training_args = TrainingArguments(
        output_dir="./gpt2-finetuned-models", #The output directory
        overwrite_output_dir=True, #overwrite the content of the output directory
        num_train_epochs=1, # number of training epochs
        per_device_train_batch_size=8, # batch size for training #32
        per_device_eval_batch_size=8,  # batch size for evaluation #64
        save_steps=100, # after # steps model is saved
        warmup_steps=500,# number of warmup steps for learning rate scheduler
        prediction_loss_only=True,
        metric_for_best_model = "eval_loss",
        load_best_model_at_end = True,
        evaluation_strategy="epoch",
    )

training_args 是为训练模型而构建的训练参数。

培训师:

trainer = Trainer(
        model=gpt2_model,
        args=training_args,
        data_collator=data_collator,
        train_dataset=train_dataset,
        eval_dataset=test_dataset,
        callbacks = [early_stop_callback],
    )
early_stop_callback = EarlyStoppingCallback(early_stopping_patience  = 3)

培训:

trainer.train()
trainer.save_model(model_path)

在这里,使用ml.p3.8xlarge 实例在 4 个 GPUS 中只进行了 1 个 epoch 的训练。

训练是通过如下的torch-distribution完成的,

python -m torch.distributed.launch finetuning_gpt2_script.py

在 epoch 结束时进行训练时,观察到以下错误,

RuntimeError: Input tensor at index 3 has invalid shape [2, 2, 16, 128, 64] but expected [2, 4, 16, 128, 64]

  1. RuntimeError 是因为train_datasettest_dataset 使用TextData 构造的方式吗?
  2. 我在torch-distribution 中做错了吗?

【问题讨论】:

    标签: python pytorch amazon-sagemaker huggingface-transformers gpt-2


    【解决方案1】:

    这可能与建议的here 中的批处理大小不匹配(预期批处理大小为 4 但接收的批处理大小为 2)有关?提供的解决方案是在DataLoader 中设置参数drop_last,如下所示:

    tain_text = DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True, drop_last=True)
    

    【讨论】:

    • 我使用transformers.TextDataSet库构造train_text和test_text的对象类型
    猜你喜欢
    • 2021-11-10
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2019-04-30
    • 2019-09-23
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多