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

[AI]从零开始的树莓派运行DeepSeek模型教程

一、前言

        在前面的教程中,教了大家如何在windows中使用llama.cpp来运行DeepSeek模型。根据前面的教程中,我们也了解到了,我们只需要编译好llama.cpp就可以运行DeepSeek以及类似的LLM模型。那么本次教程就来教大家如何使用树莓派来运行大模型。这里我树莓派运行的是Linux系统,也就是说,你将本次教程中的内容学会以后,你可以在任何Linux和类Linux的终端中完成大模型的部署。如果你准备好了,就让我们开始吧!

二、谁适合本次教程

        因为已经涉及到操作Linux了,并且还是操作Linux的开发板,学习本教程之前请具备一定的Linux基础和一定的解决问题的能力。本次的操作可以说是比较简单的,一般不会出现问题,如果你在安装环境或者编译时报错,可以尝试在浏览器中寻找类似的错误与这个错误对应的解决办法。学习本教程之前,建议学习我之前发布的在windows中运行llama.cpp的教程:

llama.cpp环境部署:[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程_deepseek hf转gguf-CSDN博客

因为树莓派的性能太低了,我们需要对模型进行量化才能使用,所以现在的方案是,在windows上将模型格式和量化处理好,然后再将模型文件传输到树莓派上。而完成上面的操作就需要部署llama.cpp。 

三、环境的准备

        这里要求大家准备一个树莓派,这里我使用的是树莓派5,当然,也建议大家使用树莓派5。树莓派5运行1B并且F16量化的模型已经非常慢了。所以不推荐大家使用树莓派5以下的版本。这里要求大家将树莓派的系统安装好,并且可以远程到或者是使用HDMI连接显示器。总之需要大家能够操作到树莓派就行了。后面我就使用SSH远程树莓派进行演示。

四、llama.cpp的编译

        这里已经我为我的树莓派装好了一个全新的系统,并且使用SSH连接到了树莓派:

还有就是要求大家树莓派连接到互联网,这里假如我们ping一个网址需要能ping通:

1.安装llama.cpp编译所需的环境

        因为树莓派本质属于国外的嵌入式开发板,所以可能一些软件源我们拉取比较慢甚至无法拉取,那么现在我们就来换一些树莓派的下载源。这里参考了:debian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

这里我们首先使用下面的命令打开软件源的配置文件:

sudo nano /etc/apt/sources.list

这里我们使用“#”将原本的源都注释掉:

然后将下面的内容复制到原本的源的下面:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib

完成以上操作以后,我们保存并退出文件。

这里我们使用下面的命令来更新一下我们重新设置的源:

sudo apt update

如图所示,我们已经更新好了:

下面我们来安装编译所需的环境,直接使用下面的命令即可:

sudo apt install cmake gcc g++

这里执行完上面的命令以后llama.cpp的环境就安装完成了。

2.llama.cpp源码拉取

        这里拉取llama.cpp的源码我们需要使用到git命令,下面我们先使用下面的命令来安装一下git:

sudo apt install git

安装好git命令以后,我们就可以直接使用下面的命令拉取llama.cpp的源码了:

git clone https://github.com/ggml-org/llama.cpp.git

如果你这里拉取失败了,可以尝试配置一些正向代理,这里用小猫咪的代理举例,大家开启局域网代理,并且启动系统代理:

然后使用下面的命令来配置git clone的代理:

git config --global http.proxy http://192.168.112.22:7890
git config --global https.proxy http://192.168.112.22:7890

这里的“192.168.112.22”是我在内网中小猫咪所在设备的IP地址,大家写成自己的即可。

配置完成以后,我们应该就可以借助小猫咪的代理将llama.cpp的源码拉下来了:

如果有小伙伴使用上面的方法没办法拉取项目,可以考虑使用下面的git镜像站拉取:

git clone https://gitee.com/ggml-org/llama.cpp.git

使用gitee需要大家输入以下自己的账号。

如果上面的方法都不行,那就直接前往llama.cpp的开源主页下载源码压缩包,llama.cpp开源主页:

下载完以后,大家自行解压即可。解压得到的文件和直接拉取得到的文件是一样的。

不管是直接使用命令还是下载的压缩包进行解压,我们就可以得到下面的文件和文件夹:

3.llama.cpp的编译

        现在我们准备开始编译llama.cpp。这里我们需要在llama.cpp的项目目录下新建一个文件夹,我们在llama.cpp的项目目录下使用下面的命令:

mkdir build

然后使用下面的命令进入这个目录:

cd build/

进入目录以后,我们使用下面的命令生成makefile文件:

cmake .. -DLLAMA_NATIVE=OFF

这里加上“-DLLAMA_NATIVE=OFF”是为了在ARM设备中提升兼容性。

执行命令以后,就生成了编译相关的文件,这些文件指导了编译的过程:

命令执行完以后,我们的bulid目录下也多了很多文件:

然后我们使用下面的命令进行编译:

make -j$(nproc)

后面的“-j$(nproc)”是为了自动传递多核参数。也就是说它会自动识别树莓派的处理器数量并且调用处理器进行编译。

命令执行以后,编译就开始了:

编译的过程中可能出现警告,大家不用在意。只要没出现错误,都可以忽略。因为树莓派的性能确实比较低,所以编译的时间也相对较长。

如果你在未来的某天构建失败了,首先可以考虑去llama.cpp的开源主页看看编译目前的llama.cpp需要多少的cmake版本。当然,也可以将cmake和llama.cpp都降级到我目前的版本。现在是2025年2月23日,目前我的CMake版本是“3.25.1”:

当我们编译结束以后,build的bin文件夹下,就生成了许多可执行文件,这些就是我们后面要用到文件了:

至此,我们llama.cpp的编译就结束了。

五、使用llama.cpp运行GGUF格式的模型

        在前面我们已经部署好了llama.cpp,现在我们就使用llama.cpp来运行GGUF格式的模型了,至于什么是GGUF格式的模型以及如何对模型进行量化,在之前的windows部署llama.cpp里面讲过。大家可以参考那篇教程:

llama.cpp的部署及使用:[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程_deepseek hf转gguf-CSDN博客

当我们将一个模型格式转换,这里我使用“DeepSeek-R1-Distill-Qwen-1.5B”模型,格式转换后如图所示:

这里我们使用ftp服务将这个文件传输到树莓派中,在终端中输入下面的命令:

sftp chulingxiao@192.168.112.10

这里的“chulingxiao”是登录使用的用户名,大家输入自己的用户名即可。后面的IP地址大家修改为自己树莓派的IP地址即可。

进入sftp模式以后,就可以使用sftp命令了:

使用put命令上传文件,格式如下:

put 本地文件路径 树莓派文件路径

这里我们首先在树莓派的llama.cpp的models目录下新建一个以模型名称命名的目录,使用下面的命令:

mkdir DeepSeek-R1-Distill-Qwen-1.5B

然后使用sftp将本地的模型文件上传到我们新建的目录中,这里我使用的命令如下,大家根据自己的路径修改命令即可:

ut F:\OpenProject\llama.cpp\models\DeepSeek-R1-Distill-Qwen-1.5B\DeepSeek-R1-Distill-Qwen-1.5B-F16.gguf /home/chulingxiao/llama.cpp/models/DeepSeek-R1-Distill-Qwen-1.5B/

模型上传后,如图所示:

模型上传完成以后,我们就用我们编译出来的二进制文件来运行这个模型,这里我们回到项目目录使用下面的命令:

./build/bin/llama-cli -m ./models/DeepSeek-R1-Distill-Qwen-1.5B/DeepSeek-R1-Distill-Qwen-1.5B-F16.gguf

大家这里需要根据自己的路径写命令。

输入命令以后。模型就启动起来了:

启动完成以后,就可以进行对话了:

至此,我们在树莓派运行DeepSeek就已经完成了。以后,只要是类似的模型都可以使用这样的方法来使用树莓派来运行。

六、结语

        本次教程中,教了大家如何使用树莓派来运行DeepSeek大模型,当然,也希望大家具有举一反三的能力,上面的方法在其它的Linux系统中也适用。剩下的就留给大家自己探索吧!最后,感谢大家的观看!

相关文章:

[AI]从零开始的树莓派运行DeepSeek模型教程

一、前言 在前面的教程中,教了大家如何在windows中使用llama.cpp来运行DeepSeek模型。根据前面的教程中,我们也了解到了,我们只需要编译好llama.cpp就可以运行DeepSeek以及类似的LLM模型。那么本次教程就来教大家如何使用树莓派来运行大模型。…...

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二) 第一部分:网络平台搭建与设备安全防护任务书第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1:应急响应&…...

Open WebUI本地部署教程

文章目录 1、系统环境配置2、源码下载2.1 github源码地址下载 3、环境启动3.1 后端环境3.2 前端环境 4、问题4.1 浏览器跨域问题4.2 all-MiniLM-L6-v2模型文件下载失败问题4.3 单独部署backend启动报错问题 1、系统环境配置 操作系统:windows/linux/macos Python版…...

Missing required prop: “maxlength“

背景&#xff1a; 封装一个使用功能相同使用频率较高的input公共组件作为子组件&#xff0c;大多数长度要求为200&#xff0c;且实时显示统计子数&#xff0c;部分input有输入提示。 代码实现如下&#xff1a; <template><el-input v-model"inputValue" t…...

dify本地部署

安装docker。 在官网安装docker。 如果遇到wsl报错&#xff0c;就使用 wsl --updata 进行更新。如果问题解决&#xff0c;进入docker应该是如下界面&#xff1a; 克隆 在自己创建的文件内使用 git clone gitgithub.com:langgenius/dify.git 或 git clone https://github.com…...

python学习一

学习网络安全为什么要学python? 1、在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工 具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者 编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定 的编程能力。 2、python是一门编程语言经常用它…...

git branch

文章目录 1.简介2.格式3.选项4.示例参考文献 1.简介 git branch 用于管理分支&#xff0c;包括查看、创建、删除、重命名和关联。 git branch 是 Git 版本控制系统中用于管理分支的命令。分支是 Git 的核心功能之一&#xff0c;允许开发者在同一个代码库中并行开发不同的功能…...

算法-图-数据结构(邻接矩阵)-BFS广度优先遍历

邻接矩阵广度优先遍历&#xff08;BFS&#xff09;是一种用于遍历或搜索图的算法&#xff0c;以下是具体介绍&#xff1a; 1. 基本概念 图是一种非线性的数据结构&#xff0c;由顶点和边组成&#xff0c;可分为无向图、有向图、加权图、无权图等。邻接矩阵是表示图的一种数…...

数学建模之数学模型—2:非线性规划

文章目录 非线性规划基本概念与结论凸集与凸函数极值条件无约束条件的极值判断条件有约束条件的极值判断条件 无约束非线性规划一维搜索算法步骤示例特点代码模板 最速下降法算法详细步骤 代码实现示例最优步长的求解 黄金分割法斐波那契法牛顿法阻尼牛顿法模式搜索法Powell方法…...

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载&#xff0c;导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas&#xff0c;UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…...

ctfshow做题笔记—栈溢出—pwn57~pwn60

目录 前言 一、pwn57&#xff08;先了解一下简单的64位shellcode吧&#xff09; 二、pwn58 三、pwn59&#xff08;64位 无限制&#xff09; 四、pwn60&#xff08;入门难度shellcode&#xff09; 前言 往前写了几道题&#xff0c;与shellcode有关&#xff0c;关于shellc…...

数据结构 1-2 线性表的链式存储-链表

1 原理 顺序表的缺点&#xff1a; 插入和删除移动大量元素数组的大小不好控制占用一大段连续的存储空间&#xff0c;造成很多碎片 链表规避了上述顺序表缺点 逻辑上相邻的两个元素在物理位置上不相邻 头结点 L&#xff1a;头指针 头指针&#xff1a;链表中第一个结点的存储…...

ArcGIS Pro进行坡度与坡向分析

在地理信息系统中&#xff0c;坡度分析是一项至关重要的空间分析方法&#xff0c;旨在精确计算地表或地形的坡度&#xff0c;为地形特征识别、土地资源规划、环境保护、灾害预警等领域提供科学依据。本文将详细介绍如何利用ArcGIS Pro这一强大的地理信息系统软件&#xff0c;进…...

My first Android application

界面元素组成&#xff1a; 功能代码&#xff1a; /*实现功能&#xff1a;当输入内容后&#xff0c;欢迎文本发生相应改变&#xff0c;并清除掉文本域内容当未输入任何内容时&#xff0c;弹出提示文本以警告用户*/val greetingText findViewById<TextView>(R.id.printer)…...

ZLMediaKi集群设置

要在集群环境中部署 ZLMediaKit&#xff0c;您可以按照以下步骤进行操作。ZLMediaKit 是一个高性能的流媒体服务器&#xff0c;支持 RTMP、RTSP、HLS 等协议。以下是一个详细的集群部署方案&#xff1a; ### 1. 环境准备 - **服务器**&#xff1a;准备多台服务器&#xff0c;…...

Docker基础实践与应用举例

Docker 是一个轻量级容器化平台&#xff0c;通过将应用及其依赖打包到容器中&#xff0c;实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例&#xff0c;结合具体操作步骤&#xff1a; 一、基础实践 1. 快速启动一个容器 # 运行一个Nginx容器&#xff0c;映射宿…...

Innovus中快速获取timing path逻辑深度的golden脚本

在实际项目中我们经常会遇到一条timing path级数特别多&#xff0c;可能是一两页都翻不完。此时&#xff0c;我们大都需要手工去数这条path上到底有哪些是设计本身的逻辑&#xff0c;哪些是PR工具插入的buffer和inverter。 数字IC后端手把手培训教程 | Clock Gating相关clock …...

百度AI图片助手,免费AI去水印、画质修复、画面延展以及局部替换

最近&#xff0c;要是你常用百度图片&#xff0c;可能已经发现了它新添的一个超实用功能——百度AI图片助手。但很多朋友不知道它的入口地址&#xff0c;我们今天给大家分享一下。 这个功能的出现&#xff0c;在图片编辑修改方面带来了极大便利&#xff0c;它涵盖了AI去水印、…...

【前端】Axios AJAX Fetch

不定期更新&#xff0c;建议关注收藏点赞。 目录 AxiosAJAXCORS 允许跨域请求 Fetch Axios axios 是一个基于 Promise 的 JavaScript HTTP 客户端&#xff0c;用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一个简单的 API 来发起请求&#xff0c;并处理请求的结果。axios …...

测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法

在测试登录窗口时,可以从 表单测试、 逻辑判断和 业务流程三个方面设计测试思路和方法。以下是一个详细的测试方案: 1. 表单测试 表单测试主要关注输入框、按钮等UI元素的正确性和用户体验。 测试点: 输入框测试 用户名和密码输入框是否正常显示。输入框是否支持预期的字符类…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...