使用Hugging Face Transformers加载safetensors格式模型报错求助
问题
尝试用Hugging Face Transformers库加载notstoic/pygmalion-13b-4bit-128g模型(safetensors格式),使用代码如下:
from transformers import LlamaForCausalLM, LlamaTokenizer tokenizer = LlamaTokenizer.from_pretrained("path/to/model") model = LlamaForCausalLM.from_pretrained("path/to/model", use_safetensors=True)
运行后出现错误:
Traceback (most recent call last): File "/Users/maxhager/Projects2023/nsfw/model_run.py", line 4, in <module> model = LlamaForCausalLM.from_pretrained("path/to/model", use_safetensors=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/maxhager/.virtualenvs/nsfw/lib/python3.11/site-packages/transformers/modeling_utils.py", line 2449, in from_pretrained raise EnvironmentError( OSError: Error no file named pytorch_model.bin, tf_model.h5, model.ckpt.index or flax_model.msgpack found in directory path/to/model.
模型目录包含以下文件:
- 4bit-128g.safetensors
- config.json
- generation_config.json
- pytorch_model.bin.index.json
- special_tokens_map.json
- tokenizer.json
- tokenizer.model
- tokenizer_config.json
已设置use_safetensors=True,但from_pretrained()仍未识别safetensors格式,反而查找常规格式文件,求问题原因及解决方法。
解决方法
核心原因
该模型是4-bit量化后的版本,Transformers原生的LlamaForCausalLM不支持直接加载这种特殊的量化safetensors文件,必须借助bitsandbytes库配合AutoModelForCausalLM,并指定量化相关参数才能正确加载。另外模型文件名4bit-128g.safetensors不符合Transformers默认的分片命名规则,进一步导致原生加载逻辑无法识别。
具体步骤
- 安装依赖库
确保安装最新版的transformers、accelerate和支持4-bit量化的bitsandbytes:
pip install --upgrade transformers accelerate bitsandbytes
- 修改加载代码
用AutoModelForCausalLM替代LlamaForCausalLM,并添加量化参数:
import torch from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("path/to/model") model = AutoModelForCausalLM.from_pretrained( "path/to/model", use_safetensors=True, load_in_4bit=True, device_map="auto", bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 )
- 版本检查
若仍无法识别safetensors文件,确认transformers版本≥4.28.0,较早版本对safetensors的支持存在缺陷。
内容的提问来源于stack exchange,提问作者yemy
相关产品推荐
相关产品推荐

