当前位置: 首页 > article >正文

玩转大语言模型——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是一个基于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/v1localhost:8080,如果是局域网内其他机子,需要将127.0.0.1换成服务器的IP地址。

如果服务器本地可以访问,局域网内访问不了,查看一下防火墙有没有允许外界访问端口,或者如果是自己做测试,且没有其他应用,可以直接关掉防火墙。

如果是使用WSL的Ubuntu系统,最好是用本地访问,由于Windows本身防火墙或者与Windows本身端口冲突都可能会导致远程访问失败,调节起来非常的麻烦。

与此同时,llama.cpp还提供了一个WebUI界面
直接访问localhost:8080就可以使用
在这里插入图片描述

结尾

在本章中简单介绍了llama.cpp的使用,实际上llama.cpp的操作细节和参数设置有很多,后续会专门出一个参数的详解


http://www.kler.cn/a/572371.html

相关文章:

  • 人工智能 大模型在物联网感知层上的应用
  • Go与PHP性能对比分析
  • Linux系列:如何调试 malloc 的底层源码
  • Excel基础(详细篇):总结易忽视的知识点,有用的细节操作
  • 【JSON与JSONP】JSON与JSONP全面解析:定义、区别与核心技术对比
  • 初识uniApp
  • 计算机网络-实验四子网划分
  • 【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey
  • 高频 SQL 50 题(基础版)_1174. 即时食物配送 II
  • 使用GitLink个人建站服务部署Allure在线测试报告
  • Windows逆向工程入门之MASM字符处理机制
  • HarmonyOS学习第14天:深入剖析Ability组件
  • MyBatis-Plus 逻辑删除实现
  • 【Java面试】重载(Overload)和 重写(Override)的区别
  • Bruno运行登录接口遇到报错canot found module ‘htmlparser2’怎么解决
  • OpenHarmony多模输入子系统
  • 2025 自动代码审计工具灵脉 SAST 的应用实践
  • 【easy视频 | day02】管理端登录校验 + 分类管理 + 文件上传
  • ubuntu24.04-系统重装
  • 无人机陀螺仪原理与算法详解!