Haystack中PromptNode加载缓存模型仍耗时,能否通过保存模型优化?
解决Haystack PromptNode模型加载缓慢的问题
可以通过将模型保存到本地路径的方式大幅缩短后续加载时间,具体操作步骤如下:
1. 先将模型保存到本地目录
执行以下代码,把google/flan-t5-large模型及其分词器保存到本地指定路径(比如./flan-t5-large-local):
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer # 加载模型与分词器 model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-large") tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-large") # 保存到本地目录 model.save_pretrained("./flan-t5-large-local") tokenizer.save_pretrained("./flan-t5-large-local")
2. 修改原有代码,使用本地模型加载
将原来代码中的model_name_or_path替换为刚才的本地路径,后续运行时就会直接加载本地模型,无需重复处理缓存文件:
lfqa_prompt = PromptTemplate("deepset/question-answering-with-references", output_parser=AnswerParser(reference_pattern=r"Document\[(\d+)\]")) # 改用本地模型路径加载,加载速度显著提升 prompt_node = PromptNode(model_name_or_path="./flan-t5-large-local", default_prompt_template=lfqa_prompt) pipe = Pipeline() pipe.add_node(component=retriever, name="retriever", inputs=["Query"]) pipe.add_node(component=prompt_node, name="prompt_node", inputs=["retriever"]) output = pipe.run(query="A question?") print(output["answers"][0].answer)
可选优化:模型量化进一步提速
如果还想进一步缩短加载时间、降低内存占用,可以使用4-bit/8-bit量化技术。只需在创建PromptNode时传入量化参数即可:
prompt_node = PromptNode( model_name_or_path="./flan-t5-large-local", default_prompt_template=lfqa_prompt, model_kwargs={"load_in_4bit": True, "device_map": "auto"} )
使用量化需要先安装bitsandbytes库:pip install bitsandbytes
内容的提问来源于stack exchange,提问作者user3164187
相关产品推荐
相关产品推荐

