运行OpenAssistant pythia-12b模型报错:NameError: init_empty_weights未定义
解决
NameError: name 'init_empty_weights' is not defined错误 问题原因
你遇到的错误是因为init_empty_weights是accelerate库中的函数,当前代码或依赖环境未正确加载它。在使用device_map="auto"和load_in_8bit=True加载模型时,Transformers 4.25.1版本需要依赖这个函数处理模型权重初始化,但未自动完成导入。
解决方案
方案1:手动导入init_empty_weights
在代码开头添加accelerate库的导入语句:
from accelerate import init_empty_weights from transformers import AutoModelForCausalLM, GPTNeoXForCausalLM, AutoTokenizer
方案2:升级Transformers版本
Transformers 4.25.1属于较旧版本,后续版本(如4.28及以上)已优化该部分依赖处理,可避免此类导入缺失问题。执行以下命令升级:
pip install --upgrade transformers
方案3:匹配Accelerate兼容版本
确保Accelerate版本与Transformers 4.25.1兼容,推荐安装0.15.x版本:
pip install accelerate==0.15.0
调整后的完整代码示例
若选择方案1,修改后的代码如下:
from accelerate import init_empty_weights from transformers import AutoModelForCausalLM, GPTNeoXForCausalLM, AutoTokenizer Model = "OpenAssistant/oasst-sft-1-pythia-12b" tokenizer = AutoTokenizer.from_pretrained(Model, cache_dir='models_hf') model = GPTNeoXForCausalLM.from_pretrained(Model, device_map="auto", load_in_8bit=True, cache_dir='models_hf', low_cpu_mem_usage=True) message = "Hello, How are you?" inp = "<|prompter|>"+message+"<|endoftext|><|assistant|>" data = tokenizer([inp], return_tensors="pt") data = {k: v.to(model.device) for k, v in data.items() if k in ("input_ids", "attention_mask")} outputs = model.generate(**data) print(tokenizer.decode(outputs[0]))
内容的提问来源于stack exchange,提问作者José Roberto Canuto Vasconcelo
相关产品推荐
相关产品推荐

