构建你的CPU本地大模型——利用Intel BigDL量化,利用FastChat完成本地部署

本博客由bigDL-LLM大模型应用开发创新赛参赛队伍SJTUNavSailor所有

想要在CPU上快速运行你的大模型?想要更快更好的量化模型Intel研发的BigDL-LLM重磅来袭!!!你可以将常见大模型量化为INT4//FP4/INT8/FP8 版本,从而在Intel XPU(从笔记本电脑到 GPU 再到云)上以极低延迟运行的库(适用于任何的 Pytorch 模型)。更多模型量化的信息参考BigDL官方仓库: https://github.com/intel-analytics/BigDL.

是否苦于项目开发时,本地大模型难以开发api接口?是否苦于 BigDL 量化模型难以与 modelscope、langchain 等主流框架产生联动?本文将使用 FastChat 框架,为本地大模型(包括但不限于 BigDL 量化模型)启动一个本地服务器,并为模型提供了与 OpenA I兼容的 API 。让你,可以用openai的api调用你的本地大模型!!


1. 使用BigDL库的大模型的量化

本文采用的实例模型为 chatglm3-6b 模型,将通过 BigDL-llm 对模型进行量化,将原本 12GB 左右的模型量化为 INT4 模型,从而将其体量压缩至 4GB,使其可以运行在大多数 Intel XPU 上并保持较低延迟。

1.1 Chatglm3-6B模型文件下载

国内建议直接从modelscope下载chatglm3-6b的模型文件。点击或者复制链接跳转下载地址: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/files
点击下载模型下载模型文件
下载完成后,记住模型的下载地址。

1.2 配置环境

BigDL 和 FastChat 将共用同一个环境,建议创建一个新虚拟环境。创建并激活虚拟环境的代码为:

Note:本文采用的 python 版本为3.10

conda create --name env_name python=3.10 -y
conda activate env_name

进入虚拟环境后,安装BigDL-LLM库

pip install --pre --upgrade bigdl-llm[all]

1.3 加载模型、量化、保存量化模型

为了不每次对模型进行量化,建议先单独加载模型并量化后,保存至本地,留作以后使用。

# 从本地加载模型,并选择量化为INT4模型
from bigdl.llm.transformers import AutoModelForCausalLM
model_in_4bit = AutoModelForCausalLM.from_pretrained(pretrained_model_name_or_path='/path/to/your_model/', load_in_4bit=True, trust_remote_code=True)

save_dir = '/path/to/save_INT4_model' # 用来保存量化后的模型的地址
model_in_4bit.save_low_bit(save_dir) # 保存模型至目的地址

# 为了方便模型加载,将tokenizer加载并同样保存至目的地址
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path='/path/to/your_model/', trust_remote_code=True)
tokenizer.save_pretrained(save_dir) # 保存在模型的同一目的地址下

del(model_in_4bit)

1.4 使用时直接加载已量化好的模型

# 使用时仍使用bigdl库进行模型的加载
from bigdl.llm.transformers import AutoModelForCausalLM
from transformers import AutoTokenizer
save_dir = '/path/to/save_INT4_model' # 保存已量化的模型的位置

model = AutoModelForCausalLM.load_low_big(save_dir, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(save_dir, trust_remote_code=True)

Bigdl-llm支持不同类型的量化,INT8等其余量化方式请参考bigdl官方仓库.

2. 量化模型的本地服务器搭载

鉴于langchain、modelscope等主流框架都支持openai的api,本项目使用FastChat搭载了一个本地服务器作为OpenAI API的本地插件替代品。FastChat为其支持的模型提供了与OpenAI兼容的API。本章节内容将展示如何使用FastChat搭载服务器,挂载量化模型,并提供与OpenAI兼容的API:

2.1 安装FastChat所需依赖

Note:由于加载模型时需要用bigdl的方式加载,所以与bigdl库安装至同一环境

pip3 install "fschat[model_worker,webui]"

2.2 修改FastChat读取模型的方式

FastChat 源码中是利用 transformers 库读取的模型,而 BigDL 库开发了与transformers相同的接口可以无痕替换掉原本的 transformers 库,并且增加了新的函数和方法支持其量化模型的加载。

为了能够成功加载BigDL的量化模型,需要对 FastChat 库的源码做一些小的修改:

Note:编辑的文件的路径为
\anaconda3\envs\fastchat-bypip\lib\site-packages\fastchat\serve\model_worker.py

#将model_worker.py中第838行至840行原来为
       model = AutoModel.from_pretrained(
           model_path, trust_remote_code=True, **from_pretrained_kwargs
       )

#将原来的代码注释掉,改为
       from bigdl.llm.transformers import AutoModelForCausalLM
       model = AutoModelForCausalLM.load_low_bit(model_path, trust_remote_code=True)

需要注意的是,不同原模型对应的需要修改的代码不同。由于本项目采用的是chatglm模型,因此修改对应的加载chatglm模型的代码。同理,其他模型则修改其他模型的加载代码。

2.3 启动RESTful API Server

首先,启动控制器

python -m fastchat.serve.controller

然后,启动模型

python -m fastchat.serve.model_worker --model-path path/to/your_INT4_model --device cpu

最后,启动RESTful API服务,映射至8012端口上

python -m fastchat.serve.openai_api_server --host localhost --port 8012

2.4 测试api

用以下代码测试openai api是否可用

import openai

openai.api_key = "EMPTY"
openai.base_url = "http://localhost:8012/v1/"

model = "path/to/your_INT4_model" # 这里的model选择要和fastchat搭载的模型一致

completion = openai.chat.completions.create(
 model=model,
 messages=[{"role": "user", "content": "Search for the Sacramento Kings win-loss record for the entire 2022-2023 season. Add games won and games lost and multiply that result by 2"}]
)
#print the completion
print(completion.choices[0].message.content)

运行可正常输出结果(由于随机性,输出内容可能不完全一致):
“根据您提供的信息,在2022-2023赛季中,圣迭戈国王的战绩为35胜47负,胜场与负场的差距为12。将这个差距乘以2,得到的结果是24,即该赛季的胜场和负场总和为24场。”

3. 总结

经由以上的过程,我们得到了一个运行在本地CPU上的INT4量化大模型,并对外提供 OpenAI 兼容 API,使得我们在使用其他框架时,可以不用注意接口,而直接使用我们的模型。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值