
【教程】CPU 本地部署和体验量化版大模型
球友们,大家好,我是程序员贺同学。
目前在互联网大厂搬砖,在搜狗/腾讯/字节都待过,业余时间也比较喜欢技术,爱钻研一些有趣的东西,平时也喜欢分享一些好玩的技术文章。
很久没有在星球里发帖了,很荣幸作为嘉宾能和大家一起分享和交流,最近以 ChatGPT、GPT-4等为代表的大语言模型(Large Language Model, LLM)掀起了新一轮自然语言处理领域的研究浪潮,展现出了类通用人工智能(AGI)的能力,受到业界广泛关注。然而,由于大语言模型的训练和部署都极为昂贵,为构建透明且开放的学术研究造成了一定的阻碍。
前两天我对这个 ChatGPT 本地化部署非常感兴趣,在某一天下班回来之后,一口气折腾到了凌晨 2 点,终于在自己的笔记本电脑上,跑通了,并且实现了本地部署和实时对话的效果。
这一次的搭建过程和部署更加节约成本,省去了购买云服务器的过程,球友们直接用自己的笔记本就可以搭建和部署!
主要基于中文预料的的模型和推理,对于很多想尝试自己部署的球友们来说,只要搭建过程参考我这个来,保持耐心,一步一步来,基本上就没问题,你也可以享受个性化部署的那种感觉,想想就很 cool 有没有!
那么,这两天抽空,这次毫无保留的分享和记录,我本地跑部署跑模型的过程,满满干货!话不多说,我们开始!
0x00 笔记本配置
我自己的笔记本 Mac 配置如下,如果大家也想用自己笔记本来搭建部署的话,建议笔记本内存不小于 24G,后面用到的很多模型和文件会相对会比较大。
0x01 模型下载
得益于开源的力量,本教程基于开源的 中文LLaMA模型和经过指令精调的 Alpaca 大模型。这些模型在原版LLaMA的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。
声明:本教程相关资源仅供学术研究使用。
本教程主要内容:
- 🚀 针对原版LLaMA模型下载提供下载链接
- 🚀 使用开源的中文文本数据预训练的中文LLaMA大模型(7B)
- 🚀 使用开源的进一步经过指令精调的中文Alpaca大模型(7B)
- 🚀 快速使用笔记本电脑(个人PC)的 CPU 本地部署和体验量化版大模型
用户须知(必读)
Facebook 官方发布的 LLaMA模型禁止商用,并且官方没有正式开源模型权重(虽然网上已经有很多第三方的下载地址,但如果是第一次玩,根本分不清楚那个是正版哪个是稳定版,很可能你好不容易下载了一个十几G的模型,结果本地不能跑)
提醒:网上开源的各种中文 LLaMA/Alpaca LoRA 模型无法单独使用,需要搭配原版 LLaMA 模型,可以理解为原LLaMA 模型上的一个“补丁”,两者进行合并即可获得完整版权重。
那么,这里我也直接把目前可以跑的原始 LLAMA 模型(本人已经验证)下载地址给到大家
- 原始 LLAMA 模型,正规渠道通过 facebook仓库 填表申请(可能周期会比较长)。这里提供个 BD云
- 中文 Chinese-Alpaca-7B 指令精调模型,简而言之就是给原始模型打个中文补丁,这里提供两个转存 [百度网盘] [Google Drive]
上面两个模型下载完解压,到本地,检查一下对于的原始目录结构是否 ok。如果和下面一样就是没问题的。
然后对模型进行一下 sha256 的检测。
Windows 系统执行命令
Mac 系统
结果
0x02 合并模型
在第一步里,两个模型下载解压应该在同一个目录里,如下
这里先推荐大家在 conda 虚拟环境里,执行相关的 Python 命令。
两个原因
1、conda 可以理解为一个工具,也是一个可执行命令,其核心功能是包管理和环境管理。包管理与 pip 的使用方法类似,环境管理则是允许用户方便滴安装不同版本的 Python 环境并在不同环境之间快速地切换。
2、conda 创建 Python 虚拟环境,比较灵活,安装文件可以避免影响主机的原版配置。
下载地址: https://www.anaconda.com/products/distribution#Downloads
根据你的笔记本系统下载对应的版本,下载之后。
然后在当前目录,在笔记本终端里,执行命令
进入 虚拟环境之后,不特殊说明,下面所有的命令都在 conda 的虚拟环境里执行
终端变成了类似这样(有个前缀 alpaca 的东东),就是虚拟环境了
(alpaca) ⚙ root@C02GF2GQMD6R ~/Downloads/mini_model /~:
依次执行
将原版 LLaMA 模型转换为 HF 格式
点开这个链接 convert_llama_weights_to_hf.py 然后本地保存为同名的文件, 执行转化命令
PS:确保在 LLaMA 同级目录下,并且在 alpaca 虚拟环境
Mac 系统
Windows 系统(E:\\LLaMA 是你下载模型的位置,按实际情况填写)
如果出现报错
Traceback (most recent call last):
File "/Users/herongwei/mini_model/convert_llama_weights_to_hf.py", line 21, in <module>
import torch
ModuleNotFoundError: No module named 'torch'
生成文件被存放在 llama_hf 中,目录结构如下
将两个模型合并
点开链接 merge_llama_with_chinese_lora.py 下载保存同名文件,本地执行
Mac 系统
Windows 系统
正确执行会生成
0x03 量化模型
依旧在当前目录,新建文件夹 zh-models,将之前 Chinese-LLaMA-Alpaca文件夹中的 tokenizer.model 放入其中,然后在 zh-models 中建立 7B 文件夹(mkdir 命令新建目录),将上面合并生成的 consolidated.00.pth 和 params.json 放入其中,目录结构如下:
转化代码:convert-pth-to-ggml.py ,依旧是点击链接,复制到本地同名文件,执行命令,将其转化为 ggml。在 7B文件夹中生成 ggml-model-f16.bin。
如果出现包报错
python3 convert-pth-to-ggml.py zh-models/7B/ 1
Traceback (most recent call last):
File "/Users/herongwei/Downloads/mini_model/convert-pth-to-ggml.py", line 25, in <module>
from sentencepiece import SentencePieceProcessor
ModuleNotFoundError: No module named 'sentencepiece'
接下来,我们需要对 FP16 模型进行 Q4 量化,这里需要用到 llama.cpp仓库,先对其克隆和编译
运行前请确保:
- 模型量化过程需要将未量化模型全部载入内存,请确保有足够可用内存( 7B 版本需要 13G 以上)
- 加载使用 4-bit 量化后的模型时(例如 7B 版本),确保本机可用内存大于 4-6G(受上下文长度影响)
- 系统应有 make(MacOS/Linux自带)或 cmake(Windows 需自行安装)编译工具
- llama.cpp 官方建议使用 Python 3.9 或 3.10 编译和运行该工具
下载命令
如果是Windows 系统,cmake 环境。接着执行
可执行文件被生成在 llama.cpp\build\bin\Release 中。
如果是 Mac 系统
运行以下命令对llama.cpp项目进行编译,生成./main和./quantize二进制文件。
Windows 系统
需要quantize.exe,然后执行它
Mac 系统
最终生成 ggml-model-q4_0.bin,也就是用来启动的模型文件了。可用参考这个 hash
Windows 系统
结果
Mac 系统,执行命令
结果
如果你执行命令,也到了这一步,说明量化没问题!最后一步了,别着急,稳住!
0x04 使用
如果你是 Windows 系统,想在 win 上跑,就是执行 main.exe,在 llama.cpp 中执行make,将 main 编译出来,然后执行
如果是 Mac 系统
直接在 main 生成目录里执行
参数说明
-c 控制上下文的长度,值越大越能参考更长的对话历史
-ins 启动类ChatGPT的对话交流模式
-n 控制回复生成的最大长度
--repeat_penalty 控制生成回复中对重复文本的惩罚力度
--temp 温度系数,值越低回复的随机性越小,反之越大
--top_p, top_k 控制采样的相关参数
执行上面最后一步命令之后,你会看见,屏幕前会输出一大波东西。。。类似如下
等稳定之后,出现一个 > 输入框,说明,大功告成啦!!!!你可以直接和模型对话了!!!开始毫无忌惮的的玩耍吧!
以后会不定期输出一些大家感兴趣的好玩有趣的技术内容。大家对后端,AI 领域啥方面的技术感兴趣,或者有啥问题可以找我 hh。
