Llama 2 是 Meta 公司发布的最新一代开源大模型,训练数据集达2万亿 Token,上下文长度由 llama 1 的 2048 扩展到 4096,能理解和生成更长的文本,在开源大模型中各基准的测试上表现突出,最重要的是,该模型可免费用于商业用途。
关于模型量化
大语言模型在各种领域都有着广泛的应用,但是也面临着一些挑战,比如模型的大小、计算量和内存占用都很大,这限制了模型在某些设备上的部署和运行。为了解决这些问题,模型量化应运而生。模型量化是一种将浮点计算转成低比特定点计算的技术,它可以有效的降低模型计算强度、参数大小和内存消耗,从而提高模型的推理速度和效率。
什么是 GGUF 文件?
它是一种新的二进制模型文件,它可以对深度学习模型进行高效的压缩,大大减少模型的大小和内存占用,从而提高模型的推理速度和效率,同时兼顾模型的推理质量。其中,一个突出的优点是可以跨平台和跨设备地加载和运行模型,无需安装任何额外的依赖库。
GGUF 有多种格式,主要区别在于浮点数的位数和量化的方式。不同的格式会影响模型的大小、性能和精度,一般来说,位数越少,量化越多,模型越小,速度越快,但是精度也越低。
例如:Q4_K_M 是一种 GGUF 模型文件的量化方式,它表示使用 4 位整数来量化模型的权重,其中 K 表示 Kernel,M 表示 Medium,意味着只有卷积核的权重被量化,而且使用中等的量化精度。
什么是 llama.cpp?
llama.cpp 是一个用 C/C++ 编写的 Llama 2 的运行时,可以在普通的笔记本电脑上运行 Llama 2 的模型,用来将模型转换并量化为 GGUF 文件,从而实现更多的功能和交互。
接下来,进入正题,这里通过 Windows 11 中的 wsl 2 来安装 Ubuntu 20.04 系统进行操作。
第一步:下载 Llama 2 模型
首先,从 Hugging Face 上下载你想要使用的 Llama 2 模型,比如 Atom-7B-Chat,这是一个基于 Llama2-7B 采用大规模的中文数据进行预训练的对话模型。如下所示:
# 克隆模型仓库
git clone https://huggingface.co/FlagAlpha/Atom-7B-Chat
克隆完成后,你可以在 Atom-7B-Chat 文件夹中查看到模型的文件,包括 config.txt、pytorch_model.bin、tokenizer_config.txt 等。
第二步:下载 llama.cpp 库
接着还需要下载 llama.cpp 库,如下所示:
# 克隆 llama.cpp 库的源码
git clone https://github.com/ggerganov/llama.cpp
# 进入 llama.cpp 目录
cd llama.cpp
第三步:转换模型格式
然后,你需要把模型的文件转换成 GGUF 格式,使用 llama.cpp 库中的 convert.py 脚本来完成。转换时需要指定模型的路径和上下文长度(模型可以处理的最大的文本长度),不同的模型可能有不同的上下文长度。
如果模型是 LLaMA v1,则使用 --ctx 2048,如果你的模型是 LLaMA v2,则使用 --ctx 4096。这里使用 --ctx 4096。如下所示:
# 转换模型文件
python3 convert.py models/Atom-7B-Chat --ctx 4096
这个脚本会把模型的文件转换成生成一个 ggml-model-f16.gguf 文件,并保存在 Atom-7B-Chat 文件夹中,这就是 16 位浮点数的 GGUF 格式的模型文件。
在转换过程中,你可能会遇到安装一些依赖库的问题,比如 numpy 和 sentencepiece。先更新 apt-get,再使用以下命令来安装:
# 安装 numpy
sudo apt-get install python3-numpy
# 安装 pip
sudo apt-get install python3-pip
# 安装 sentencepiece
pip install sentencepiece
# 国内 pip 速度很慢,这里改用清华镜像来下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sentencepiece
这样,你就可以顺利地运行 convert.py 脚本了。
第四步:量化模型文件
使用 llama.cpp 库中的 quantize 程序来进行模型量化,先编译 quantize 程序,然后运行它,如下所示:
# 堆代码 duidaima.com
# 进入 llama.cpp 文件夹
cd llama.cpp
# 创建 build 文件夹
mkdir build
# 进入 build 文件夹
cd build
# 安装 cmake
sudo apt install cmake
# 编译 quantize 程序
cmake --build . --config Release
# 运行 quantize 程序,指定输入和输出的模型文件和量化方式
bin/quantize ../models/Atom-7B-Chat/ggml-model-f16.gguf ../models/Atom-7B-Chat/ggml-model-Q4_K_M.gguf Q4_K_M
这样,在 Atom-7B-Chat 文件夹中就生成一个 4 位整数的 GGUF 模型文件。然后,你就可以用常规的编程方法来调用这个模型,实现聊天、嵌入等功能啦。