程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]?

开发过程中遇到运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]的问题如何解决?下面主要结合日常开发的经验,给出你关于运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]的解决方法建议,希望对你解决运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]有所启发或帮助;

使用 SageMaker 中的 GPT2-medium 库对预训练的 Huggingface 模型进行微调时出现运行时错误 - 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 个 GPU 中仅完成了 1 个时期的训练。

训练是通过像下面这样的火炬分配来完成的,

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,64]

  1. RuntimeError 是否是因Train_datasettest_dataset 使用 TextData 构造的方式?
  2. 我在 torch-diStribution 中做错了吗?
  3. @H_419_81@

    解决方法

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

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

大佬总结

以上是大佬教程为你收集整理的运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]全部内容,希望文章能够帮你解决运行时错误:索引 3 处的输入张量的形状无效 [2, 2, 16, 128, 64] 但预期为 [2, 4, 16, 128, 64]所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:1281634[