玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
系列文章目录
玩转大语言模型——使用langchain和Ollama本地部署大语言模型
玩转大语言模型——三分钟教你用langchain+提示词工程获得猫娘女友
玩转大语言模型——ollama导入huggingface下载的模型
玩转大语言模型——langchain调用ollama视觉多模态语言模型
玩转大语言模型——使用transformers中的pipeline调用huggingface中模型
玩转大语言模型——transformers微调huggingface格式的中文Bert模型
玩转大语言模型——使用GraphRAG+Ollama构建知识图谱
玩转大语言模型——完美解决GraphRAG构建的知识图谱全为英文的问题
玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱
玩转大语言模型——本地部署带聊天界面deepseek R1的小白教程
玩转大语言模型——本地部署deepseek R1和本地数据库的小白教程(Ollama+AnythingLLM)
玩转大语言模型——使用LM Studio在本地部署deepseek R1的零基础)教程
玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成
文章目录
- 系列文章目录
- 前言
- 下载并配置llama.cpp
- 更新apt-get
- 下载依赖
- 克隆代码
- 编译项目
- 构建项目文件
- 进一步编译
- 推理
- CLI工具推理
- 推理模板
- server工具
- 结尾
前言
llama.cpp是一个基于C/C++的开源项目,旨在高效地运行大型语言模型推理。纯采用纯C/C++编写,不依赖其他外部库,可移植性强,只要环境支持C/C++运行,就能运行llama.cpp。支持Apple芯片,通过ARM NEON等框架进行优化;支持x86架构的AVX等指令集;提供自定义CUDA内核,支持NVIDIA、AMD等GPU,还支持Vulkan和SYCL后端,可实现CPU+GPU混合推理。除此之外还支持1.5位到8位的整数量化,加快推理速度并减少内存使用,便于在资源有限的设备上运行。从推理速度上来看,相比原始Python实现,采用C++开发的llama.cpp推理速度更快。通过4-bit、GGUF等量化技术,大幅降低显存需求,能在8GB显存的消费级显卡上运行大模型。本篇将以deepseek为例,介绍如何使用llama.cpp部署大语言模型并进行简单应用
下载并配置llama.cpp
在本篇中仅介绍Linux系统、Nvidia显卡下的配置
更多配置的操作见官网:https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md
更新apt-get
sudo apt-get update
下载依赖
sudo apt-get install build-essential cmake curl libcurl4-openssl-dev -y
其中:
- build-essential :必需的工具和库,确保系统能正常进行编译。
- cmake :跨平台的构建系统,用于管理项目的编译过程。
- curl :命令行工具,用于通过 URL 发送和接收数据。
- libcurl4-openssl-dev :cURL的一个库文件,允许在编程中通过 cURL 发送 HTTP 请求。libcurl4-openssl-dev 是与 OpenSSL配合使用的版本,提供了 SSL/TLS 加密支持,用于安全的 HTTP 请求。
克隆代码
github链接:https://github.com/ggml-org/llama.cpp
也可以直接使用git方式下载
git clone https://github.com/ggml-org/llama.cpp
下载后进入到llama.cpp
路径
cd llama.cpp
编译项目
构建项目文件
使用CMake构建项目文件
cmake -B build -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
其中参数
参数 | 含义 |
---|---|
-B | 构建目录,在此命令中为build目录 |
-DBUILD_SHARED_LIBS | 创建共享库选项,设置为OFF则不创建共享库,仅使用静态库 |
-DGGML_CUDA | 在有 GPU 的情况下使用 GPU 加速 |
-DLLAMA_CURL | 支持网络请求 |
进一步编译
cmake --build build --config Release --clean-first --target llama-quantize llama-cli llama-gguf-split
其中参数:
参数 | 含义 |
---|---|
–build | 用来指示构建文件的路径 |
–config | 指定构建配置,可选参数Debug(调试版本,包含调试信息但没有优化)、Release(没有调试信息,但运行效率更高) |
-j | 构建过程使用的并行CPU数 |
–clean-first | 是否在构建之前清空以前的构建结果,一般建议是情况,防止出现错误 |
–target | 指定构建的目标,不设置这一参数默认是构建所有的目标 |
本篇中编译的目标以及解释
目标 | 解释 |
---|---|
llama-quantize | 将模型的精度从浮点数降低到整数,从而减少内存占用和提高推理速度 |
llama-cli | 用于运行模型或与用户交互 |
llama-gguf-split | 于将一个大模型文件拆分成多个小文件,方便存储和加载 |
推理
推理时需要先切换到编译后的bin
文件目录下
cd /build/bin
CLI工具推理
使用llama-cli
可以实现与模型的交互模式推理
./llama-cli -m /home/aixing/learn_llm/gguf_model/deepseek/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf
交互如下
如果觉得每次执行都要输入一大堆很麻烦,也可以将命令写入sh文件
echo ./llama-cli -m /home/aixing/learn_llm/gguf_model/deepseek/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf > llama-cli-test.sh
下次执行时仅运行sh
文件即可
bash llama-cli-test.sh
推理模板
使用以下命令查看相关参数
llama-cli - h
我们可以看到相关的可选模板
随后可以通过设置--chat-template
来设定模板,除此之外还可以通过以下命令自定义模板
llama-cli -m model.gguf -cnv --in-prefix 'User: ' --reverse-prompt 'User:'
server工具
使用llama-server可以提供API服务
./llama-server -m /home/aixing/learn_llm/gguf_model/deepseek/DeepSeek-R1-Distill-Qwen-1.5B-Q2_K/DeepSeek-R1-Distill-Qwen-1.5B-Q2_K.gguf --port 8080 --host 0.0.0.0 -ngl 5 --parallel 10
其中参数及其含义
参数 | 含义 |
---|---|
-m | 模型路径 |
–port | 端口号,默认是8080 |
host | 设置为全零代表全都可以访问 |
-ngl | 卸载到GPU的层数 |
–parallel | 并发访问数 |
llama-server
提供的是类似于OpenAI
的接口,如果是本机访问,使用127.0.0.1:8080/v1
或localhost:8080
,如果是局域网内其他机子,需要将127.0.0.1
换成服务器的IP地址。
如果服务器本地可以访问,局域网内访问不了,查看一下防火墙有没有允许外界访问端口,或者如果是自己做测试,且没有其他应用,可以直接关掉防火墙。
如果是使用WSL的Ubuntu系统,最好是用本地访问,由于Windows本身防火墙或者与Windows本身端口冲突都可能会导致远程访问失败,调节起来非常的麻烦。
与此同时,llama.cpp
还提供了一个WebUI界面
直接访问localhost:8080
就可以使用
结尾
在本章中简单介绍了llama.cpp
的使用,实际上llama.cpp
的操作细节和参数设置有很多,后续会专门出一个参数的详解