更换Llama-2模型适配RTX2080TI时遇模型文件缺失错误求助
问题与解决方案
问题背景
原本使用以下代码加载meta-llama/Llama-2-7b-chat-hf模型:
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf", device_map ='auto', torch_dtype = torch.float16, use_auth_token = True)
在NVIDIA GeForce RTX 2080 TI上运行时,回答简单问题耗时20分钟。改用TheBloke的GGUF格式模型后,修改代码出现报错:'TheBloke/Llama-2-7b does not appear to have a file named pytorch_model.bin, tf_model.h5, model.ckpt or flax_model.msgpack',本地已下载llama-2-7b.Q5_K_m.gguf文件但未使用。
原因分析
AutoModelForCausalLM是Hugging Face Transformers库专门用于加载PyTorch/TensorFlow/Flax格式模型的类,不支持GGUF格式。GGUF是GGML的升级量化格式,需要用专门的库(如ctransformers)来加载。
解决方案步骤
1. 安装依赖库
首先安装支持GGUF格式的ctransformers库:
pip install ctransformers>=0.2.24
2. 修改模型加载代码
替换原有的AutoModelForCausalLM加载逻辑,改用ctransformers加载模型,分两种场景:
场景一:加载本地已下载的GGUF文件
from ctransformers import AutoModelForCausalLM # 加载本地的llama-2-7b.Q5_K_m.gguf文件 model = AutoModelForCausalLM.from_pretrained( "./llama-2-7b.Q5_K_m.gguf", # 本地文件路径 model_type="llama", device_map="auto", max_new_tokens=512, temperature=0.7 )
场景二:从Hugging Face Hub直接加载指定GGUF模型
from ctransformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained( "TheBloke/Llama-2-7b-Chat-GGUF", model_file="llama-2-7b-chat.q4_K_M.gguf", model_type="llama", device_map="auto", max_new_tokens=512, temperature=0.7 )
3. 适配LangChain的模型调用逻辑
可以选择两种方式适配LangChain,推荐第一种更简洁的集成方式:
方式一:直接使用LangChain的CTransformers类
from langchain.llms import CTransformers llm = CTransformers( model="./llama-2-7b.Q5_K_m.gguf", model_type="llama", config={ 'max_new_tokens': 512, 'temperature': 0.7, 'device_map': 'auto' } )
方式二:用HuggingFacePipeline包装(保留原有pipeline逻辑)
from transformers import pipeline from langchain import HuggingFacePipeline pipe = pipeline( "text-generation", model=model, tokenizer=tokenizer, # 依然使用原Llama-2的tokenizer max_new_tokens=512, temperature=0.7 ) llm = HuggingFacePipeline(pipeline=pipe)
4. 完整修改后的关键代码片段
替换原代码中模型加载到LLM初始化的部分:
### 替换原模型加载代码 ### tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf", use_auth_token=True) # 加载本地GGUF模型 from ctransformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained( "./llama-2-7b.Q5_K_m.gguf", model_type="llama", device_map="auto" ) # 初始化pipeline和llm pipe = pipeline( "text-generation", model=model, tokenizer=tokenizer, device_map='auto', max_new_tokens=512, min_new_tokens=1, top_k=5 ) llm = HuggingFacePipeline(pipeline=pipe, model_kwargs={'temperature':0.7})
额外优化建议
- Q5_K_M量化级别比Q4_K_M精度更高,RTX2080Ti(11GB显存)可以流畅运行,优先使用你已下载的
llama-2-7b.Q5_K_m.gguf - 可尝试设置
gpu_layers参数,将更多模型层加载到GPU,进一步提升推理速度:model = AutoModelForCausalLM.from_pretrained( "./llama-2-7b.Q5_K_m.gguf", model_type="llama", device_map="auto", gpu_layers=50 # 根据显存调整,2080Ti可尝试设置40-60 )
内容的提问来源于stack exchange,提问作者rraven-v2
相关产品推荐
相关产品推荐

