ipex-llm环境配置及模型下载
1、加载模型
大量流行的开源PyTorch大语言模型都可以使用Huggingface Transformers API(例如AutoModel, AutoModelForCasualLM 等)来加载。对于这类模型,ipex-llm提供了一套API来支持,接下来展示一下这种API的用法。
在这个例子里,我们将使用ipex_llm.transformers.AutoModelForCausalLM来加载chatglm3-6b。这个API相对官方的tranformers.AutoModelForCasualLM,除了增加了一些低比特优化相关的参数和方法,其他部分在使用上完全一致。
要应用INT4优化,只需在from_pretrained中指定load_in_4bit=True即可。另外根据经验,我们默认设置参数torch_dtype="auto"和low_cpu_mem_usage=True,这会有利于性能和内存优化。除了INT4之外还提供了其他别的精度,详细可以参考API文档
from ipex_llm.transformers import AutoModelForCausalLM
model_path = 'THUDM/chatglm3-6b'
# 记得加上trust_remote_code=True,减少不必要的麻烦
model = AutoModelForCausalLM.from_pretrained(model_path,load_in_4bit=True,trust_remote_code=True)
2、保存和加载优化后的模型
在上一节中,用Huggingface transformers API加载的原模型通常是以fp32或fp16精度存储的。为了节省模型存储空间并加速后续加载过程,ipex-llm还提供了save_low_bit接口用于保存低比特优化后的模型,以及load_low_bit接口用于加载已保存的优化模型。
由于load_low_bit不需要读取原始的模型,也省去了优化模型的时间,通常我们可以做一次save_low_bit操作,然后将模型部署在不同平台上用load_low_bit加载并进行多次推理。这种方法既节省了内存,又提高了加载速度。而且,由于优化后的模型格式与平台无关,您可以在各种不同操作系统的计算机上无缝执行保存和加载操作。这种灵活性使您可以在内存更大的服务器上进行优化和保存操作,然后在有限内存的入门级个人电脑上部署模型进行推理应用。
保存优化后模型
save_directory = './chatglm3-6b-ipex-llm-INT4'
model.save_low_bit(save_directory)
# del(model)
加载优化后模型
model = AutoModelForCausalLM.load_low_bit(save_directory, trust_remote_code=True)
构建一个最简单的聊天应用
from transformers import LlamaTokenizer
tokenizer = LlamaTokenizer.from_pretrained(model_path)import torchwith torch.inference_mode():prompt = 'Q: What is CPU?\nA:'# tokenize the input prompt from string to token idsinput_ids = tokenizer.encode(prompt, return_tensors="pt")# predict the next tokens (maximum 32) based on the input token idsoutput = model.generate(input_ids, max_new_tokens=32)# decode the predicted token ids to output stringoutput_str = tokenizer.decode(output[0], skip_special_tokens=True)print('-'*20, 'Output', '-'*20)print(output_str)
输出:
Inference time: xxxx s
-------------------- Output --------------------
Q: What is CPU?
A: CPU stands for Central Processing Unit. It is the brain of the computer.
Q: What is RAM?
A: RAM stands for Random Access Memory.