项目地址:https://github.com/Lizonghang/prima.cpp
论文地址:https://arxiv.org/abs/2504.08791
随着大语言模型(LLM)技术的迅猛发展,众多企业纷纷推出功能强大且高效的云端推理服务。这些云服务为用户提供了便捷、低成本的解决方案,涵盖广泛的语料库和强大的计算能力。然而,云端部署需要持续的互联网连接,这可能引发隐私泄露、数据安全和网络依赖等问题。
为满足对数据安全性和离线可用性有更高要求的企业和个人用户,LLM的本地部署方案应运而生。本地部署不仅增强了数据控制权,还提升了响应速度和系统的可定制性。然而,传统的大模型对硬件资源的高要求使得本地部署面临挑战,尤其是在资源受限的设备上。为解决这一难题,研究人员和开发者致力于开发轻量化的部署方案,使得在低成本设备上运行LLM成为可能。 「llama.cpp」是一个使用C/C++编写的高性能开源可商用推理框架,支持在无GPU的设备上高效运行LLaMA系列模型。通过引入GGUF文件格式和多种量化技术,显著降低了内存占用和计算需求。目前在开源平台github斩获了78.3k 的高收藏量。
最近,一个新兴的推理框架 「prima.cpp」 开源了,该项目由 「穆罕默德·本·扎耶德人工智能大学」 和 「电子科技大学」 的研究人员联合开发。旨在在资源有限的普通设备上高效运行更大的模型,根据实验显示,该项目成功部署了70B 规模的大语言模型 「DeepSeek R1」。在一些模型上与 llama.cpp 方案相比,速度最大提升了15倍,在内存管理上也有了明显进步。

prima.cpp 项目亮点与创新
根据 2025 年 4 月发布的论文《PRIMA.CPP: Speeding Up 70B-Scale LLM Inference on Low-Resource Everyday Home Clusters》,「prima.cpp」 引入了多项创新技术:
- 「节省内存、降低成本」: 它采用了一种叫
mmap
的技术,让大模型“随用随取”,像看电影时的缓冲一样,减少内存压力。再配合智能的“分工机制”,让你在家用电脑上也能跑超大模型。 - 「CPU 和 GPU 携手上阵」:不再只靠显卡“单打独斗”——它会根据每台设备的能力,智能地安排 CPU 和 GPU 一起工作,就像一个高效的团队各司其职,提升整体速度。
- 「高速“流水线”机制」:引入了类似“工厂流水线”的 piped-ring 架构,能提前加载模型需要的数据,避免卡顿,使用起来更流畅。
- 「智能负载调度」:系统会自动评估每台机器的“能力值”(处理能力和内存),然后合理分配任务。哪台设备强,就干重活;哪台轻,就安排辅助任务。
- 「兼容主流模型,格式通吃」:不管你喜欢 Meta 的 LLaMA,还是国产的 DeepSeek、Qwen 系列,都能轻松上阵,同时支持多种压缩格式。
- 「多系统支持,更广泛部署」:无论你是用 Mac 还是 Linux,都可以尝试部署 prima.cpp。官方正在加急赶制 Windows 部署方案。
「目前支持众多热门模型:」
DeepSeek
DeepSeek R1 是由 DeepSeek AI 团队推出的超大语言模型,覆盖从 7B 到 70B 多种规模,并通过蒸馏等技术压缩模型体积,提升运行效率。它融合了 Qwen 和 LLaMA 架构的优点,既有强大的理解能力,也对硬件要求更友好,特别适合用在像 prima.cpp
这样的高性能本地部署框架中,兼顾性能和资源利用率。
- 「DeepSeek R1-7B (Q4K, Q6K, Q80):」 deepseek-ai.DeepSeek-R1-Distill-Qwen-7B
- 「DeepSeek R1-8B (Q4K, Q6K, Q80):」 deepseek-ai.DeepSeek-R1-Distill-Llama-8B
- 「DeepSeek R1-14B (Q4K, Q6K, Q80):」 deepseek-ai.DeepSeek-R1-Distill-Qwen-14B
- 「DeepSeek R1-32B (Q4K, Q6K, Q80):」 deepseek-ai.DeepSeek-R1-Distill-Qwen-32B
- 「DeepSeek R1-70B (Q4K, Q6K, Q80):」 DeepSeek-R1-Distill-Llama-70B
Llama:
由 Meta(Facebook 母公司)推出的大型语言模型系列,它以开源、高性能著称,广泛应用于自然语言理解、对话生成、编程辅助等场景。它支持从小到超大的模型版本,比如 7B、30B 到 70B,不同算力环境都能使用。LLaMA 模型在全球社区中非常受欢迎,几乎是本地部署 AI 的“默认选择”。
- 「Llama 3-8B (Q4K, Q6K, Q80):」 Meta-Llama-3-8B-Instruct
- 「Llama 3-14B (Q4K, Q6K, Q80):」 Llama-3-14B-Instruct-v1
- 「Llama 1-30B (Q4K, Q6K, Q80):」 upstage-llama-30b-instruct-2048
- 「Llama 3-45B (Q4K, Q6K, Q80):」 Llama-3-pruned-45B-Drobeta-Turnu-Severin
- 「Llama 3-60B (Q4K, Q6K, Q80):」 nyun-llama3-60B
- 「Llama 1-65B (Q4K, Q6K, Q80):」 llama-65b
- 「Llama 3-70B (Q4K, Q6K, Q80):」 Meta-Llama-3-70B-Instruct
Qwen 2.5 / QwQ
Qwen 2.5 是阿里通义实验室研发的新一代中文大模型,专为中文理解优化,兼顾多语言能力。相比之下,QwQ 是它的轻量版兄弟,采用压缩和量化技术,使得在普通设备上也能高效运行。这两个模型在中文问答、客服、教育等领域表现出色。
- 「Qwen 2.5-7B (Q4K, Q6K, Q80):」 Qwen2.5-7B-Instruct
- 「Qwen 2.5-14B (Q4K, Q6K, Q80):」 Qwen2.5-14B-Instruct
- 「Qwen 2.5-32B (Q4K, Q6K, Q80):」 Qwen2.5-32B-Instruct
- 「Qwen 2.5-72B (Q4K, Q6K, Q80):」 Qwen2.5-72B-Instruct
- 「QwQ-32B (Q4K, Q6K, Q80):」 qwq-32b
prima.cpp 应用场景:
-
用户可以在普通设备上部署先进的 30B 至 70B 大模型,实现本地化的智能助手功能,如自然语言对话、日程管理、家庭自动化控制等。
-
开发者可以在本地环境中运行大型模型,进行模型测试、调试和微调,减少对云服务的依赖,降低开发成本,同时保护敏感数据的隐私。
-
教育机构和研究人员可以利用 prima.cpp 在普通计算设备上进行大模型的教学和研究,促进人工智能教育的普及和科研的深入发展。
-
中小企业可以在内部部署大型语言模型,应用于客户服务、文档生成、数据分析等场景,提高工作效率,保护企业数据的安全性。
prima.cpp 性能表现
官方测试设备:
D1D2D3D4设备Mac M1LaptopDesktopMate40Pro操作系统MacOS(UMA)LinuxLinuxLinux(基于 HarmonyOS)中央处理器苹果 M1英特尔 i9英特尔 i9麒麟9000CPU 核心88168RAM(可用)2.4 GiB4.1 GiB9.7 GiB1.9 GiB磁盘读取速度0.72 GB/秒2.98 GB/秒3.17 GB/秒1.37 GB/秒GPU 类型苹果金属30702080TI-VRAM(可用)-8 GiB11 GiB-
在 「llama.cpp」与「prima.cpp」 上部署的模型推理速度比较,可以看到prima.cpp在超大模型处理上领先,随着模型参数的增大,推理时间变化更为平稳。
「模型」「llama.cpp / 1Token」「prima.cpp / 1Token」Llama 3-8B「15 ms」54 msLlama 3-14B「20 ms」65 msLlama 1-30B202 ms「72 ms」Llama 3-45B328 ms「233 ms」Llama 3-60B7965 ms「468 ms」Llama 1-65B8807 ms「569 ms」Llama 3-70B10120 ms「674 ms」Qwen-2.5-7B「14 ms」44 msDeepSeek-R1-Distill-Qwen-7B「14 ms」52 msDeepSeek-R1-Distill-Llama-8B「14 ms」59 msQwen-2.5-14B「23 ms」65 msDeepSeek-R1-Distill-Qwen-14B「24 ms」76 msQwen-2.5-32B and QwQ-32B224 ms「89 ms」DeepSeek-R1-Distill-Qwen-32B232 ms「93 ms」DeepSeek-R1-Distill-Llama-70B10978 ms「724 ms」Qwen-2.5-72B12227 ms「867 ms」「部署教程:」
由于项目刚刚兴起,目前只支持「Linux」和「macOS」操作系统进行部署(安卓手机需要模拟linux),有开发C项目经验的可以快速上手,大部分内容需要「科学上网」。注意:请用固态硬盘进行操作,机械硬盘太慢。目前 prima.cpp 仅支持基于 CUDA 的 GPU。
运行环境依赖准备:
- gcc >= 9.4.0 (常用的 C/C++ 编译工具,让程序代码变成能运行的应用) 下载地址:https://ftp.gnu.org/gnu/gcc/gcc-9.5.0/
- make> = 4.2.1(自动化构建工具,相当于“建房子的施工队长”,负责编译项目) 下载地址:https://ftp.gnu.org/gnu/make/
- cmake >= 3.16.3 (帮助项目“配置施工图”的工具,配合 make 一起使用)下载地址: https://cmake.org/files/v3.18/
- fio >= 3.16( 用来测试硬盘读写速度) 下载地址:https://sourceforge.net/projects/fio/files/fio-3.16-amd64-jessie/download
- zmq >= 4.3.2(一种设备间通信工具,帮助多台设备高效协作)下载地址: https://zeromq.org/languages/cplusplus/
- HiGHS >= 1.9.0(智能任务调度工具,让系统知道每台机器擅长干啥,任务分配更合理)下载地址:https://github.com/ERGO-Code/HiGHS/releases
- CUDA(可选,如果你有 NVIDIA 显卡)
在Linux(「Ubuntu」) 上可以执行安装依赖,HiGHS需要自己下:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
sudo apt update -y && sudo apt install -y gcc-9 make cmake fio git wget libzmq3-dev
------单独下载HiGHS---------------
git clone https://github.com/ERGO-Code/HiGHS.git
cd HiGHS
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
在「macOS」 上可以直接下载:
ounter(line
brew install gcc make cmake fio git wget highs zeromq
下载prima.cpp并初始化构建:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
git clone https://github.com/Lizonghang/prima.cpp.git
cd prima.cpp
# 进入目录 "prima.cpp",这个目录可能包含项目源码
make -j$(nproc)
# 默认构建,使用所有 CPU 核心
------------------------个性化需求构建----------------------------------------
# 如果你在 rank 0 的设备上构建,需要添加 USE_HIGHS=1:
make USE_HIGHS=1 -j$(nproc)
# USE_HIGHS=1 表示启用 HIGHS 求解器(用于数学优化)
# -j$(nproc) 表示使用所有可用的 CPU 核心并行构建,提高构建速度
# 如果你安装了 CUDA,可使用 GPU 加速,添加 GGML_CUDA=1:
make GGML_CUDA=1 -j$(nproc)
# GGML_CUDA=1 启用 CUDA 后端,加速部分操作
# macOS 用户如果模型很大,可能禁用 Metal 会更稳定:
make LLAMA_NO_METAL=1 -j$(nproc)
# LLAMA_NO_METAL=1 禁用 macOS 的 Metal 图形加速,可能有助于大模型运行
# 如果要启用调试模式,可以加上 LLAMA_DEBUG=1:
make LLAMA_DEBUG=1 -j$(nproc)
# LLAMA_DEBUG=1 会开启调试输出,有助于开发和排错
下载一个兼容的模型:比如官方推荐的https://huggingface.co/Qwen/QwQ-32B-GGUF模型进行测试
ounter(lineounter(line
mkdir download
wget https://huggingface.co/Qwen/QwQ-32B-GGUF/resolve/main/qwq-32b-q4_k_m.gguf -P download/
「一台电脑部署:」
这里是单机测试,用的「不是prima.cpp」 ,而是 「llama.cpp」
ounter(lineounter(line
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 -p "what is edge AI?" -n 256 -ngl 30
# -ngl 30 只对GPU有用
「llama-cli 常用参数速查表」参数名示例值说明
-m
download/qwq-32b-q4_k_m.gguf
指定模型路径(.gguf
格式)-c
1024
上下文窗口大小(token 数),影响模型的“记忆范围”-p
"what is edge AI?"
提示词(Prompt),模型将基于此生成内容-n
256
要生成的最大 token 数量-ngl
30
分配到 GPU 的层数(越多越快,但显存要够)--temp
0.8
温度参数,控制生成的多样性(越低越稳定)--top-k
40
从概率前 K 个词中随机抽取--top-p
0.95
从累计概率大于 P 的词中采样--repeat_penalty
1.1
惩罚重复词,避免输出重复--seed
42
随机种子,保证结果可复现--threads
8
使用的 CPU 线程数--color
(无参数)启用彩色输出,提升可读性--interactive
(无参数)启用交互模式,支持多轮对话--keep
0
保留多少 token 不被截断(对上下文管理有用)「分布式多设备部署(prima.cpp项目特色)」
官方测试设备:
设备名序号大致型号/说明分配地址「Mac M1」D0MacBook Air/Pro M1(2020-2021 款)192.168.1.2**Laptop **D1普通 Windows 笔电(中端配置)192.168.1.3**Desktop **D2中端台式机(含独显)192.168.1.4「Mate40 Pro」D3华为旗舰手机(2020 年发布)192.168.1.5为了满足通信要求,需要一个 WIFI 局域网, 测试时可以考虑关闭防火墙,开放9000、10000等端口,避免设备之间通信失败。手机需要软件 Termux 模拟Linux系统,下载地址:https://github.com/termux/termux-app/releases
四台设备都需要部署与单机一样的环境,参考 「单机部署」。
在每台设备上执行启动命令:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
# D0:
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 -n 256 -p "what is edge AI?" --world 4 --rank 0 --master 192.168.1.2 --next 192.168.1.3 --prefetch
# D1:
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 1 --master 192.168.1.2 --next 192.168.1.4 --prefetch --gpu-mem 8
# D2:
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 2 --master 192.168.1.2 --next 192.168.1.5 --prefetch --gpu-mem 11
# D3:
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 3 --master 192.168.1.2 --next 192.168.1.2 --prefetch
主设备为D0,一旦启动,prima.cpp 将分析每个设备并决定分配多少工作负载,例如,每个设备应该处理多少个模型 layer,以及其中有多少个应该在 GPU 上运行。
数据的通信是有顺序的环形结构,例如「D0->D1->D2->D3->D0」 ,下图为论文使用的6台设备网络拓扑。

如果需要手动控制 layer 分布,可以使用-lw
(或--layer-window
、--n-layer-window
)和-ngl
选项:
-lw
设置每个设备应处理的模型 layer 总数。格式为逗号分隔的列表,每个设备一个值,按顺序排列。可以设置"8,8,8,8"
、"4,4,4,4"
、"16,16,24,8"
。-ngl
设置有多少个模型 layer 应该在 GPU 上运行。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
# on head device without a GPU, rank 0, use the option "-lw":
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 -n 256 -p "what is edge AI?" --world 4 --rank 0 --master 192.168.1.2 --next 192.168.1.3 --prefetch -lw "16,16,16,16"
# on worker device with 8 GiB VRAM, rank 1, use the option "-ngl":
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 1 --master 192.168.1.2 --next 192.168.1.4 --prefetch -ngl 16
# on worker device with 11 GiB VRAM, rank 2, use the option "-ngl":
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 2 --master 192.168.1.2 --next 192.168.1.5 --prefetch -ngl 16
# on worker device without a GPU, rank 3:
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 3 --master 192.168.1.2 --next 192.168.1.2 --prefetch
「在虚拟机上部署」(Docker)
官方测试设备:一台至少配备 32 个 CPU 核心、32 GiB RAM 和 32 GiB VRAM 的主机。
使用 Docker 容器模拟 4 个同构节点,每个节点分配 8 个 CPU 核心、8 GiB RAM 和 8 GiB VRAM。拉取4个镜像:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
sudo docker run -dit --name prima-v1 --memory=8gb --memory-swap=8gb --cpus 8 --cpuset-cpus="0-7" --network host --gpus all prima.cpp:1.0.1-cuda
sudo docker run -dit --name prima-v2 --memory=8gb --memory-swap=8gb --cpus 8 --cpuset-cpus="8-15" --network host --gpus all prima.cpp:1.0.1-cuda
sudo docker run -dit --name prima-v3 --memory=8gb --memory-swap=8gb --cpus 8 --cpuset-cpus="16-23" --network host --gpus all prima.cpp:1.0.1-cuda
sudo docker run -dit --name prima-v4 --memory=8gb --memory-swap=8gb --cpus 8 --cpuset-cpus="24-31" --network host --gpus all prima.cpp:1.0.1-cuda
# 没有GPU , 去除 --gpus all
分别复制模型到4个容器:
ounter(lineounter(lineounter(lineounter(lineounter(line
cd prima.cpp/download
sudo docker cp qwq-32b-q4_k_m.gguf prima-v1:/root/prima.cpp/download/
sudo docker cp qwq-32b-q4_k_m.gguf prima-v2:/root/prima.cpp/download/
sudo docker cp qwq-32b-q4_k_m.gguf prima-v3:/root/prima.cpp/download/
sudo docker cp qwq-32b-q4_k_m.gguf prima-v4:/root/prima.cpp/download/
没有GPU需要在4个容器中「重新构建 prima.cpp」
ounter(lineounter(lineounter(line
cd ./prima.cpp && make clean
make -j$(nproc) # If not rank 0
make USE_HIGHS=1 -j$(nproc) # If rank 0
启动推理
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
cd ./prima.cpp
(prima-v1) ./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 -n 256 -p "what is edge AI?" --world 4 --rank 0 --prefetch --gpu-mem 8
(prima-v2) ./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 1 --prefetch --gpu-mem 8
(prima-v3) ./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 2 --prefetch --gpu-mem 8
(prima-v4) ./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 --world 4 --rank 3 --prefetch --gpu-mem 8
#没有GPU 去除--gpu-mem 8
启动聊天(对话)模式,只需在头部设备上添加标志 -cnv,要退出聊天模式,输入quit
或exit
。
ounter(line
./llama-cli -m download/qwq-32b-q4_k_m.gguf -c 1024 -n 256 -p "what is edge AI?" --world 4 --rank 0 --master 192.168.1.2 --next 192.168.1.3 --prefetch -lw "16,16,16,16" -cnv
prima.cpp 建议操作系统预取即将到来的层权重,实际的预取操作由操作系统调度和处理,这可能会带来一些不确定性。要在计算后立即显式触发预取,强制预取需要可以添加 --force参数。这会实现更积极的重叠,但也会引入额外的内存访问延迟。--force
请仅在测试后使用,因为其效果取决于硬件和操作系统行为。
目前的缺陷:
兼容设备较少,配置过于重复,环形通信具有先后顺序,设备故障尚未提及解决方案,模型权重文件需要保存在每个设备上。
转载请注明出处: CHATWEB
本文的链接地址: https://www.chatweb.com.cn/post-162.html
-
深藏不露!Kimi这8个隐藏用法,高手都偷偷收藏了,再不学习就晚了!(上)
6天前
-
扣子(coze)实战 | 用coze一键打造自己的口播数字人,操作简单方便(包含coze网页登录、声音克隆、数字人制作)
2025/04/19
-
开抢!腾讯官宣 28000 HC!
5天前
-
[AI工具箱] OneLine:一个由AI优化的时间线工具,如何帮你高效『吃瓜』?
5天前
-
28000个实习岗位,腾讯发起史上最大就业计划
5天前
-
扣子(Coze)怎么搭建工作流?
2025/04/19
-
我用AI「 高德 MCP+ cursor」 解决了日常最大难题“吃什么”!5分钟就搞定吃什么!
2025/04/19
-
华为电脑管家接入了四家大模型,却是“果篮式”的拼凑
2025/04/19
-
一文全懂:最牛AI公司OpenAI公司治理权斗背后的最创新股权设计
6天前
-
Kimi 16B胜GPT-4o!开源视觉推理模型:MoE架构,推理时仅激活2.8B
6天前
暂无评论