【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源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test

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

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 

查找对应的ubuntu版本后 找到ppa指令
2. 更新apt-get

sudo apt-get update

更新时可能出错

#我在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。可以手动添加这两个公钥。

#添加公钥
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

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

#其他指令

# 查看当前系统有的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

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

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

sudo apt-get update
sudo apt-get install libstdc++6

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

//可以尝试编译一个简单的 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;
}

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

g++ -std=c++17 test_filesystem.cpp -o test_filesystem
./test_filesystem

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

1.下载 llama.cpp

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

# 如果需要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 为例子,先下载模型
pip install -U huggingface_hub
# 建议将下面这一行写入 ~/.bashrc。若没有写入,则每次下载时都需要先输入该命令
export HF_ENDPOINT=https://hf-mirror.com  

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

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/是你本地的模型路径
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

#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 指令:

#不知道指令在哪的话 find 一下:
#在当前目录及子目录中查找包含字符串的文件:
find . -type f -exec grep -H 'search_string' {} \;
./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]

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

./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
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go-zero(十二)消息队列

go zero 消息队列 在微服务架构中&#xff0c;消息队列主要通过异步通信实现服务间的解耦&#xff0c;使得各个服务可以独立发展和扩展。 go-zero中使用的队列组件go-queue&#xff0c;是gozero官方实现的基于Kafka和Beanstalkd 的消息队列框架,我们使用kafka作为演示。 一、…

vue绕过rules自定义编写动态校验

今天犯了个低级错误&#xff0c;虽然走了很多弯路&#xff0c;但这个过程还是值得记录一下 例子如下&#xff0c;有两个输入框&#xff1a; 第一个是套餐选择下拉框&#xff0c;可以下拉选择三个内容 第二个要根据上面的套餐选择三个选项来决定怎么显示&#xff0c;使用v-if&…

ABAQUS进行焊接仿真分析(含子程序)

0 前言 焊接技术作为现代制造业中的重要连接工艺,广泛应用于汽车、船舶、航空航天、能源等多个行业。焊接接头的质量和性能直接影响到结构件的安全性、可靠性和使用寿命。因此,在焊接过程中如何有效预测和优化焊接过程中的热效应、应力变化以及材料变形等问题,成为了焊接研…

【efinance一个2k星的库】

efinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库&#xff0c;回测以及量化交易的好帮手 但没有等比复权的&#xff0c;不用。 import efinance as ef ef.stock.get_quote_history(510880,fqt2)

【考前预习】3.计算机网络—数据链路层

往期推荐 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 浅谈云原生--微服务、CICD、Serverless、服务网格_云原生cicd-CSDN博客 子网掩码、网络地址、广播地址、子网划分及计算_子网广播地址-CSDN博客 浅学React和JSX-CSDN博客 目录 1.数…

Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)

点击如下链接&#xff1a; https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧&#xff0c;请求免费的License 如果提示登录&#xff0c;请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…

嵌入式Linux应用层开发——调试专篇(关于使用GDB调试远程下位机开发板的应用层程序办法 + VSCode更好的界面调试体验提升)

环境预备——调试 虽说有正点原子的代码带着&#xff0c;但是&#xff0c;如果我们只是打着printf这种方式进行手动的检查代码错误&#xff0c;还是不太方便的&#xff0c;笔者这里整理了两个上位机调试路线。 路线1&#xff1a;使用GCC7.5&#xff0c;这个路线比较保守&#…

深度学习训练参数之学习率介绍

学习率 1. 什么是学习率 学习率是训练神经网络的重要超参数之一&#xff0c;它代表在每一次迭代中梯度向损失函数最优解移动的步长&#xff0c;通常用 η \eta η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中&#xff0c;模型通过样本数据给出预测值&#xff0…

蒙特卡洛模拟(Monte Carlo Simulation)详解

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 历史背景 蒙特卡洛模拟的名称来源于摩纳哥的蒙特卡洛赌场&#xff0c;因其依赖于随机性和概率&#xff0c;与赌博中的随机过程有相似之处。该方法的雏形可以追溯到20世纪40年代&#xff0c;二战期…

Git-分支(branch)常用命令

分支 我们在做项目开发的时候&#xff0c;无论是软件项目还是其他机械工程项目&#xff0c;我们为了提高效率以及合理的节省时间等等原因&#xff0c;现在都不再是线性进行&#xff0c;而是将一个项目抽离出诸进行线&#xff0c;每一条线在git中我们就叫做分支&#xff0c;bran…

《数据结构之美-- 单链表》

引言&#xff1a; 首先由上次我们实现的顺序表聊起&#xff0c;我们在实现顺序表的时候会发现&#xff0c;在每次插入数据时当空间不够时就会涉及到扩容&#xff0c;而顺序表的扩容一般都是呈二倍的形式来进行&#xff0c;因此这就有可能造成空间的浪费&#xff0c;那该如何解…

NVR小程序接入平台/设备EasyNVR深度解析H.265与H.264编码视频接入的区别

随着科技的飞速发展和社会的不断进步&#xff0c;视频压缩编码技术已经成为视频传输和存储中不可或缺的一部分。在众多编码标准中&#xff0c;H.265和H.264是最为重要的两种。今天我们来将深入分析H.265与H.264编码的区别。 一、H.265与H.264编码的区别 1、比特率与分辨率 H.…

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF&#xff1a;免费好用的在线图片转 PDF 工具 在日常工作和生活中&#xff0c;我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料&#xff0c;还是整理照片集&#xff0c;将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

RabbitMQ 整合 SpringBoot

概述 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力、流量削峰消息服务中两个重要概念: 消息代理(`message broker`)和目的地(`destination`) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形…

Docker的初识

目录 1. 容器技术发展史1.1 Jail 时代1.2 云时代1.3 云原生时代1.3.1 Google & Docker 竞争1.3.2 k8s 成为云原生事实标准 2. 虚拟化和容器化的概念2.1 什么是虚拟化、容器化2.2 为什么要虚拟化、容器化&#xff1f;2.3 虚拟化实现方式2.3.1 应用程序执行环境分层2.3.2 虚拟…

MySQL 索引解析:让查询速度飙升

1.前言 之前几篇文章&#xff0c;小编和大家分享了mysql innodb的内存结构&#xff0c;这次小编准备用两篇文章来和大家分享下mysql innodb的索引: mysql的基础知识 和 基于索引的sql优化 。 2. 什么是索引&#xff1f; 定义&#xff1a;索引是数据库中用于快速查找数据的机…

记录 idea 启动 tomcat 控制台输出乱码问题解决

文章目录 问题现象解决排查过程1. **检查 idea 编码设置**2. **检查 tomcat 配置**3.检查 idea 配置文件4.在 Help 菜单栏中&#xff0c;修改Custom VM Options完成后保存&#xff0c;并重启 idea 问题现象 运行 tomcat 后&#xff0c;控制台输出乱码 解决排查过程 1. 检查 id…

MySQL有哪些高可用方案?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助&#xff1b; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…

基于STM32的火灾烟雾报警器设计开题报告

开题报告 题目&#xff1a;基于STM32的火灾烟雾报警器Proteus仿真设计 一、研究背景与意义 随着现代城市化进程的加快&#xff0c;火灾安全问题日益凸显&#xff0c;火灾的早期预警对于减少人员伤亡和财产损失至关重要。传统的火灾报警系统往往依赖于烟雾或温度的单一检测&a…

《机器学习》3.7-4.3end if 启发式 uci数据集klda方法——非线性可分的分类器

目录 uci数据集 klda方法——非线性可分的分类器 计算 步骤 1: 选择核函数 步骤 2: 计算核矩阵 步骤 4: 解广义特征值问题 と支持向量机&#xff08;svm&#xff09; 目标&#xff1a; 方法&#xff1a; 核技巧的应用&#xff1a; 区别&#xff1a; 使用 OvR MvM 将…