llama.cpp

GitHub - ggerganov/llama.cpp: Port of Facebook's LLaMA model in C/C++,这个项目只能膜拜啊,😍😍😍。这是有胆儿搞llm,但又没有GPU的福音啊!当然,你要是有GPU,人家也不能让你浪费,必须得安排上,同样支持。从项目名称上可以看出这是llama系列的,那其他模型的有没有呢?那是必须的,简直是雨后春笋啊(谁先谁后我还没有弄清楚,但第一个发现的是你)。

下面先看一下那些让人爽歪歪的cpp项目:

前期准备

本笔记是ChatGLM2-6B - xiaodu114.github.io的后续,还是先根据这篇准备好环境吧!机器必须还是我的老朋友。

还需要什么

虽然先遇到了你,但是前期遇到了编译失败等一些问题,所以就先有了她:chatglm.cpp - xiaodu114.github.io,看看这里是怎么安装CMake的。

主角登场

llama.cpp项目中包括两部分:C/C++部分,也就是需要编译的,他可以帮你量化、和llm对话等;Python部分,它可以帮你转换为GGUF格式(GGML,已不再支持,但是有GGML转GGUF的脚本)。其实,现在使用起来方便多了,官网上已经发布了exe压缩包了,就不用我们自己编译了。这里记录一下编译过程:

下载仓库

#   你想把项目放到哪个目录下,在该目录下进入命令行或者PowerShell。这里是:E:\llm
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
            

这里将项目下载到E:\llm\llama.cpp路径下了,如下图:

llama.cpp GitHub项目结构目录

说明:这里的仓库是今天(2023-10-26)下载的。

编译项目

cmake -B build
            

llama.cpp cmake build

#   上面的命令 cmake -B build 成功之后,执行下面这个  
cmake --build build -j --config Release
            

编译的时候,虽然还是一大堆黄色,但是比以前淡定多了,毕竟看的多了。之前用同样的方式,编译时会报错,建议使用make(不记得从哪里看到的了……)。另外发布的版本中已经有exe文件了,所以也就没有测试。别说,今天为了写这篇笔记,再试一下,竟让成功了,您上眼:

llama.cpp cmake build

Python

这里准备一下该项目的Python部分

虚拟环境

#   创建虚拟环境
python -m venv venv
#   激活虚拟环境
.\venv\scripts\activate
            

Python 虚拟环境

安装依赖

pip install -r requirements.txt
            

llama.cpp Python 依赖 添加 requirements.txt

注意:安装完依赖之后,先别着急关掉啊!后面有小弟要表演,请耐心等待。

大佬已到位。他的小弟可真不少啊,下面我们挑几个遛遛:

Baichuan2-7B-Chat

百川:让我先来,让我先来,我来了,哈哈!下面请看我的表演。

下载LLM 模型

这个下载就比chatglm2-6b方便多了。虽然拥抱脸🤗还是联系不上。但是但是但是这次遇到了她:魔搭社区,这里还是有很多模型的,就比如我们要用的Baichuan2-7B-Chat。下载方式也很方便:使用git,就像你克隆GitHub的项目一样。只是有一点需要注意,因为需要下载大文件,所以需要lfs支持。最新版的git在安装时就有lfs的选项。这里使用的是:git version 2.42.0.windows.2赶紧上代码:

git lfs install
git clone https://modelscope.cn/baichuan-inc/Baichuan2-7B-Chat.git 
            

Baichuan2-7B-Chat 大语言模型 结构目录

开始转了啊

接着上面创建的Python虚拟环境,赶紧表演吧,已经等不及了。

#   convert.py文件在 llama.cpp 项目的根目录
#   下面命令会在相同的目录下生成转换之后的文件,这里是:ggml-model-f16.gguf
#   暂时还有去确实是否有指定输出目录的参数
python convert.py D:\llm\baichuan-inc\Baichuan2-7B-Chat
            

llama.cpp 转 GGUF 成功

量化

#   首先找到 llama.cpp 项目编译之后生成一堆exe的文件夹
cd build\bin\Release
#   之后执行下面的命令
.\quantize.exe D:\llm\baichuan-inc\Baichuan2-7B-Chat\ggml-model-f16.gguf D:\llm\baichuan-inc\Baichuan2-7B-Chat-GGUF\ggml-model-q4_0.gguf q4_0
            

llama.cpp 量化 q4_0 成功

赶紧聊聊吧

#   更多参数的使用,还得多去官网逛逛啊
#   第一问
.\main.exe -m D:\llm\baichuan-inc\Baichuan2-7B-Chat-GGUF\ggml-model-q4_0.gguf -p "What's your name?"
#   第二问
.\main.exe -m D:\llm\baichuan-inc\Baichuan2-7B-Chat-GGUF\ggml-model-q4_0.gguf -p "你叫什么名字?"
            

llama.cpp 转 GGUF 对话1

llama.cpp 转 GGUF 对话2 中文 乱码

都说llama的中文支持不友好……他不友好,我认了。但是Baichuan2-7B-Chat不行,毕竟,毕竟,毕竟是吧!还有就是,chatglm.cpp中体验ChatGLM-6B就没这个问题。尝试了几种办法,如下:

1、PowerShell中文的问题(该电脑一直有这个问题)
chcp 65001,不好使
2、cmd
这个也试了一下,不好使
3、常见问题 · ymcui/Chinese-LLaMA-Alpaca Wiki · GitHub
根据这里的:问题6。也没有解决

开始以为PowerShell或者cmd就没希望了,但是下面的命令带来了希望,请看:

.\main.exe -m D:\llm\baichuan-inc\Baichuan2-7B-Chat-GGUF\ggml-model-q4_0.gguf `
--color -i -c 4096 -t 8 --temp 0.5 --top_k 40 --top_p 0.9 --repeat_penalty 1.1 `
--in-prefix-bos --in-prefix '[INST]' --in-suffix '[/INST]' -p `
"[INST] <<SYS>>\nThe following is a conversation between a human user and an intelligent assistant.\n<</SYS>>\n\n你叫什么名字? [/INST]"
            

补充:开始还不明白这里的INST、SYS的意思,后来看langchain时,有好多提示模型,例如:SystemMessagePromptTemplate等,感觉有点类似,后面慢慢研究……

llama.cpp 转 GGUF 对话3 中文正常

这里还发现一个问题,咱得老老实实的按照官网的例子来,要不容易出现乱码😅😅😅。你在看看这个例子:

#   下面的txt文件,llama.cpp项目中就有啊
.\main.exe -m D:\llm\baichuan-inc\Baichuan2-7B-Chat-GGUF\ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f "E:\llm\llama.cpp\prompts\chat-with-baichuan.txt"
            

先看一下上面说的txt文件的内容,如下图:

llama.cpp prompts\chat-with-baichuan.txt

llama.cpp 基于 prompts\chat-with-baichuan.txt 对话

从上面的截图可以看出:中文应该没有问题。但是这里也发现了一个问题,就是俩人一直在对话(我没问啊),不知道啥时候结束,就直接强制停止了,后面有时间研究一下。

LM Studio

llama.cpp有了之后,可以让我们在普通的电脑上体验llm了。之后就开始苦苦寻找支持GGUF的框架、WebUI、软件等等,类似Langchain-Chatchat的项目(支持GGUF),那绝对高兴的不行。前期也发现了一些,例如:GitHub - oobabooga/text-generation-webui: A Gradio web UI for Large Language Models. Supports transformers, GPTQ, AWQ, llama.cpp (GGUF), Llama models.,可惜没有跑成功。某天发了她:LM Studio - Discover, download, and run local LLMs,完美啊!啥中文乱码啊!重要吗?不不不重要,我有了她……

安装之后,首先设置一下模型目录Local models folder,这里设置的是D:\llm,看过我的llm系列文章的应该发现了,所有的模型都放到这里了。设置好之后,她会自动检测出她需要的文件:

LM Studio 设置本地模型文件夹

之后就可以对话了。当然还需要选择要给模型,如果不支持,她会告诉你的:

LM Studio 对话

还有很多关于模型的参数配置后面慢慢研究。她还支持Http Server,并且兼容OpenAI的API……

llama.cpp web server

【2024-03-28 更新】

llama.cpp还有web server,并且兼容 OpenAI API ,才知道吗?感觉错过了一个亿……虽然没有上面的LM Studio操作丝滑,但是这里还是要记录一下

【2024-03-28】用git克隆了一下最新的代码,按照上面的编译了一下,一起都很顺利。GGUF就不用转了,之前转的还留着呢。下面开始表演

./server.exe -m D:\llm\baichuan-inc\Baichuan2-7B-Chat-GGUF\ggml-model-q4_0.gguf --host 127.0.0.1 --port 10010
            

启动 llama.cpp web server

web 页面测试

启动服务之后,你可以用他提供的web页面进行对话,如下图:

llama.cpp web server 启动之后,web 对话页面

OpenAI API 测试

下面使用postman做一下OpenAI API测试

llama.cpp web server 启动之后,postman 和 OpenAI API 测试