奇怪的错误记录

https://github.com/meta-llama/llama3/issues/80

读模型没问题,推理时出现:
RuntimeError: “triu_tril_cuda_template” not implemented for ‘BFloat16’

————————————————

事发原因

我尝试了解transformers的AutoProcessor时,它提示我:
RuntimeError: Failed to import transformers.models.auto.processing_auto because of the following error (look up to see its traceback):
Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.8 and torchvision has CUDA Version=11.7. Please reinstall the torchvision that matches your PyTorch install.
说我torch和torchvision的cuda版本对不上?我当初是按Pytorch安装的啊。。。

我的torch 版本如下:
torch 2.0.0+cu118
torchaudio 2.0.1
torchvision 0.15.1

很怪,俩后面确实没跟cu118字样。所以我找pytorch官方网站又下了一次:
pip install torch2.0.0 torchvision0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118

这回对了。我只卸载了torchvision,所以torchaudio没有更新。
torch 2.0.0+cu118
torchaudio 2.0.1
torchvision 0.15.1+cu118

此时就出现了最前面的错误。

————————

暂时的补救方法

我读的是qwen1.5 7B,设置torch_dtype=torch.bfloat16。把bfloat16改成torch_dtype=torch.float16后, 就能推理了。或者把torchvision退回普通版本。
但是torch.float16和torch.bfloat16是完全不同的两个东西,就这么换了,不对劲啊。。。

——————————————

(不是)最好的补救方法

使用torch_dtype=“auto”,transformers会自动使用bfloat16.
我还做了一些观察,在不同条件下打印model.config:

  1. 我用Autoconfig使用qwen自带的config文件送到AutoModelForCausalLM.from_pertrained里,显示用bfloat16,实际耗了float32的空间。
  2. 设置torch_dtype=torch.float16,耗费16的空间,显示用的float16.
  3. 设置torch_dtype=“auto”,耗费16的空间,显示bfloat16.

唉,太啥比了。
——————————————

真·完美解决的办法

lamma3-8*8B Moe的github上提到了这个问题:lamma3-8*8B Moe github链接

说是torch的bug,2.1版本后修复了。按照下面的method1,直接修改transformers里对应报错的代码段,把一行改成三行,即先用32,执行完错误代码,再转回16。这种情况下,读取model的代码可以使用torch_dtype=torch.bfloat16正常运行了。

causal_mask = causal_mask.to(torch.float32)#
causal_mask = torch.triu(causal_mask, diagonal=1)
causal_mask = causal_mask.to('cuda', dtype=torch.bfloat16)#

在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值