【2024 Dec 超实时】编辑安装llama.cpp并运行llama

首先讲一下环境

这是2024 年12月,llama.cpp 的编译需要cmake 呜呜呜 网上教程都是make 跑的。反正我现在装的时候make已经不再适用了,因为工具的版本,捣鼓了很久。

ubuntu 18 + conda env内置安装。

以下是可以完美编译llama.cpp的测试工具版本号:

gcc9 g++9 #只要大于等于9 版本都集成了cmake是要的c++17指令集,gcc8测试了要手动软链 麻烦 反正凉

cuda 11.8 #cuda 版本11 或者12 都行,10测试了不行

cmake 3.22 # camke 大于等于3.14 都行

安装gcc 9/g++ 9:

ubuntu 18默认只能安装到gcc/g++ 8, 需要安装gcc9需要添加新的ppd:

  1. 添加ppa源
bash 复制代码
sudo add-apt-repository ppa:ubuntu-toolchain-r/test

#有问题的话,在https://launchpad.net/\~ubuntu-toolchain-r/+archive/ubuntu/test?field.series_filter=trusty网址中找到ppa源,可以尝试手动添加:

#打开 .list文件

bash 复制代码
vim /etc/apt/sources.list
# 文件末尾添加  bionic 是代表系统ubuntu18
deb https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu bionic main 
deb-src https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu bionic main 
  1. 更新apt-get
bash 复制代码
sudo apt-get update

更新时可能出错

bash 复制代码
#我在apt-get update 的时候报错:
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [102 kB]
Err:1 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu bionic InRelease
  The following signatures couldn\'t be verified because the public key is not available: NO_PUBKEY 2C277A0A352154E5 NO_PUBKEY 1E9377A2BA9EF27F
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [102 kB]
Reading package lists... Done
W: GPG error: http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu bionic InRelease: The following signatures couldn\'t be verified because the public key is not available: NO_PUBKEY 2C277A0A352154E5 NO_PUBKEY 1E9377A2BA9EF27F
E: The repository 'http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu bionic InRelease' is not signed.

解决:

根据错误消息中的 NO_PUBKEY 部分,系统丢失了两个公钥,分别是 2C277A0A352154E5 和 1E9377A2BA9EF27F。可以手动添加这两个公钥。

bash 复制代码
#添加公钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 2C277A0A352154E5
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F
#重新更新
sudo apt-get update

其他错误参考这几个文章,实在不行的话,自行google看看了
有bug时查:ubuntu无法添加PPA的解决办法
因不能翻墙时查:ubuntu下apt添加第三方ppa源

3.下载gcc9和g++9

bash 复制代码
sudo apt install gcc-9 g++-9
  1. 切换版本,90是当前版本优先级,数值越大优先级越高,系统默认使用优先级最高的
bash 复制代码
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9

#其他指令

bash 复制代码
# 查看当前系统有的gcc
ls /usr/bin/gcc* 
# 查看当前所用gcc/cmake
gcc --version
cmake --version

如果上面在线安装你网络有问题,建议离线安装:
最后办法参考:离线安装gcc/g++ 9

离线安装需要注意

如果你是手动安装的话,要注意libstdc++的版本是否匹配上,gcc 9.5.0 需要libstdc++支持至少GLIBCXX 3.26以上版本:

#查看你的系统libstdc++是否有GLIBCXX 3.26

bash 复制代码
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

没有的话要安装或更新 libstdc++:

bash 复制代码
sudo apt-get update
sudo apt-get install libstdc++6

可以通过以下程序测试一下你的gcc是否能够正确编译c++17指令集

cpp 复制代码
//可以尝试编译一个简单的 C++17 示例程序,创建一个简单的 test_filesystem.cpp 文件,如下所示:
#include <iostream>
#include <filesystem>

int main() {
    std::filesystem::path p = ".";
    for (const auto& entry : std::filesystem::directory_iterator(p)) {
        std::cout << entry.path() << std::endl;
    }
    return 0;
}

然后使用以下命令进行编译,没报错就是 正常

bash 复制代码
g++ -std=c++17 test_filesystem.cpp -o test_filesystem
./test_filesystem

接下来可以下载和编译llama.cpp

1.下载 llama.cpp

bash 复制代码
git clone https://github.com/ggerganov/llama.cpp.git

2.cmake编译,参考这个官方https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md

cd llama.cpp

bash 复制代码
# 如果需要llama支持 cuda,cpu版本的话直接去掉-DGGML_CUDA=ON就可以了
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

eee... 按照这几个版本工具编译 应该没问题 亲测跑通

测试使用llama.cpp 跑本地模型

参考这个:https://zhuanlan.zhihu.com/p/690548599

  1. 以mistral 7b v3 为例子,先下载模型
bash 复制代码
pip install -U huggingface_hub
# 建议将下面这一行写入 ~/.bashrc。若没有写入,则每次下载时都需要先输入该命令
export HF_ENDPOINT=https://hf-mirror.com  

huggingface上申请你的token,然后执行下载

bash 复制代码
huggingface-cli download mistralai/Mistral-7B-Instruct-v0.3 --local-dir Mistral-7B-Instruct-v0.3 --local-dir-use-symlinks False --resume-download --token your_name_token_hf
  1. 进入llama.cpp 目录,利用llama.cpp 转化工具 把模型转成.guff文件,/XX/model/Mistral-7B-Instruct-v0.3/是你本地的模型路径
bash 复制代码
python3 convert_hf_to_gguf.py /XX/model/Mistral-7B-Instruct-v0.3/

3.量化模型,压缩一下,让跑的时候别吃太多内存(当然性能会有影响)。XXX/model/Mistral-7B-Instruct-v0.3/Mistral-7B-Instruct-v0.3-F16.gguf是你本地需要压缩模型路径,./myllms/Mistral-7B-Instruct-v0.3-Q4_K_M.gguf是压缩完存储名称。Q4_K_M表示压缩类型是INF4

bash 复制代码
#camke后生成的压缩指令路径是这个:./build/bin/llama-quantize
 ./build/bin/llama-quantize  /XXX/model/Mistral-7B-Instruct-v0.3/Mistral-7B-Instruct-v0.3-F16.gguf ./myllms/Mistral-7B-Instruct-v0.3-Q4_K_M.gguf  Q4_K_M

压缩成功长这样:

4.执行量化模型,./build/bin/llama-cli 指令:

bash 复制代码
#不知道指令在哪的话 find 一下:
#在当前目录及子目录中查找包含字符串的文件:
find . -type f -exec grep -H 'search_string' {} \;
bash 复制代码
./build/bin/llama-cli -m ./myllms/Mistral-7B-Instruct-v0.3-Q4_K_M.gguf -n 128
## 自动化跑了个测试,test example as follows:
## Q: Solve 5*u - 4*m = 33, -3*u - 2*m = 3 - 12 for u.
## A: 3 [end of text]

想要和模型交互的话用这个:

bash 复制代码
./build/bin/llama-cli -m ./myllms/Mistral-7B-Instruct-v0.3-Q4_K_M.gguf   --color -cnv

交互界面如下,绿色是我输入的问题,mistral 正在回答:

llama-cli的参数 参考这里:

https://github.com/ggerganov/llama.cpp/tree/master/examples/main

相关推荐
测试者家园1 天前
ChatGPT自动生成功能测试用例的步骤
软件测试·chatgpt·llm·ai赋能·测试用例生成·用chatgpt做软件测试·测试图书·效能质量
Entropy-Go1 天前
如何高效的向AI大模型提问? - 提示工程Prompt Engineering
ai·大模型·llm·prompt·提示工程·问答
deephub2 天前
ORCA:基于持续批处理的LLM推理性能优化技术详解
人工智能·深度学习·性能优化·llm
真·skysys2 天前
[NeurlPS 2022] STaR 开源代码实现解读
llm·neurlps·star·self-taught
大大怪2 天前
LangGraph 事件系统与架构设计深度解析
后端·llm
Bdawn2 天前
【通义实验室】开源【文本生成图片】大模型
人工智能·python·llm
lexusv8ls600h3 天前
AI - RAG中的状态化管理聊天记录
人工智能·langchain·llm
知来者逆3 天前
基于ArqMATH 数据集探索大语言模型在数学问题推理解答中的能力
人工智能·gpt·语言模型·自然语言处理·llm
少喝冰美式3 天前
微调一个自己的大模型(腾讯云cloud studio + llama factory)
人工智能·深度学习·机器学习·llm·云计算·腾讯云·llama