llama.cpp 安装与使用指南

llama.cpp 安装与使用指南

最新在使用llama.cpp的开源框架,所以简单写一下安装过程以及相关的介绍。

llama.cpp 是一个高性能的开源推理框架,用于在 CPU 和 GPU 上运行 LLaMA
系列及其他兼容的 Transformer 模型。
它的特点是轻量、跨平台、可在无显卡的设备上运行,同时对显卡显存利用率很高。


1. 项目介绍

llama.cpp 主要功能: - 支持多种量化格式(Q4, Q5, Q8, Q2
等),显著减少显存占用。 - 支持
CPU、GPU(CUDA、Metal、OpenCL、Vulkan)等多种后端。 - 提供简单易用的 CLI
和 HTTP 服务接口。 - 支持大多数 Hugging Face 上的
LLaMA、Qwen、Mistral、Baichuan、ChatGLM 等模型(需转换为 GGUF 格式)。

项目地址:https://github.com/ggerganov/llama.cpp


2. 安装方法

2.1 使用预编译版本(推荐新手)

  1. Releases
    页面下载适配系统的二进制包(Windows/Linux/macOS)。
  2. 解压到目标目录。

测试是否可运行:

./llama-cli --help

2.2 从源代码构建(适合需要定制化)

依赖环境
  • Linux / macOS / Windows WSL
  • cmake(>= 3.20)
  • make
  • gcc / clang
  • CUDA Toolkit(如果需要 GPU 加速)
构建步骤(Linux / macOS)
# 克隆项目git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp # 创建构建目录mkdir build &&cd build # GPU 版本(CUDA) cmake ..-DLLAMA_CUBLAS=ON make -j$(nproc)# CPU 版本 cmake ..make -j$(nproc)

构建完成后会生成: - llama-cli:命令行推理工具 - llama-server:HTTP
API 服务 - quantize:模型量化工具


3. 模型准备

3.1 下载模型

可以从 Hugging Face 下载模型权重(需要科学上网),例如:

git lfs installgit clone https://huggingface.co/Qwen/Qwen2-7B 

3.2 转换为 GGUF 格式

llama.cpp 只能加载 GGUF 格式模型,需要用官方脚本转换:

python3 convert.py /path/to/model --outfile model.gguf 

3.3 量化模型(可选,减少显存)

./quantize model.gguf model-q4_0.gguf q4_0 

4. 启动 HTTP 服务

./llama-server -m ./model-q4_0.gguf --port9558 --gpu-layers 40

参数说明: - -m:模型路径 - --port:HTTP 服务端口 -
--gpu-layers:加载到 GPU 的层数(越多显存占用越高,推理更快)


5. 常见问题

Q1: CUDA 版本报错 libcublas.so not found

原因:CUDA Toolkit 未正确安装或路径未添加。 解决:

exportLD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

Q2: 显存不足

  • 尝试使用更低精度的量化(如 q4_0, q3_k_m)。
  • 减少 --gpu-layers 数值。

Q3: 端口占用

修改 --port 参数,或释放对应端口:

sudolsof-i:9558sudokill-9<pid>

6. 总结

llama.cpp
是运行大模型的轻量高效方案,不依赖重型推理框架,可以在几乎任何设备上运行。
如果你的目标是本地部署、低延迟推理,且显存有限,那么它非常适合你。

Read more

【优选算法1】双指针经典算法题

【优选算法1】双指针经典算法题

1.移动零 移动零 利用双指针,将数组划分为3个区间: 一开始,设指针dest = -1,cur = 0  ,因为非0区间还未存在。cur遍历数组会有两个情况: 1.元素为零。++cur,将该元素纳入 零 区间 2.元素非零。非零区间要多一个值,则需要扩展非零区间:++dest,然后与cur位置值交换 循环结束条件为:cur遍历完数组,没有待处理区间。 2.复写零 复写零 同样是双指针算法,但是从前往后模拟一遍,发现复写0会覆盖后面的值,所以不行。 试试从后往前,举第一个示例:从最后一个复写的数字4开始往前: cur遇到0,往前走一步,dest走两步并且修改为0。cur遇到非0,往前走一步,dest走一步,修改为cur所在值。 发现可行,答案正确。那现在需要:找到最后一个复写的数:很简单,从前往后再模拟一遍,

By Ne0inhk
数据结构 | 深度解析二叉树的基本原理

数据结构 | 深度解析二叉树的基本原理

个人主页-爱因斯晨 文章专栏-数据结构 二叉树是计算机科学中最基础也最常用的数据结构之一,它不仅是理解更复杂树结构(如 AVL 树、红黑树)的基础,也广泛应用于表达式解析、 Huffman 编码、数据库索引等领域。本文将从二叉树的基本概念出发,深入探讨其存储结构、核心操作及实际应用,并通过 C 语言代码示例帮助读者掌握这一重要数据结构。 二叉树的基本概念 二叉树是一种每个节点最多有两个子节点的树状结构,这两个子节点分别被称为左孩子(left child)和右孩子(right child)。根据节点的分布情况,二叉树可以分为以下几种特殊类型: * 满二叉树:除叶子节点外,每个节点都有两个子节点,且所有叶子节点都在同一层 * 完全二叉树:除最后一层外,其余层都是满的,且最后一层的节点都靠左排列 * 平衡二叉树:左右两个子树的高度差不超过 1 的二叉搜索树 二叉树具有一个重要性质:在非空二叉树中,第 i 层最多有 2^(i-1) 个节点;深度为

By Ne0inhk
【算法】计算程序执行时间(C/C++)

【算法】计算程序执行时间(C/C++)

引言 我们在写算法时要考虑到算法的执行效率,有的题目规定了时间限制,我们需要在这个时间之内去解决问题。如果我们需要比对算法的好坏,就需要输出这个程序运行了多长时间。 在C或C++中计算程序执行时间,可以使用多种方法,下面我介绍几种比较常见且好用的几种方法,大家可以选择适合自己的一种记住就可以了。 方法1:使用 clock() 函数(C/C++) 在C/C++中,<time.h>库提供了clock()函数。这个方法是博主比较推荐的一个,非常简便,且易懂,它用于测量程序的CPU时间。clock() 函数返回程序从启动到函数被调用时所经过的时钟周期数。这个函数主要用于测量程序的CPU时间消耗,而不是实际的墙钟时间(即从墙上的时钟测量的时间)。 函数原型 clock_t clock(void); * clock_t 类型,表示自程序启动以来的时钟周期数。  使用实例: 以下是使用clock()函数计算递归与非递归程序执行时间的示例代码: #include<iostream&

By Ne0inhk
TOON:一种为大模型设计的JSON压缩型数据结构

TOON:一种为大模型设计的JSON压缩型数据结构

目录 TOON:一种为大模型设计的JSON压缩型数据结构 一、精准定义,什么是 TOON? 1、JSON 数据格式的局限性 2、TOON 的结构与优势 3、TOON 数据结构的主要特征 4、媒体类型与文件拓展名 二、举例:JSON 与 TOON 描述同一组数据分别是什么样 三、结语         作者:watermelo37         ZEEKLOG优质创作者、华为云云享专家、阿里云专家博主、腾讯云“创作之星”特邀作者、火山KOL、支付宝合作作者,全平台博客昵称watermelo37。         一个假装是giser的coder,做不只专注于业务逻辑的前端工程师,Java、Docker、Python、LLM均有涉猎。 --------------------------------------------------------------------- 温柔地对待温柔的人,包容的三观就是最大的温柔。 ---------------------------------------------------------------------

By Ne0inhk