网易首页 > 网易号 > 正文 申请入驻

内网部署llama.cpp,运行量化大模型,so easy

0
分享至

大家好,我是 Ai 学习的老章。

跑量化模型,LLama.cpp 还是方便,用 C/C++ 实现,性能很高,还支持的 CPU+GPU 做量化模型推理,命令行参数很精细,跑 GGUF 很方便。本文就详细介绍安装、运行全过程,中间踩坑无数,希望对大家有所帮助。

什么是llama.cpp?为什么它如此重要?

llama.cpp的核心思想是让大模型运行在普通人的消费级硬件上。它通过以下关键技术实现了这一目标:

  • C/C++ 实现:没有复杂的 Python 依赖,编译后即是原生可执行文件,性能极高。

  • 模型量化 (Quantization):将模型权重从传统的 32 位或 16 位浮点数,压缩成更小的整数(如 4 位、5 位)。这使得模型文件大小和内存占用都减少数倍,而对模型性能的影响却很小。

  • GGUF 格式:一种专为llama.cpp设计的模型文件格式,将模型结构和量化后的权重打包在一起,方便分发和加载。

  • 硬件优化:充分利用现代 CPU 的向量指令集(如 AVX2)和 GPU 的并行计算能力(如 Apple Metal, NVIDIA CUDA),实现惊人的推理速度。

第一步:环境准备与基础编译

首先,我们需要安装编译llama.cpp所需的基础工具。

  • macOS: 打开**终端 (Terminal)**,运行xcode-select --install

  • Linux (Ubuntu/Debian): 运行sudo apt update && sudo apt install build-essential git cmake

  • Windows: 安装Git for Windows,CMake, 以及带有"使用 C++ 的桌面开发"工作负载的Visual Studio Community Edition

然后,克隆项目仓库:

git clone https://github.com/ggerganov/llama.cpp cd llama.cpp

在进行下一步编译之前,我们先来了解如何开启 GPU 加速。

第二步:开启 GPU 加速(核心步骤)

默认情况下,llama.cpp只使用 CPU。要发挥硬件的最大潜力,你需要在编译时明确告诉它使用哪个 GPU 后端。

编译命令详解

llama.cpp使用cmake进行编译。开启 GPU 支持的关键是在cmake命令后附加-D标志。

  • 对于 Apple Silicon (M1/M2/M3/M4) 用户 (使用 Metal):

    cmake -B build -DLLAMA_METAL=ON cmake --build build --config Release -j

    这会开启 Apple 的 Metal 图形和计算框架,性能极佳。

  • 对于 NVIDIA GPU 用户 (使用 CUDA):你需要先安装 NVIDIA CUDA Toolkit。安装后,执行:

    cmake -B build -DLLAMA_CUDA=ON cmake --build build --config Release -j
  • 对于 AMD/Intel GPU 用户 (使用 OpenCL 或 Vulkan):这是一个更通用的选项,但性能可能不如官方支持的 CUDA 和 Metal。

    # 使用 OpenCL cmake -B build -DLLAMA_CLBLAST=ON cmake --build build --config Release -j

编译成功后,生成的llama-cliserver等工具就具备了 GPU 加速的能力。

如果运气好,上面即可编译成功,但是我运气不好

我在 RHEL 系统实操时,各种报错

走了 N 多弯路,尝试 N 多方法,最终在 10978 号 issue 中找到了答案

内网升级 gcc 有点麻烦,我用了编辑 CMakeLists.tx 的方法

我比较喜欢 unsloth 的玩法

在自己的大模型文件夹里:cp llama.cpp/build/bin/llama-* llama.cpp

这样可以非常方便滴使用 ./llama.cpp/llama-cli 直接拉起本地大模型

llama.cpp通过一个核心参数来控制模型有多少层被“卸载”到 GPU 上运行:

  • -ngl <层数>--n-gpu-layers <层数>

这个参数告诉llama.cpp将模型的最后 N 层放到 GPU VRAM 中进行计算。因为模型的大部分计算量都集中在这些层,所以卸载的层数越多,速度越快。

  • 纯 CPU 模式: 不加-ngl参数,或者设置为-ngl 0。所有计算都在 CPU 上完成,内存占用在系统 RAM 中。

  • 完全 GPU 加速模式: 设置一个非常大的数,如-ngl 999llama.cpp会尝试将所有能卸载的层都放入 GPU。这是最快的模式,前提是你的GPU VRAM 足够大,能装下所有被卸载的层。

  • 混合模式 (CPU + GPU): 当你的 VRAM 不足以容纳整个模型时,这是最佳选择。你可以设置一个具体的层数,如-ngl 20。这样,模型的 20 层会在 GPU 上飞速计算,而其余层和计算任务则由 CPU 和系统 RAM 承担。这是一种用有限 VRAM 撬动最大性能的有效方式。

第三步:获取 GGUF 模型

获取模型主要有两种方式:手动下载或直接从 Hugging Face 加载。

方式一:手动下载 (推荐,更稳定)

你需要从Hugging Face下载 GGUF 格式的模型。搜索时加上 "GGUF" (例如 "Qwen2-7B-Instruct-GGUF"),然后在 "Files and versions" 中选择一个合适的量化版本(Q4_K_M是平衡性最好的选择)。

将下载好的.gguf文件放入llama.cpp/models文件夹。

方式二:从 Hugging Face 直接加载 (方便快捷)

llama.cpp支持直接从 Hugging Face Hub 下载并运行模型,无需手动下载。这需要你在命令中使用-hf--hf-repo参数。

方式三:modelscope

也算是一种手动下载,毕竟 HF 国内网络不通,魔塔是个绝好的替代,下载速度很快

pip install modelscope 之后,即可使用 modelscope download 下载模型

下载完整模型库

modelscope download --model unsloth/gpt-oss-120b

下载单个文件到指定本地文件夹(以下载 README.md 到当前路径下“dir”目录为例)

modelscope download --model unsloth/gpt-oss-120b README.md --local_dir ./dir

现在,我们将结合 GPU 加速参数来运行模型,并深入了解其他重要的命令行选项。

1. 基础运行示例(GPU 加速)

假设你有一块 NVIDIA 显卡,VRAM 足够,想完全使用 GPU 加速:

./build/bin/llama-cli -m ./models/Qwen2-7B-Instruct.Q4_K_M.gguf -ngl 999 --color -c 4096 -n 1024 -p "你好,请详细介绍一下光合作用的过程。"

如果你的 VRAM 有限,可以尝试混合模式:

./build/bin/llama-cli -m ./models/Qwen2-7B-Instruct.Q4_K_M.gguf -ngl 22 --color -c 4096 -n 1024 -p "你好,请详细介绍一下光合作用的过程。"

(Qwen-7B 大约有 32 层,-ngl 22会卸载大部分层到 GPU)

也可以多卡启动

直接从 Hugging Face 运行

# llama-cli 会自动下载并运行 ggml-org/gemma-2-9b-it-GGUF 模型 ./build/bin/llama-cli -hf ggml-org/gemma-2-9b-it-GGUF -p "你好,介绍一下自己。" -n 128
  • 创建带“人设”的交互式对话通过组合使用-r(reverse prompt) 和--in-prefix,可以创建一个更自然的对话机器人。

    # -i 进入交互模式 # -r "User:" 当模型生成 "User:" 时,会停止并等待你的输入 # --in-prefix " " 在你的输入前加上一个空格,防止粘连 ./build/bin/llama-cli -m ./models/your-model.gguf -i -r "User:" --in-prefix " " -p "A chat between a user and an assistant.\nUser: Hello!\nAssistant:"
  • 计算模型困惑度 (Perplexity)困惑度是衡量语言模型好坏的指标,越低越好。你可以用llama-cli来测试模型在某个文本文件上的困惑度。

    # -f 指定要测试的文件,-c 指定上下文长度 ./build/bin/llama-cli -m ./models/your-model.gguf -f ./path/to/your/test-file.txt -c 2048 --perplexity
  • 3. Web UI 与 OpenAI 兼容 API (server

    llama.cpp的服务器功能非常强大,不仅提供了一个图形聊天界面,还暴露了与 OpenAI API 完全兼容的接口。

    1. 启动服务器:

      # -m 指定模型,-ngl 指定 GPU 层数,--host 0.0.0.0 允许局域网访问 ./build/bin/server -m ./models/your-model.gguf -ngl 35 -c 4096 --host 0.0.0.0 --port 3003
    2. 使用 Web UI:在浏览器中打开http://127.0.0.1:8080,即可开始聊天。

    1. 使用 OpenAI API:服务器启动后,它会在http://127.0.0.1:8080/v1/chat/completions提供一个 OpenAI 兼容的端点。这意味着,你可以将任何支持 OpenAI API 的客户端、脚本或应用(例如curl, Pythonopenai库等)直接对接到你本地运行的模型上,只需将 API 的base_url指向你的本地服务器地址即可。

    4.llama-cli核心参数深度解析

    分类

    参数

    解释

    模型加载-m, --model (必需)

    指定本地 GGUF 模型文件路径。

    -hf, --hf-repo

    从 Hugging Face Hub 加载模型,例如ggml-org/gemma-2-9b-it-GGUF

    硬件与性能-ngl, --n-gpu-layers (最重要)

    将模型的 N 层卸载到 GPU。

    -t, --threads

    使用的 CPU 线程数。

    -b, --batch-size

    提示词处理的批处理大小,可以影响速度。

    --mlock

    将模型锁定在内存中,防止被交换到硬盘,对性能有益。

    上下文管理-c, --ctx-size

    上下文窗口大小(单位:token)。模型能“记住”的对话长度。

    --prompt-cache

    将处理过的提示词缓存到文件,下次加载相同提示词时会更快。

    生成控制-n, --n-predict

    模型一次最多生成的 token 数量。设为-1表示无限生成。

    --temp 温度

    。控制随机性。值越低(如 0.2)回答越确定;越高(如 1.2)越有创意。

    --top-k Top-K 采样

    。在每一步,模型只从概率最高的 K 个词中选择。

    --top-p Top-P (Nucleus) 采样

    。从累积概率超过 P 的最小词集中选择。通常比 Top-K 效果更好。

    --repeat-penalty 重复惩罚

    。大于 1 的值会惩罚重复出现的词,有效减少复读。常用1.1

    交互与提示词-p, --prompt

    初始提示词。

    -f, --file

    从文件加载初始提示词。

    -i, --interactive

    进入交互模式,可以持续对话。

    -r, --reverse-prompt

    在交互模式下,指定用户的输入提示符,例如-r "User:"

    --color

    让输出带上颜色,区分用户和模型的输入。


    第五步:Python 集成(带 GPU 加速)

    在 Python 中使用llama-cpp-python时,同样可以开启 GPU 加速。

    1. 安装库:pip install llama-cpp-python

    2. Python 代码示例:

      from llama_cpp import Llama # 加载模型 llm = Llama(     model_path="./models/你的模型文件名.gguf",     n_ctx=4096,       # 上下文长度     n_threads=8,      # CPU 线程数     n_gpu_layers=-1   # -1 表示尝试将所有层都卸载到 GPU                       # 设为 0 表示纯 CPU                       # 设为正整数 N 表示卸载 N 层 ) # 创建对话 response = llm.create_chat_completion(     messages = [         {"role": "system", "content": "You are a helpful assistant."},         {             "role": "user",             "content": "你好,请介绍一下北京这座城市。"         }     ] ) print(response['choices'][0]['message']['content'])
    第六步:常见问题排查 (Troubleshooting) 问题:编译时提示“BLAS not found”

    这是一个在编译llama.cpp时非常常见的情况。当您在运行cmake时看到BLAS not found的提示,这不是一个致命错误,而是一个可选的性能提示

    1. 它是什么意思?

    • 核心计算是矩阵乘法:大语言模型推理过程最耗时的计算就是大量的矩阵与向量相乘。

    • BLAS 作为“外挂加速引擎”llama.cpp允许调用系统上已安装的高性能 BLAS 库(如 OpenBLAS)来执行这些矩阵运算,以获得更好的 CPU 性能,尤其是在处理长提示词(Prompt Ingestion)的阶段。

    • BLAS not found的含义cmake在你的系统中搜索可用的 BLAS 库但没有找到。因此,它会回退使用llama.cpp自带的标准数学运算代码。你的程序依然可以编译和运行,只是可能没有达到最理想的 CPU 性能。

    2. 如何解决并开启 BLAS 加速?

    解决方案非常简单,就是为系统安装一个高性能的 BLAS 库。

    1. 安装 OpenBLAS 开发库(以 Debian/Ubuntu 为例):

      sudo apt update sudo apt install libopenblas-dev
    2. 清理并重新配置编译环境: 回到llama.cpp的根目录,清理掉旧的配置,然后重新运行cmake,并明确地告诉它使用 BLAS。

      # 清理旧的 build 目录 rm -rf build # 重新配置,并开启 BLAS 支持 cmake -B build -DLLAMA_BLAS=ON # 如果你同时需要 GPU 加速,可以将标志合并 # 例如,对于 NVIDIA GPU: # cmake -B build -DLLAMA_CUDA=ON -DLLAMA_BLAS=ON
    3. 重新编译:

      cmake --build build --config Release -j

    完成这些步骤后,你编译出的llama.cpp版本就会链接到 OpenBLAS,从而在处理提示词时获得更强的 CPU 性能。

    最后

    源码编译其实蛮看运气的,比如我生产环境的一台 RHEL 系统的服务器,yum 源很不给力,仅仅是升级 GCC 都费老大劲,各种依赖安装到吐血。

    最后还是选择了 Docker 运行 llama.cpp,确实省事。

    后面我再写文章介绍全过程,也是踩坑无数。

    特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

    Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

    相关推荐
    热点推荐
    白岩松正面发声,一句话击碎全红婵最大谣言

    白岩松正面发声,一句话击碎全红婵最大谣言

    乡野小珥
    2026-04-06 09:28:36
    今年最传奇的游戏开发者,是这个从不用引擎的狠人。

    今年最传奇的游戏开发者,是这个从不用引擎的狠人。

    差评XPIN
    2026-04-06 00:08:45
    米切尔38+6+6!骑士逆转横扫步行者 哈登28+7一壮举联盟第一

    米切尔38+6+6!骑士逆转横扫步行者 哈登28+7一壮举联盟第一

    醉卧浮生
    2026-04-06 08:22:50
    加盟广东队成首选!麦考伊被曝将空降CBA,或被朱芳雨捡漏签下?

    加盟广东队成首选!麦考伊被曝将空降CBA,或被朱芳雨捡漏签下?

    绯雨儿
    2026-04-06 11:05:05
    4月6日最后通牒到期,特朗普突然认怂,美伊战争的死结解不开了

    4月6日最后通牒到期,特朗普突然认怂,美伊战争的死结解不开了

    荷兰豆爱健康
    2026-04-06 13:09:11
    哇塞,这才叫真正的倾国倾城的美,脸型大气,标准的东方美

    哇塞,这才叫真正的倾国倾城的美,脸型大气,标准的东方美

    TVB的四小花
    2026-04-06 14:30:25
    国米5-2打爆罗马!“新本泽马”独造3球,皇马快买他搭档姆巴佩

    国米5-2打爆罗马!“新本泽马”独造3球,皇马快买他搭档姆巴佩

    仰卧撑FTUer
    2026-04-06 08:12:13
    里子面子都丢了,森林北自曝身体出了问题,汪峰的体面被撕碎

    里子面子都丢了,森林北自曝身体出了问题,汪峰的体面被撕碎

    素衣读史
    2025-11-19 16:09:14
    大批印度人开始入侵日本!素质极低遭人嫌弃,当地百姓要遭殃了

    大批印度人开始入侵日本!素质极低遭人嫌弃,当地百姓要遭殃了

    小嵩
    2026-04-06 14:28:17
    为男闺蜜关机四次后,老公发来与别人拥吻照:以后没人打扰我们了

    为男闺蜜关机四次后,老公发来与别人拥吻照:以后没人打扰我们了

    晓艾故事汇
    2026-04-04 09:13:14
    安徽6岁女童已丢4天,亲属发声曝猛料,难怪搜救犬闻不到气味

    安徽6岁女童已丢4天,亲属发声曝猛料,难怪搜救犬闻不到气味

    奇思妙想草叶君
    2026-04-04 23:58:32
    几十个家庭垄断一座城:县城婆罗门的闭环游戏,正在逼走年轻人

    几十个家庭垄断一座城:县城婆罗门的闭环游戏,正在逼走年轻人

    黑噪音
    2026-03-21 19:33:08
    《镖人》夺得全球冠军,吴京打败周润发,成中国武侠第一人

    《镖人》夺得全球冠军,吴京打败周润发,成中国武侠第一人

    影视高原说
    2026-04-05 08:52:11
    1950 年川农妇报案,劈柴丈夫竟是失踪国军中将王凌云

    1950 年川农妇报案,劈柴丈夫竟是失踪国军中将王凌云

    唠叨说历史
    2026-01-21 16:28:08
    油车换电车1年真实感受:普通人别跟风!买车前没人告诉你的真相

    油车换电车1年真实感受:普通人别跟风!买车前没人告诉你的真相

    华庭讲美食
    2026-03-28 17:08:13
    古代小妾除了满足丈夫的生理需求和生孩子以外,还有另一个变态的作用,

    古代小妾除了满足丈夫的生理需求和生孩子以外,还有另一个变态的作用,

    网络易不易
    2026-03-31 11:07:46
    50岁李小冉被赞像30岁!自曝洗脸用26块钱的香皂,还熬夜打游戏

    50岁李小冉被赞像30岁!自曝洗脸用26块钱的香皂,还熬夜打游戏

    韩小娱
    2026-04-06 06:16:00
    直接返回欧洲!东契奇真的拼了,还不想放弃本赛季

    直接返回欧洲!东契奇真的拼了,还不想放弃本赛季

    德译洋洋
    2026-04-06 12:15:51
    民进党,极有可能在下一届台湾地区选举后,成为长期一家独大政党

    民进党,极有可能在下一届台湾地区选举后,成为长期一家独大政党

    共工之锚
    2026-03-31 00:27:37
    起内讧了?伊朗总统反对再这样打下去,要求革命卫队交出战时大权

    起内讧了?伊朗总统反对再这样打下去,要求革命卫队交出战时大权

    知法而形
    2026-04-01 18:49:55
    2026-04-06 15:12:49
    Ai学习的老章 incentive-icons
    Ai学习的老章
    Ai学习的老章
    3306文章数 11129关注度
    往期回顾 全部

    科技要闻

    前同事被蒸馏成Token,AI能否偷走职场经验

    头条要闻

    特朗普希望7日前与伊朗达成协议 专家:实现可能性较低

    头条要闻

    特朗普希望7日前与伊朗达成协议 专家:实现可能性较低

    体育要闻

    球员系列赛大满贯!赵心童10-3世界第一 加冕赛季第4冠

    娱乐要闻

    乔任梁离世10年 父母曝舞台光鲜的背后

    财经要闻

    118吨!这家央行,大幅抛售黄金!

    汽车要闻

    家用SUV没驾驶乐趣?极氪8X第一个不同意

    态度原创

    教育
    数码
    房产
    公开课
    军事航空

    教育要闻

    于东来:父母自己活得幸福就是给孩子最好的财富

    数码要闻

    Mac跑AI模型更方便了,消息称苹果已为英伟达、AMD外置显卡开绿灯

    房产要闻

    小阳春全面启动!现房,才是这波行情里最稳的上车票

    公开课

    李玫瑾:为什么性格比能力更重要?

    军事要闻

    伊朗:在C-130运输机残骸中发现一具美军士兵遗体

    无障碍浏览 进入关怀版