三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

《让本地LLM速度提升10倍:llama.cpp CUDA GPU加速实战》

《让本地LLM速度提升10倍:llama.cpp CUDA GPU加速实战》

LlamaAI本地部署实战专栏第4篇

从CPU推理到GPU加速,掌握llama.cpp CUDA优化,让你的本地大模型真正发挥显卡性能。


一、为什么本地大模型需要GPU加速?

在上一篇文章中,我们已经成功运行了第一个本地模型。

但是很多开发者会遇到一个问题:

为什么我的模型回答这么慢?

例如:

运行 Qwen2.5-7B:

CPU:

生成速度: 2~5 token/s

GPU:

30~80 token/s

差距可能达到十几倍。

原因:

大语言模型最核心的计算是:

矩阵乘法(Matrix Multiplication)

Transformer内部:

输入Token ↓ Embedding ↓ Attention计算 ↓ Feed Forward网络 ↓ 输出Token

其中大量计算:

矩阵 × 矩阵 矩阵 × 向量

非常适合GPU并行计算。


二、CPU和GPU运行大模型的区别

CPU推理

CPU结构:

CPU 核心数量: 8~32 适合: 复杂逻辑任务

运行:

模型参数 ↓ CPU线程 ↓ 逐步计算

特点:

优点:

  • 通用性强
  • 不需要显卡

缺点:

  • 并行能力弱
  • 大矩阵计算慢

GPU推理

GPU结构:

GPU CUDA Core: 几千个 Tensor Core: 大量矩阵计算单元

运行:

模型参数 ↓ GPU显存 ↓ CUDA并行计算 ↓ 高速生成

特点:

优点:

  • 大规模并行
  • 高吞吐量
  • 适合AI计算

三、llama.cpp GPU加速原理

llama.cpp默认:

CPU Backend ↓ CPU计算

开启CUDA后:

llama.cpp | ---------------------- | | CPU CUDA GPU | NVIDIA GPU

部分计算会转移:

Transformer Layers ↓ GPU执行

这个过程叫:

GPU Offload(GPU卸载)


四、准备CUDA环境

硬件要求

必须:

  • NVIDIA GPU
  • NVIDIA Driver

查看GPU:

nvidia-smi

正常输出:

+-----------------------+ | NVIDIA-SMI | | GPU Name | | RTX 4060 | | Memory Usage | +-----------------------+

说明驱动正常。


五、安装CUDA Toolkit

CUDA是:

NVIDIA提供的GPU计算平台。

检查:

nvcc --version

如果输出:

Cuda compilation tools release 12.x

说明安装成功。


六、重新编译llama.cpp支持CUDA

之前:

cmake -B build

只能CPU:

CPU Backend

现在重新编译。

进入:

cd llama.cpp

删除旧build:

Linux:

rm -rf build

Windows:

rmdir build -Recurse

CUDA编译

执行:

cmake \ -B build \ -DGGML_CUDA=ON

然后:

cmake --build build --config Release

等待完成。


七、确认CUDA版本llama.cpp

运行:

./build/bin/llama-cli --version

查看:

CUDA = ON

或者:

启动模型:

./build/bin/llama-cli \ -m qwen.gguf \ -ngl 50

如果看到:

offloaded 50 layers to GPU

说明GPU已经工作。


八、理解-ngl参数

这是最重要的参数。

全称:

number of gpu layers

作用:

决定多少Transformer层放入GPU。

例如:

-ngl 20

表示:

20层 → GPU 剩余 → CPU

如果显存足够:

-ngl 999

表示:

全部放GPU。

例如:

RTX4090:

24GB VRAM ↓ 7B/13B模型 ↓ 几乎全部GPU

九、显存不足怎么办?

错误:

CUDA out of memory

原因:

模型太大。

解决方法:


方法1:降低GPU Layers

例如:

-ngl 20

减少GPU占用。


方法2:选择更小量化模型

例如:

7B:

Q8 ↓ 8GB+

换:

Q4 ↓ 4GB

方法3:减少上下文长度

例如:

默认:

-c 8192

降低:

-c 2048

因为:

Context越大:

KV Cache越大。


十、实际性能测试

测试模型:

Qwen2.5-7B-Instruct-Q4

RTX4060 Laptop

CPU:

约5 token/s

GPU:

约35 token/s

提升:

7倍

RTX4090

CPU:

5 token/s

GPU:

100 token/s+

提升:

20倍左右

十一、进一步优化参数

1. 增加Batch

参数:

-b

例如:

-b 512

作用:

提高吞吐量。


2. 设置线程数

CPU部分:

--threads 8

例如:

--threads 16

3. Flash Attention

部分模型支持:

--flash-attn

作用:

降低Attention显存占用。


十二、完整推荐启动命令

RTX4060:

./llama-cli \ -m qwen2.5-7b-q4.gguf \ -ngl 999 \ -c 4096 \ -b 512 \ --flash-attn

RTX4090:

./llama-cli \ -m llama3-8b-q8.gguf \ -ngl 999 \ -c 8192 \ -b 1024 \ --flash-attn

十三、GPU加速后的完整架构

现在你的系统:

用户 | llama-cli | llama.cpp | ---------------- | | CPU CUDA GPU | NVIDIA显卡 | GGUF模型

已经接近生产级推理架构。


十四、常见问题

1. CUDA开启但是速度没变化

检查:

nvidia-smi

如果GPU利用率:

0%

说明:

没有offload。

增加:

-ngl

2. 编译找不到CUDA

错误:

CUDA Toolkit not found

检查:

nvcc --version

重新安装CUDA。


3. 显存占满

解决:

降低:

-ngl -c

或者换:

Q4模型。


十五、本篇总结

本篇完成:

✅ 理解GPU为什么适合LLM
✅ 学会安装CUDA环境
✅ 编译CUDA版llama.cpp
✅ 掌握GPU Offload机制
✅ 学会显存优化
✅ 提升本地模型推理速度

现在你的本地AI已经从:

能运行

升级到:

高速运行

下一篇:

《llama.cpp Server实战:把本地模型变成OpenAI兼容接口》

下一篇将实现:

  • 启动本地LLM API服务器
  • OpenAI SDK调用本地模型
  • 前端聊天界面接入
  • 构建自己的ChatGPT
  • 本地AI服务工程化部署

让你的模型从“命令行工具”变成真正的AI服务。

← 返回列表