为何Llama 2 7B版本可正常运行但70B版本出现报错?
核心问题分析
- 代码路径错误:你的代码错误使用了
dirname(model),而model变量本身就是模型的目录路径。dirname("/Llama-2-70b-chat-hf/")会返回根目录/,导致加载的根本不是正确的70B模型文件——这是引发尺寸不匹配错误的主要原因。7B版本能运行大概率是巧合(比如根目录下恰好有可识别的7B模型文件),但属于错误的路径写法。 - 模型文件完整性问题:70B模型包含15个分片文件,若任何一个缺失或损坏,都会导致权重加载时出现结构不匹配。
- 量化模型不兼容:如果下载的是4-bit/8-bit量化版本(如GPTQ),直接用
LlamaForCausalLM加载会出现结构冲突,需用对应量化库处理。
解决步骤
1. 修正代码路径错误
将所有dirname(model)替换为模型目录变量本身,同时添加内存优化参数:
from transformers import LlamaForCausalLM, LlamaTokenizer import torch # 定义模型目录,避免用model作为变量名造成混淆 model_dir = "/Llama-2-70b-chat-hf/" # model_dir = "/Llama-2-7b-chat-hf/" tokenizer = LlamaTokenizer.from_pretrained(model_dir) # 添加low_cpu_mem_usage优化大模型内存加载 model = LlamaForCausalLM.from_pretrained(model_dir, low_cpu_mem_usage=True)
2. 校验模型文件完整性
- 确认
/Llama-2-70b-chat-hf/目录下存在完整的15个分片文件:pytorch_model-00001-of-00015.bin至pytorch_model-00015-of-00015.bin。 - 对比每个文件的哈希值与官方提供的一致,排除文件损坏可能。
3. 处理量化模型(若适用)
如果下载的是GPTQ量化版本,需安装对应库并使用专用模型类加载:
pip install auto-gptq
from auto_gptq import AutoGPTQForCausalLM # 因VRAM仅12MB,指定全量加载到CPU model = AutoGPTQForCausalLM.from_pretrained(model_dir, device_map="cpu", use_safetensors=True)
4. 解决lm_head.weight缺失问题
若修正路径后仍出现此错误,说明包含lm_head权重的分片(通常是最后一个分片)下载遗漏,重新下载对应分片即可。不要使用ignore_mismatched_sizes=True,这会跳过参数校验,导致模型结构不完整无法运行。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

