16G内存+CPU本地部署ChatGLM2/Baichuan2推理(Windows/Mac/Linux)

发布时间 2023-09-19 15:57:55作者: hjhhsy120

概述

本文使用chatglm.cpp对中文大语言模型(LLM)进行量化与推理,支持ChatGLM2-6B、Baichuan2-13B-Chat等模型在CPU环境16G内存的个人电脑上部署,实现类似ChatGPT的聊天功能。支持的操作系统包括Windows、Mac OS、Linux等。

其中,量化过程需要临时使用一台内存较大的服务器。4bit量化后的模型较小(Baichuan2-13B量化后约8G),可在16G内存的个人电脑上部署。过程中还需要从github下载代码,从huggingface下载模型。

本文使用的chatglm.cpp版本为0.2.6,后续版本的命令可能有变化,请以readme为准。

接下来先介绍相关背景,而后以Baichuan2-13B-Chat为例介绍部署过程。

背景

大语言模型(LLM)是计算机领域今年的一大研究热点。一些AI公司相继推出了开源的中文LLM,使广大用户得以自由体验LLM的强大功能。

然而,LLM的部署对硬件资源有较高要求。对于不愿花钱租用服务器的用户而言,如何在个人电脑上进行本地化部署,成为了一大难题。

以16G内存、英伟达显卡4G显存的家用电脑为例。目前效果较好的中文LLM,参数量至少为6B或7B规模,例如ChatGLM2-6B与Baichuan2-7B-Chat。这样规模的模型无法完整放入16G内存进行推理,只能offload到硬盘,速度极慢,且对硬盘有损伤。若使用4bit量化的模型,则无法完整放入4G显存运行,目前也没有现成的代码能将其offload到内存。因此,只能考虑完全在CPU内存环境运行4bit量化模型。

对于ChatGLM2,其量化方式支持用CPU版PyTorch运行int4版本的模型,但速度较慢。对于Baichuan2,其提供的int4版本采用bitsandbytes库进行量化,目前没有找到在CPU环境运行的方法。对于一般用户而言,自行编写相关代码有很大难度。

所幸,基于C语言的GGML张量库提供了在CPU环境高速运行量化版模型的机会,而基于GGML的开源代码库chatglm.cpp提供了对ChatGLM2-6B、Baichuan2-13B-Chat等模型的4bit量化支持。对于Baichuan2模型,虽然暂不支持7B版本,但13B量化后也只有约8G,对于16G内存的个人电脑而言完全可以接受。

利用chatglm.cpp,用户可在16G内存的个人电脑上部署ChatGLM2-6B、Baichuan2-13B-Chat等中文LLM推理,实现类似ChatGPT的聊天功能。下文将以Baichuan2-13B-Chat模型为例,介绍如何用chatglm.cpp进行本地部署。ChatGLM2-6B的部署方式也是基本相同的,因此不再赘述。

步骤1-量化

首先,需要对Baichuan2-13B-Chat模型进行4bit量化。不能直接使用百川提供的int4版本。如果没有现成的GGML版4bit量化模型,就只能自己做量化。

即使不想采用量化,为了兼容chatglm.cpp,也需要将原模型转为GGML版本。

量化前的模型约28G,量化后约8G,因此需要临时使用一台内存较大的服务器。

环境与文件准备

在服务器上安装Python环境,例如使用Anaconda,安装过程请参考其他文章。本文使用的Python版本为3.9。

从Github上克隆chatglm.cpp,方法参考readme,即运行以下命令:

git clone --recursive https://github.com/li-plus/chatglm.cpp.git

如果服务器能连接huggingface,就不需要自己下载模型。否则,就需要自行从huggingface下载Baichuan2-13B-Chat模型,只能是以下版本:

https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat/tree/main

下载以上链接的所有文件即可。

执行量化

将前述文件全部放至大内存服务器,然后就可以生成4bit量化的GGML版模型了。

进入 chatglm.cpp 目录,参考readme执行以下命令:

python chatglm_cpp/convert.py -i baichuan-inc/Baichuan2-13B-Chat -t q4_0 -o baichuan2-13b-chat-ggml-int4.bin

如果是自行下载的模型,就将 baichuan-inc/Baichuan2-13B-Chat 替换为模型所在的目录。

提示有缺的库就安装一下。其中pytorch要参考官网的安装方式。

最终得到的 baichuan2-13b-chat-ggml-int4.bin 就是本地化部署所需的模型文件,文件名称可以任意修改。

步骤2-本地部署

本地部署需要至少16G内存,不需要使用GPU。可以在配置较好的个人电脑上进行部署。

环境与文件准备

将上一步得到的模型文件保存到本地。

安装Python环境,建议使用Anaconda。本文使用的Python版本为3.9。

chatglm.cpp是基于GGML的,不需要安装PyTorch。

安装chatglm-cpp库,过程中需要用到 cmakeg++ 。MAC电脑需要先自行配置安装这些软件,然后运行以下命令:

pip install -U chatglm-cpp

Windows和Linux可以用相同的方法,但在Windows上容易报错。一种替代的方法是直接下载whl安装包:

https://github.com/cczhong11/chatglm.cpp/actions/runs/6161193495

在已登录Github的状态下,单击下方 linux-wheelswindows-wheels 即可下载对应操作系统的whl安装包。解压后可以看到多个whl文件,要选择对应的Python版本,例如 cp39 对应的是Python 3.9。

之后执行以下命令安装(Windows系统):

pip install chatglm_cpp-0.2.6-cp39-cp39-win_amd64.whl

这样就不需要安装 cmakeg++ 了。

chatglm.cpp提供的web demo可以实现类似ChatGPT的聊天功能,为此还需安装gradio:

pip install gradio

如果网速过慢,可以使用镜像

pip install pytest -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

web demo的代码在chatglm.cpp的 examples/web_demo.py ,将这个代码单独拿出来使用即可。

运行web demo

web_demo.py 和模型文件放在同一目录下,执行:

python web_demo.py -m baichuan2-13b-chat-ggml-int4.bin --top_k 5 --top_p 0.85 --temp 0.3 --repeat_penalty 1.05

在弹出的网页中可以进行聊天对话。该过程不需要连接互联网。

如果希望局域网的其他设备访问该网页,则需要修改 web_demo.py

先在开头添加以下代码:

import os
os.environ['no_proxy']='localhost,127.0.0.1,::1'

再修改最后一行为:

demo.queue().launch(server_name='0.0.0.0', server_port=7860)

这样启动后,即可在其他设备上用浏览器进行访问。端口号可以自行定义。

以上就是用16G内存+CPU本地部署ChatGLM2/Baichuan2推理的方法介绍,希望能帮助到有相关需求的人。