感谢您的精彩项目。我复制了FinGPT v3.1.2(4位QLORA)。它可以在Colab上的默认LLM模型“chatglm2”上工作,但当我想要使用Llama2获得更好的结果时,它会停止运行。
- 我根据您的指示更改了模型,将model_name = "THUDM/chatglm2-6b"更改为model_name = "daryl149/llama-2-7b-chat-hf"
- 然后由于运行错误删除了设备:
model = AutoModel.from_pretrained(
model_name,
quantization_config=q_config,
trust_remote_code=True,
token = access_token,
# device='cuda'
)
- 将target_modules更改为llama:
target_modules = TRANSFORMERS_MODELS_TO_LORA_TARGET_MODULES_MAPPING['llama']
- 不幸的是,最后一步出现了一个TypeError: 'NoneType' object cannot be interpreted as an integer
writer = SummaryWriter()
trainer = ModifiedTrainer(
model=model,
args=training_args, # Trainer args
train_dataset=dataset["train"], # Training set
eval_dataset=dataset["test"], # Testing set
data_collator=data_collator, # Data Collator
callbacks=[TensorBoardCallback(writer)],
)
trainer.train()
writer.close()
# save model
model.save_pretrained(training_args.output_dir)
详细的错误如下:
You are adding a <class 'transformers.integrations.TensorBoardCallback'> to the callbacks of this Trainer, but there is already one. The currentlist of callbacks is
:DefaultFlowCallback
TensorBoardCallback
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-27-d05cf508c134> in <cell line: 11>()
9 callbacks=[TensorBoardCallback(writer)],
10 )
---> 11 trainer.train()
12 writer.close()
13 # save model
6 frames
<ipython-input-25-26476d7038e4> in data_collator(features)
37 ids = ids + [tokenizer.pad_token_id] * (longest - ids_l)
38 _ids = torch.LongTensor(ids)
---> 39 labels_list.append(torch.LongTensor(labels))
40 input_ids.append(_ids)
41 input_ids = torch.stack(input_ids)
TypeError: 'NoneType' object cannot be interpreted as an integer
您能帮我解决这个问题吗?期待您的回复!(平台:Google Colab上的A100)
3条答案
按热度按时间kx5bkwkv1#
我也遇到了同样的问题。
我正在运行AWS g5.8xlarge。
你解决了吗?
4ioopgfo2#
由于LlamaTokenizer没有tokenizer.pad_token_id的值,所以它的值为None。当这个分词器用于计算'labels'的值时,它会报错。
我将tokenizer.pad_token_id的值设置为0,解决了上述错误。但是又遇到了另一个错误
Llama.forward() got an unexpected keyword argument 'labels'
。为了解决这个问题,我将model = AutoModel.from_pretrained( model_name, quantization_config=q_config, trust_remote_code=True )
替换为
model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=q_config, trust_remote_code=True, device_map = "auto" )
,现在一切正常了。
rt4zxlrg3#
TL;DR:在代码中添加
tokenizer.pad_token_id = 0
主要问题是,ChatGPT 中的代码依赖于 pad_token_id,而元-LLAMA 模型不使用。但是,如果我们仔细查看
special_tokens_map.json
,我们可以看到下面的几行:因此,作为
pad_token
,我们可以使用unk_token
的 id,它等于0
。要解决 None 的问题,请使用pad_token_id
初始化 tokenizer 中的字段0
:tokenizer.pad_token_id = 0