BELLE icon indicating copy to clipboard operation
BELLE copied to clipboard

RuntimeError: expected scalar type Half but found Float

Open XY2323819551 opened this issue 1 year ago • 17 comments

我在按照命令进行lora微调的时候,为什么总是报上述错误呢?我该如何如何改正呢?``

XY2323819551 avatar Apr 03 '23 03:04 XY2323819551

我在按照命令进行lora微调的时候,为什么总是报上述错误呢?我该如何如何改正呢?``

但是我如果用您发布的模型代替hf模型,就可以正常运行了。

XY2323819551 avatar Apr 03 '23 03:04 XY2323819551

调bloomz的时候会有同样的错误,alpaca-lora,alpaca-Cot和BELLE上面都会报这个错误。有无好心人告诉怎么解决

scarydemon2 avatar Apr 03 '23 06:04 scarydemon2

我用的时候也是,实际上我自己写amp是可以用fp16的,但是不知道为什么用Trainer训练时候,fp16为True就会有这样的问题。但是最难受的是,只有bloom会出现这样的问题...... llama并不会

LiuChen19960902 avatar Apr 03 '23 06:04 LiuChen19960902

我在按照命令进行lora微调的时候,为什么总是报上述错误呢?我该如何如何改正呢?``

但是我如果用您发布的模型代替hf模型,就可以正常运行了。

您好,配置文件中的model_name_or_path是huggingface原生的模型,我们本地训练也是使用的这个模型,并没有报错。您能把运行的启动命令和报错信息的位置发下吗,我们更容易定位原因。

xianghuisun avatar Apr 03 '23 07:04 xianghuisun

调bloomz的时候会有同样的错误,alpaca-lora,alpaca-Cot和BELLE上面都会报这个错误。有无好心人告诉怎么解决

RuntimeError: expected scalar type Half but found Float

在跑Bloom模型时,可能会遇到这个问题。经过我们的实验,有如下结论:

  • 如果显卡是A100,不会出现expected scalar type Half but found Float的问题,Bloom和Llama都可以跑起来
  • 如果显卡是V100,可以跑起来Llama模型,但是Bloom模型就会出现这个错误,此时需要把代码中fp16改为False,才能跑Bloom模型

xianghuisun avatar Apr 03 '23 08:04 xianghuisun

使用transformers的trainer进行训练的时候,当不开fp16=True的时候,是可以train起来的,但是跑着跑着loss会变成0。我认为是在使用prepare model for int8 training的时候需要调整layer norm的数据类型到float32,为了训练的稳定性。而在调整layernorm到float32后,就会出现expected scalar type half but found float。(bloom里的LayerNorm叫layernorm而不是layer_norm)

felixstander avatar Apr 03 '23 08:04 felixstander

顺便想问问作者是使用8卡A100 40G进行zero stage2的finetune吗?显存的占用是怎么样的呀?想问问8卡 v100 16G有可能跑起来吗

felixstander avatar Apr 03 '23 08:04 felixstander

调bloomz的时候会有同样的错误,alpaca-lora,alpaca-Cot和BELLE上面都会报这个错误。有无好心人告诉怎么解决

RuntimeError: expected scalar type Half but found Float

在跑Bloom模型时,可能会遇到这个问题。经过我们的实验,有如下结论:

  • 如果显卡是A100,不会出现expected scalar type Half but found Float的问题,Bloom和Llama都可以跑起来
  • 如果显卡是V100,可以跑起来Llama模型,但是Bloom模型就会出现这个错误,此时需要把代码中fp16改为False,才能跑Bloom模型

破案了,我确实是v100上面

LiuChen19960902 avatar Apr 03 '23 08:04 LiuChen19960902

请教: 使用LLama原始weights+官方convert_llama_weights_to_hf.py脚本得到的weights,+lora训练,训练阶段不报错,预测阶段报错: Traceback (most recent call last): File "generate.py", line 143, in main(args) File "generate.py", line 120, in main res = generate_text(dev_data, batch_size, tokenizer, model) File "generate.py", line 96, in generate_text …… RuntimeError: expected scalar type Half but found Float 这时应该在哪里修改FP16呢?

shaomai00 avatar Apr 03 '23 12:04 shaomai00

请教: 使用LLama原始weights+官方convert_llama_weights_to_hf.py脚本得到的weights,+lora训练,训练阶段不报错,预测阶段报错: Traceback (most recent call last): File "generate.py", line 143, in main(args) File "generate.py", line 120, in main res = generate_text(dev_data, batch_size, tokenizer, model) File "generate.py", line 96, in generate_text …… RuntimeError: expected scalar type Half but found Float 这时应该在哪里修改FP16呢?

同样的问题,bloom在做generate的时候报错,3090。

bittteerr avatar Apr 04 '23 01:04 bittteerr

调bloomz的时候会有同样的错误,alpaca-lora,alpaca-Cot和BELLE上面都会报这个错误。有无好心人告诉怎么解决

破案了,我之前用的P40,换了A100能用了

scarydemon2 avatar Apr 04 '23 07:04 scarydemon2

调bloomz的时候会有同样的错误,alpaca-lora,alpaca-Cot和BELLE上面都会报这个错误。有无好心人告诉怎么解决

破案了,我之前用的P40,换了A100能用了

A100哪里来的,穷人家的孩子表示很羡慕

LiuChen19960902 avatar Apr 04 '23 07:04 LiuChen19960902

调bloomz的时候会有同样的错误,alpaca-lora,alpaca-Cot和BELLE上面都会报这个错误。有无好心人告诉怎么解决

破案了,我之前用的P40,换了A100能用了

A100哪里来的,穷人家的孩子表示很羡慕

hhh,都是公司的,搞了8张A100测试

scarydemon2 avatar Apr 04 '23 07:04 scarydemon2

解决办法是在tokenizer前加上with torch.autocast("cuda"): 如: with torch.autocast("cuda"): features = tokenizer(batch_text, padding=True, return_tensors="pt", truncation=True, max_length = args.max_length) input_ids = features['input_ids'].to("cuda") attention_mask = features['attention_mask'].to("cuda")

已在generate.py中修复

xianghuisun avatar Apr 05 '23 00:04 xianghuisun

解决办法是在tokenizer前加上with torch.autocast("cuda"): 如: with torch.autocast("cuda"): features = tokenizer(batch_text, padding=True, return_tensors="pt", truncation=True, max_length = args.max_length) input_ids = features['input_ids'].to("cuda") attention_mask = features['attention_mask'].to("cuda")

已在generate.py中修复

xianghuisun avatar Apr 05 '23 00:04 xianghuisun

解决办法是在tokenizer前加上with torch.autocast("cuda"): 如: with torch.autocast("cuda"): features = tokenizer(batch_text, padding=True, return_tensors="pt", truncation=True, max_length = args.max_length) input_ids = features['input_ids'].to("cuda") attention_mask = features['attention_mask'].to("cuda")

已在generate.py中修复

除了这3句,还要把model.generate和tokenizer.batch_decode两句也都放在with torch.autocast("cuda"):下。

Ma-Dan avatar Apr 05 '23 02:04 Ma-Dan

使用transformers的trainer进行训练的时候,当不开fp16=True的时候,是可以train起来的,但是跑着跑着loss会变成0。我认为是在使用prepare model for int8 training的时候需要调整layer norm的数据类型到float32,为了训练的稳定性。而在调整layernorm到float32后,就会出现expected scalar type half but found float。(bloom里的LayerNorm叫layernorm而不是layer_norm)

我参考项目代码设置fp16=Fasle单机多卡训练bloom lora可以跑的起来,但是跑着loss变成0和nan没法收敛。请问下你找到解决方法了吗

Whoolly avatar Apr 06 '23 07:04 Whoolly

有没有找到解决办法啊

zgu293 avatar May 23 '23 08:05 zgu293

使用transformers的trainer进行训练的时候,当不开fp16=True的时候,是可以train起来的,但是跑着跑着loss会变成0。我认为是在使用prepare model for int8 training的时候需要调整layer norm的数据类型到float32,为了训练的稳定性。而在调整layernorm到float32后,就会出现expected scalar type half but found float。(bloom里的LayerNorm叫layernorm而不是layer_norm)

我参考项目代码设置fp16=Fasle单机多卡训练bloom lora可以跑的起来,但是跑着loss变成0和nan没法收敛。请问下你找到解决方法了吗

有没有找到解决办法啊

zgu293 avatar May 23 '23 08:05 zgu293

使用transformers的trainer进行训练的时候,当不开fp16=True的时候,是可以train起来的,但是跑着跑着loss会变成0。我认为是在使用prepare model for int8 training的时候需要调整layer norm的数据类型到float32,为了训练的稳定性。而在调整layernorm到float32后,就会出现expected scalar type half but found float。(bloom里的LayerNorm叫layernorm而不是layer_norm)

有没有找到解决办法啊,可以分享一下吗

zgu293 avatar May 23 '23 08:05 zgu293

model = model.half().cuda()

liang-shihao avatar Jun 29 '23 07:06 liang-shihao

model = model.half().cuda() 我使用 huggingface Trainer 在 fp16=True 模式下多卡训练报 HALF and Float 错误,通过加 model.half() 解决了问题,希望对其他人有帮助。

ZionDoki avatar Dec 15 '23 09:12 ZionDoki