英特尔CPU部署Qwen 1.8B模型的过程

作者:英特尔边缘计算创新大使 卢雨畋
01概述
本文介绍了在英特尔 13 代酷睿 cpu i5 - 13490f 设备上部署 qwen 1.8b 模型的过程,你需要至少 16gb 内存的机器来完成这项任务,我们将使用英特尔的大模型推理库 [bigdl] 来实现完整过程。
英特尔的大模型推理库 [bigdl]:
bigdl-llm 是一个在英特尔设备上运行 llm(大语言模型)的加速库,通过 int4/fp4/int8/fp8 精度量化和架构针对性优化以实现大模型在英特尔 cpu、gpu 上的低资源占用与高速推理能力(适用于任何 pytorch 模型)。
本文演示为了通用性,只涉及 cpu 相关的代码,如果你想学习如何在英特尔 gpu 上部署大模型。
02环境配置
在开始之前,我们需要准备好 bigdl-llm 以及之后部署的相关运行环境,我们推荐你在 python 3.9 的环境中进行之后的操作。
如果你发现下载速度过慢,可以尝试更换默认镜像源:
pip config set global.index-url https://pypi.doubanio.com/simple`
%pip install --pre --upgrade bigdl-llm[all] %pip install gradio %pip install hf-transfer%pip install transformers_stream_generator einops%pip install tiktoken  
左滑查看更多
03模型下载
首先,我们通过 huggingface-cli 获取 qwen-1.8b 模型,耗时较长需要稍作等待;这里增加了环境变量,使用镜像源进行下载加速。
import os# 设置环境变量os.environ['hf_endpoint'] = 'https://hf-mirror.com'# 下载模型os.system('huggingface-cli download --resume-download qwen/qwen-1_8b-chat --local-dir qwen18chat_src')  
左滑查看更多
04保存量化模型
为了实现大语言模型的低资源消耗推理,我们首先需要把模型量化到 int4 精度,随后序列化保存在本地的相应文件夹方便重复加载推理;利用 `save_low_bit` api 我们可以很容易实现这一步。
from bigdl.llm.transformers import automodelforcausallmfrom transformers import  autotokenizerimport osif __name__ == '__main__':    model_path = os.path.join(os.getcwd(),qwen18chat_src)    model = automodelforcausallm.from_pretrained(model_path, load_in_low_bit='sym_int4', trust_remote_code=true)    tokenizer = autotokenizer.from_pretrained(model_path, trust_remote_code=true)    model.save_low_bit('qwen18chat_int4')    tokenizer.save_pretrained('qwen18chat_int4')  
左滑查看更多
05加载量化模型
保存 int4 模型文件后,我们便可以把他加载到内存进行进一步推理;如果你在本机上无法导出量化模型,也可以在更大内存的机器中保存模型再转移到小内存的端侧设备中运行,大部分常用家用 pc 即可满足 int4 模型实际运行的资源需求。
import torchimport timefrom bigdl.llm.transformers import automodelforcausallmfrom transformers import autotokenizerqwen_prompt_format = {prompt} load_path = qwen18chat_int4model = automodelforcausallm.load_low_bit(load_path, trust_remote_code=true)tokenizer = autotokenizer.from_pretrained(load_path, trust_remote_code=true)input_str = 给我讲一个年轻人奋斗创业最终取得成功的故事with torch.inference_mode():    prompt = qwen_prompt_format.format(prompt=input_str)    input_ids = tokenizer.encode(prompt, return_tensors=pt)    st = time.time()    output = model.generate(input_ids,                            max_new_tokens=512)    end = time.time()    output_str = tokenizer.decode(output[0], skip_special_tokens=true)    print(f'inference time: {end-st} s')    print('-'*20, 'prompt', '-'*20)    print(prompt)    print('-'*20, 'output', '-'*20)    print(output_str)  
左滑查看更多
06gradio-demo 体验
为了得到更好的多轮对话体验,这里还提供了一个简单的 `gradio` demo界面方便调试使用,你可以修改内置 `system` 信息甚至微调模型让本地模型更接近你设想中的大模型需求。
import gradio as grimport timefrom bigdl.llm.transformers import automodelforcausallmfrom transformers import autotokenizerqwen_prompt_format = {prompt} load_path = qwen18chat_int4model = automodelforcausallm.load_low_bit(load_path, trust_remote_code=true)tokenizer = autotokenizer.from_pretrained(load_path,trust_remote_code=true)def add_text(history, text):    _, history = model.chat(tokenizer, text, history=history)    return history, gr.textbox(value=, interactive=false)def bot(history):    response =  history[-1][1]    history[-1][1] =    for character in response:        history[-1][1] += character        time.sleep(0.05)        yield historywith gr.blocks() as demo:    chatbot = gr.chatbot(        [],        elem_id=chatbot,        bubble_full_width=false,    )    with gr.row():        txt = gr.textbox(            scale=4,            show_label=false,            placeholder=enter text and press enter,            container=false,        )    txt_msg = txt.submit(add_text, [chatbot, txt], [chatbot, txt], queue=false).then(        bot, chatbot, chatbot, api_name=bot_response    )    txt_msg.then(lambda: gr.textbox(interactive=true), none, [txt], queue=false)demo.queue()demo.launch()  
左滑查看更多
利用英特尔的大语言模型推理框架,我们可以实现大模型在英特尔端侧设备的高性能推理。只需要 2g 内存占用就可以实现与本地大模型的流畅对话,一起来体验下吧。


就在明天!RT-Thread线下培训成都站!
电视果4K评测 相当值得购买在同类产品中脱颖而出
坚果U2 Pro三色激光电视正式发布 提供了新的设计风向标
一位测试工程师面试官的一些看法
汽车存储的痛点是什么
英特尔CPU部署Qwen 1.8B模型的过程
谈电机上增加变频器的好处
微软通过股票回购计划提高自己的股价
软件无线电在手机和测量仪器中的应用及示例
物联网技术可望降低发电厂带来的污染
AMD聘用摩根大通找未来出路
魅族Pro7什么时候上市?魅族Pro7最新消息:关于魅族Pro7,几个坏消息和一个好消息看了就知道
NLA自然语言分析的环境部署(一)NLA安装部署详细讲解
IBM 专家观点:LinuxONE 全面助力企业级基础架构可持续创新
台达电在上海市打造环保研发中心
示波器测量信号频率的方法介绍
夏普或停止给海信供应液晶面板 将先满足自家电视机
空调技术:商用热水机组不启动的原因
以智能手机品牌为主导的智能家居市场中,谁的表现最突出?
百度Apollo展示成熟的无人驾驶与5G平行驾驶