Qwen2报错——RuntimeError: “triu_tril_cuda_template“ not implemented for ‘BFloat16‘

最近在使用 Qwen2-7B-Instruct 的时候报错 RuntimeError: “triu_tril_cuda_template” not implemented for ‘BFloat16’,尝试解决了几个星期终于解决了问题,以下是整体解决思路与方案。

1. 解决思路

在使用 huggingface 上的 Qwen 示例代码时,报错:

RuntimeError: "triu_tril_cuda_template" not implemented for 'BFloat16'

首先先看了博客中的解决思路(https://blog.csdn.net/weixin_42225889/article/details/140325755),将加载预训练参数代码中的 ‘auto’ 改为了 torch.float16,即:

    model = AutoModelForCausalLM.from_pretrained(
        qwen_path,
        # torch_dtype="auto",
        torch_dtype=torch.float16,
        device_map="auto"
    )

然后重新执行代码,继续报错:

RuntimeError: probability tensor contains either `inf`, `nan` or element < 0

在 博客和 github 又搜了下新出现的问题(https://blog.csdn.net/weixin_44563460/article/details/133800257https://github.com/meta-llama/llama/issues/380),有的说的是将do_sample设置为 False,有的说将 torch_dtype 设置为 bfloat16,这里一步一步尝试,首先先将 do_sample 设置为了 False,即:

        generated_ids = model.generate(
            model_inputs.input_ids,
            max_new_tokens=24,
            do_sample=False,
        )

终于没报错了,但是输出了这么一堆奇怪的东西:
输出
于是又尝试将 torch_dtypetorch.float16 改为 torch.bfloat16

    model = AutoModelForCausalLM.from_pretrained(
        qwen_path,
        # torch_dtype="auto",
        torch_dtype=torch.bfloat16,
        device_map="auto"
    )

然后继续报错:

RuntimeError: "triu_tril_cuda_template" not implemented for 'BFloat16'

又回到最初的起点了属于是。

2 解决方案

后来仔细思考了一下,为什么别人用 bfloat16 是正常的,而我用 bfloat16 就会报错,会不会是库版本的问题,于是重新更新了一波 Pytorchtransformers 的版本。

在更新之前我的版本是:

pytorch=2.0.1
transformers=4.43.4

更新之后为:

pytorch=2.2.2
transformers=4.44.0

然后问题就解决了:
问题解决
虽然看上去解决思路挺简单的,但是由于网上都没有合适的关于这个问题的有效解决思路,也算是踩了不少的坑。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值