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

玩转大语言模型——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的操作细节和参数设置有很多,后续会专门出一个参数的详解

相关文章:

玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…...

20250301在chrome中安装CRX猫抓

20250301在chrome中安装CRX猫抓 2025/3/1 18:08 百度:猫抓 CRX https://www.crx4chrome.com/crx/49597/ 猫抓 (cat-catch) Crx File 2.5.9 for Chrome (Latest Version) Get Latest Version of 猫抓 (cat-catch) from Web Store Developer Tools > cat-catch / E…...

Docker 深度解析:适合零基础用户的详解

此博客涵盖 Docker 的基本概念和作用、架构和核心组件、与传统虚拟机的对比、安装与基本操作,以及在实际开发和运维中的应用场景。 首先,详细解释了 Docker 的基本概念,包括它的诞生背景、作用及其如何解决传统应用部署中的问题。然后&#…...

LeetCode 分割回文串(回溯、dp)

131.分割回文串 给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1: 输入:s "aab" 输出:[["a","a","b"],["a…...

期权帮|股指期货入门知识:什么是股指期货基差?什么是股指期货价差?

锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 股指期货入门知识:什么是股指期货基差?什么是股指期货价差? 股指期货的基差与价差是两个重要的价格关系指标,它们反映了现货市场…...

解锁GPM 2.0「卡顿帧堆栈」|代码示例与实战分析

每个游戏开发者都有一个共同的愿望,那就是能够在无需复现玩家反馈的卡顿现象时,快速且准确地定位卡顿的根本原因。为了实现这一目标,UWA GPM 2.0推出了全新功能 - 卡顿帧堆栈,旨在为开发团队提供高效、精准的卡顿分析工具。在这篇…...

Python:类型转换和深浅拷贝,可变与不可变对象

int():转换为一个整数,只能转换由纯数字组成的字符串 浮点型强转整型会去掉小数点及后面的数,只保留整数部分 #如果字符串中有数字和正负号以外的字符就会报错 float():整形转换为浮点型会自动添加一位小数 .0 如果字符串中有…...

Redis——缓存穿透、击穿、雪崩

缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库…...

8.1.STM32_OLED

4.STM32_OLED 跟着江协科大的视频,无法点亮OLED屏幕解决办法 每个人使用的0.96寸OLED屏幕信号不一样,存在很多兼容性问题 归根结底就是驱动的问题! 本人的OLED是SSD1306,在淘宝店铺找了驱动文件后成功点亮,示例见文末 请针对自…...

Gartner发布安全运营指标构建指南

如何为安全运营指标构建坚实的基础 安全运营经理需要报告威胁检测、调查和响应计划的有效性,但难以驾驭大量潜在的 SOC 指标。本研究提供了设计针对 SOC 的指标系统的示例和实践。 主要发现 需要清晰、一致的衡量标准来向董事会成员或服务提供商等更广泛的团队传达…...

【赵渝强老师】监控Redis

对运行状态的Redis实例进行监控是运维管理中非常重要的内容,包括:监控Redis的内存、监控Redis的吞吐量、监控Redis的运行时信息和监控Redis的延时。通过Redis提供的监控命令便能非常方便地实现对各项指标的监控。 一、监控Redis的内存 视频讲解如下 【…...

【Unity】搭建HTTP服务器并解决IP无法访问问题解决

一、核心目标与背景 在Unity中搭建本地HTTP服务器,可以用于实现Web与游戏交互、本地数据接口测试、跨设备通信等场景。但在实际部署中,开发者常遇到以下问题: ​本机IP无法访问:服务绑定localhost时,局域网设备无法连…...

如何远程访问svn中的URL

简介: 主要opencascade相关知识学习 格言: 万丈高楼平地起 要远程访问 SVN(Subversion)仓库中的 URL,通常需要以下步骤和注意事项: 1. 确认远程 SVN 服务器的访问协议 SVN 支持多种协议访问远程仓库&…...

Free Auto Clicker - 在任意位置自动重复鼠标点击

“想让鼠标自己动起来,解放双手去做更有趣的事?”Free Auto Clicker 就像你的数字小助手,能在任意位置自动重复点击鼠标。从玩游戏到刷网页,这款免费工具让你告别枯燥的重复操作,效率瞬间起飞! 你有没有想…...

0005__PyTorch 教程

PyTorch 教程 | 菜鸟教程 离线包:torch-1.13.1cpu-cp39-cp39-win_amd64.whl https://download.pytorch.org/whl/torch_stable.html...

Unity Burst编译

官网文档:https://docs.unity3d.com/Packages/com.unity.burst1.8/manual/index.html Unity 之Burst 底层原理:https://zhuanlan.zhihu.com/p/623274986 Burst 编译器入门(五):https://developer.unity.cn/projects/5e…...

软件测试中的BUG

文章目录 软件测试的生命周期BugBug 的概念描述 Bug 的要素案例Bug 级别Bug 的生命周期与开发产生争执怎么办?【高频面试题】先检查自身,Bug 是否描述的不清楚站在用户角度考虑并抛出问题Bug 的定级要有理有据提⾼自身技术和业务水平,做到不仅…...

LabVIEW基于IMAQ实现直线边缘检测

本程序基于 NI Vision Development 模块,通过 IMAQ Find Straight Edges 函数,在指定 ROI(感兴趣区域) 内检测多条直线边缘。用户可 动态调整检测参数 或 自定义ROI,实时观察识别效果,适用于 高精度视觉检测…...

C#:LINQ学习笔记01:LINQ基础概念

一、LINQ 架构体系 1. LINQ 的核心思想 统一查询模型:对对象、XML、数据库等不同数据源使用一致的语法。强类型检查:编译时类型安全,减少运行时错误。 2. 核心组件 技术数据源典型场景LINQ to Objects内存集合 (IEnumerable)过滤/排序集合…...

15Metasploit框架介绍

metasploit目录结构 MSF ——the metasploit framework 的简称。MSF高度模块化,即框架结构由多个module组成,是全球最受欢迎的工具 是一筐开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行sheellcode,并且保持…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...