您好,请教下ModelScope训练nlp_gpt3_text-generation_1.3B模型增

您好,请教下ModelScope训练nlp_gpt3_text-generation_1.3B模型增大数据集与测试集后出现如下报错。这个该如何解决呢? RuntimeError: The expanded size of the tensor (541) must match the existing size (511) at non-singleton dimension 3. Target sizes: [1, 32, 511, 541]. Tensor sizes: [1, 1, 511, 511] 这个是训练代码哈 from modelscope.msdatasets import MsDataset from modelscope.trainers import build_trainer from modelscope.metainfo import Trainers from datasets import load_dataset import sys sys.setrecursionlimit(4000)

data_files = {"train": "train.csv", "test": "test.csv"}

dataset = load_dataset("csv", data_files=data_files, delimiter=",") dataset = MsDataset(dataset) train_dataset = MsDataset(dataset['train']).remap_columns({'text1': 'src_txt', 'text2': 'tgt_txt'})
.map(lambda example: {'src_txt': example['src_txt'] + '\n'}) eval_dataset = MsDataset(dataset['test']).remap_columns({'text1': 'src_txt', 'text2': 'tgt_txt'})
.map(lambda example: {'src_txt': example['src_txt'] + '\n'})

max_epochs = 10

tmp_dir = './gpt3_dureader'

num_warmup_steps = 200

def noam_lambda(current_step: int): current_step += 1 return min(current_step**(-0.5), current_step * num_warmup_steps**(-1.5))

def cfg_modify_fn(cfg): cfg.train.lr_scheduler = { 'type': 'LambdaLR', 'lr_lambda': noam_lambda, 'options': { 'by_epoch': False } } cfg.train.optimizer = {'type': 'AdamW', 'lr': 3e-4} cfg.train.dataloader = { 'batch_size_per_gpu': 2, 'workers_per_gpu': 1 } cfg.train.hooks.append({ 'type': 'MegatronHook' }) cfg.preprocessor.sequence_length = 512 cfg.model.checkpoint_model_parallel_size = 1 return cfg

kwargs = dict( model='./models/damo/nlp_gpt3_text-generation_1.3B', train_dataset=train_dataset, eval_dataset=eval_dataset, max_epochs=max_epochs, work_dir=tmp_dir, cfg_modify_fn=cfg_modify_fn)

trainer = build_trainer( name=Trainers.gpt3_trainer, default_args=kwargs) trainer.train()

展开
收起
真的很搞笑 2023-05-02 07:46:40 222 分享 版权
阿里云 AI 助理回答

这个错误信息表明在运行过程中,尝试扩展一个张量的大小时,新的尺寸(541)与现有尺寸(511)在非单维度(第3维度)上不匹配。您配置的模型输入序列长度为512,但是实际处理的数据似乎超出了这个长度,达到了541。

解决这个问题的方法有以下几种:

  1. 调整数据预处理:确保您的数据预处理阶段不会生成超过模型设定序列长度的输入。检查cfg.preprocessor.sequence_length = 512这一行,确保所有输入样本在经过处理后(包括添加特殊符号等)不超过512个token。您可能需要对数据集进行适当的截断或填充处理以适应模型的要求。

  2. 修改模型配置:如果您的任务允许且资源充足,可以考虑增加模型的序列长度配置。这通常涉及到更改模型的配置文件或直接在代码中设置,但请注意这样做可能会显著增加模型训练所需的计算资源和时间。

  3. 数据映射调整:在.map()函数中,确认没有意外地增加序列长度的操作。确保任何文本处理逻辑不会无意中使序列变长。

具体到您的代码,可以在数据预处理部分加入截断或填充逻辑来保证每个样本的长度符合模型要求。例如,您可以使用类似下面的逻辑来进行截断:

def preprocess_function(example):
    src_txt = example['src_txt'] + '\n'
    # 截断至最大长度
    src_txt = src_txt[:cfg.preprocessor.sequence_length-1] + '\n'  # 减1是为了保留'\n'
    return {'src_txt': src_txt, 'tgt_txt': example['tgt_txt']}  # 假设tgt_txt也需要同样的处理

train_dataset = train_dataset.map(preprocess_function)
eval_dataset = eval_dataset.map(preprocess_function)

请根据实际情况调整上述代码中的细节,特别是处理逻辑和长度限制。这样可以确保所有的输入样本都适配于模型的序列长度限制,从而避免报错。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352

热门讨论

热门文章

还有其他疑问?
咨询AI助理