You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Llama-2-7b-chat-hf运行时addmm_impl_cpu_不支持Half类型的问题

解决Llama-2-7b-chat-hf运行时"addmm_impl_cpu_ not implemented for 'Half'"错误

问题场景

加载meta-llama/Llama-2-7b-chat-hf模型后,执行ConversationalRetrievalChain推理时触发错误:addmm_impl_cpu_ not implemented for 'Half'。已尝试匹配模型配置的float16精度,以及切换float32、bfloat16等精度,问题仍存在。

完整操作流程

  1. 认证环节(已成功):
from huggingface_hub import notebook_login
# 输入有效token后提示`Token is valid (permission: read)`
notebook_login() 
  1. 模型加载代码:
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf",
                                          use_auth_token=True)

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf",
                                         device_map='auto',
                                         torch_dtype=torch.float16,
                                         use_auth_token=True)
  1. 模型配置确认torch_dtype为float16:
LlamaConfig {
  "_name_or_path": "meta-llama/Llama-2-7b-chat-hf",
  "architectures": [
    "LlamaForCausalLM"
  ],
  "bos_token_id": 1,
  "eos_token_id": 2,
  "hidden_act": "silu",
  "hidden_size": 4096,
  "initializer_range": 0.02,
  "intermediate_size": 11008,
  "max_position_embeddings": 4096,
  "model_type": "llama",
  "num_attention_heads": 32,
  "num_hidden_layers": 32,
  "num_key_value_heads": 32,
  "pretraining_tp": 1,
  "rms_norm_eps": 1e-06,
  "rope_scaling": null,
  "tie_word_embeddings": false,
  "torch_dtype": "float16",
  "transformers_version": "4.32.0",
  "use_cache": true,
  "vocab_size": 32000
}
  1. Pipeline与QA链构建:
# 构建文本生成pipeline
pipe=pipeline("text-generation",
             model=model,
             tokenizer=tokenizer,
             torch_dtype=torch.float16,
             device_map='auto',
             max_new_tokens=512,
             min_new_tokens=-1,
             top_k=30)

llm=HuggingFacePipeline(pipeline=pipe,model_kwargs={'temperature':0.7})
memory=ConversationBufferMemory(memory_key='chat_history',return_messages=True)

pdf_qa=ConversationalRetrievalChain.from_llm(llm=llm,
                                             retriever=vectordb.as_retriever(search_kwargs={'k':6}),
                                             verbose=False, memory=memory)

执行result=pdf_qa({"question":"question here"})时触发上述错误。

解决方案

核心原因

错误本质是部分张量被分配到CPU上,但PyTorch的CPU后端不支持float16的addmm矩阵乘法操作。即使设置device_map='auto',仍可能存在模型组件或检索环节的张量落在CPU上,导致精度不兼容。

具体修复步骤

  1. 强制全量加载到GPU(显存足够时优先选择)
    放弃device_map='auto',直接指定GPU设备,确保所有模型张量都在GPU运行:

    model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf",
                                                 device='cuda',
                                                 torch_dtype=torch.float16,
                                                 use_auth_token=True)
    

    同时在Pipeline中明确指定GPU索引:

    pipe=pipeline("text-generation",
                 model=model,
                 tokenizer=tokenizer,
                 torch_dtype=torch.float16,
                 device=0,  # 多卡环境可调整为对应索引
                 max_new_tokens=512,
                 min_new_tokens=-1,
                 top_k=30)
    
  2. 同步检索环节张量到GPU
    如果使用的向量数据库(如FAISS)检索结果在CPU上,手动转移到GPU:

    # 以FAISS为例,将向量库转移到CUDA
    vectordb = vectordb.to('cuda')
    
  3. 启用自动混合精度上下文
    在执行QA链时,用自动混合精度上下文确保张量精度自动兼容:

    from torch.cuda.amp import autocast
    
    with autocast():
        result=pdf_qa({"question":"question here"})
    
  4. 降级到float32(显存不足时的备选方案)
    强制使用CPU支持的float32精度,同时开启低CPU内存占用模式:

    model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf",
                                                 device_map='cpu',
                                                 torch_dtype=torch.float32,
                                                 use_auth_token=True,
                                                 low_cpu_mem_usage=True)
    

内容的提问来源于stack exchange,提问作者Yilmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:47:02