现在大语言模型的部署,通常都需要大的GPU才能实现,如果是仅仅想研究一下,大语言模型的算法,我们是很想能够直接在我们的工作电脑上就能直接运行的,llama.cpp
就是很好的实现。
LLaMa.cpp
使用int4这种数值格式,其显著降低了内存需求,并且在大多数硬件上其性能严重受到内存限制。LLaMa.cpp
使用原始C ++
的项目来重写LLaMa(长格式语言模型)推理代码。这使得可以在各种硬件上本地运行LLaMa
,包括Raspberry Pi
。
在使用一些优化和量化技术来量化权重的情况下,LLaMa.cpp
使得大型语言模型可以在本地的多种硬件上运行,而无需昂贵的GPU。内存带宽往往是推理的瓶颈,通过量化使用更少的精度可以减少存储模型所需的内存。
下载源码
LLaMa.cpp
的项目地址在:https://github.com/ggerganov/llama.cpp
只要用git命令就能下载下来:
git clone https://github.com/ggerganov/llama.cpp
准备编译工具
LLaMa.cpp
是cpp 跨平台的,在Windows平台下,需要准备mingw
和Cmake
。
- mingw
进入 powershell
下,输入如下的命令安装 mingw
:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
scoop bucket add extras
scoop bucket add main
scoop install mingw
- Cmake
Cmake 的下载地址:https://cmake.org/download/
下载二进制安装版本:
到这里,Windows上的编译工具已经齐全了。
编译LLaMa.cpp
编译LLaMa.cpp
也非常的方便,进入刚下载的源码目录。
cd llama.cpp
编译:
cmake . -G "MinGW Makefiles"
cmake --build . --config Release
没碰到问题的话,在bin
的目录下就会生成几个可执行的exe。
可执行的exe
虽然多,但是用到的主要有两个,一个是quantize.exe
,一个是main.exe
。
有了程序以后,我们还差一个模型。
模型下载
在huggingface
放着很多的开源模型,为了简单和性能,使用的是LLaMA-7B
模型,下载地址在:https://huggingface.co/nyanko7/LLaMA-7B/tree/main
这个模型接近14g,下载需要一点时间,慢慢的等待。
模型下载完成以后,在llama.cpp
的目录下新建一个目录org-models
把下载的文件安排成这样的形式:
org-models/
- 7B/ #这是一个名为7B的文件夹
- consolidated.00.pth
- params.json
- tokenizer.model
模型就完成了,这个是llama
的模型,在普通电脑上是跑不起来的,llama.cpp
是量化。
量化模型
在目录下,运行:
bin\quantize.exe ./org-models/7B/ggml-model-f16.bin ./org-models/7B/ggml-model-q4_0.bin 2
python convert-pth-to-ggml.py org-models/7B/ 1
这时候,在org-models
的目录下生成了ggml-model-f16.bin
,在这里就能输入命令:
bin\main.exe -m org-models/7B/ggml-model-f16.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3 -t 16
让模型跑起来:
但是跑的时候,有点慢。
量化4-bit模型;
python convert-pth-to-ggml.py org-models/7B/ 1
继续跑:
bin\main.exe -m org-models/7B/ggml-model-q4_0.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3 -t 16
这个时候就快多了。但是你是不是发现,他有时候会出错,而却还没有完全答完就结束了,对中文的支持,很一般,这是因为llama.cpp本身对中文就不怎么支持,github上有些人对llama.cpp进行了扩充和微调,使得他中文的理解能力大大的加强。
可以进一步的,把中文的模型,融合进来。