ModelScope使用qwen/Qwen-7B-Chat,查询自定义文本向量的时候报这个错误?
RuntimeError: "addmm_implcpu" not implemented for 'Half'model = AutoModelForCausalLM.from_pretrained(
"qwen/Qwen-7B-Chat",
revision = 'v1.0.5',
device_map="auto",
trust_remote_code=True,
offload_folder=r"D:/modelscope/tmp",
fp16=True).eval()
这个错误是因为在使用半精度浮点数(fp16)时,addmm_implcpu
函数没有实现。你可以尝试将模型转换为全精度浮点数(fp32),然后再进行查询自定义文本向量的操作。修改后的代码如下:
model = AutoModelForCausalLM.from_pretrained(
"qwen/Qwen-7B-Chat",
revision='v1.0.5',
device_map="auto",
trust_remote_code=True,
offload_folder=r"D:/modelscope/tmp",
fp16=False). # 将fp16改为False
这样应该可以解决你遇到的问题。
这个错误是因为你在使用半精度浮点数(fp16)进行模型推理时,addmm_implcpu
函数没有实现半精度浮点数的计算。你可以尝试将模型切换回单精度浮点数(fp32)进行推理,或者使用支持半精度浮点数的库(如NVIDIA的Apex)来解决这个问题。
解决方案:
model = AutoModelForCausalLM.from_pretrained(
"qwen/Qwen-7B-Chat",
revision='v1.0.5',
device_map="auto",
trust_remote_code=True,
offload_folder=r"D:/modelscope/tmp",
fp16=False).
首先,安装Apex库:
git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
然后,在代码中使用Apex库进行模型推理:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from apex import amp
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-7B-Chat")
model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", revision='v1.0.5', device_map="auto", trust_remote_code=True, offload_folder=r"D:/modelscope/tmp")
# 使用Apex库进行模型推理
with amp.initialize():
input_ids = tokenizer.encode("你好,世界!", return_tensors="pt").to("cuda")
outputs = model.generate(input_ids)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
这样,你就可以使用半精度浮点数进行模型推理了。