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

dify本地部署
安装docker。 在官网安装docker。 如果遇到wsl报错,就使用 wsl --updata 进行更新。如果问题解决,进入docker应该是如下界面: 克隆 在自己创建的文件内使用 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 用于管理分支,包括查看、创建、删除、重命名和关联。 git branch 是 Git 版本控制系统中用于管理分支的命令。分支是 Git 的核心功能之一,允许开发者在同一个代码库中并行开发不同的功能…...

算法-图-数据结构(邻接矩阵)-BFS广度优先遍历
邻接矩阵广度优先遍历(BFS)是一种用于遍历或搜索图的算法,以下是具体介绍: 1. 基本概念 图是一种非线性的数据结构,由顶点和边组成,可分为无向图、有向图、加权图、无权图等。邻接矩阵是表示图的一种数…...
数学建模之数学模型—2:非线性规划
文章目录 非线性规划基本概念与结论凸集与凸函数极值条件无约束条件的极值判断条件有约束条件的极值判断条件 无约束非线性规划一维搜索算法步骤示例特点代码模板 最速下降法算法详细步骤 代码实现示例最优步长的求解 黄金分割法斐波那契法牛顿法阻尼牛顿法模式搜索法Powell方法…...

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

ctfshow做题笔记—栈溢出—pwn57~pwn60
目录 前言 一、pwn57(先了解一下简单的64位shellcode吧) 二、pwn58 三、pwn59(64位 无限制) 四、pwn60(入门难度shellcode) 前言 往前写了几道题,与shellcode有关,关于shellc…...

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

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

My first Android application
界面元素组成: 功能代码: /*实现功能:当输入内容后,欢迎文本发生相应改变,并清除掉文本域内容当未输入任何内容时,弹出提示文本以警告用户*/val greetingText findViewById<TextView>(R.id.printer)…...
ZLMediaKi集群设置
要在集群环境中部署 ZLMediaKit,您可以按照以下步骤进行操作。ZLMediaKit 是一个高性能的流媒体服务器,支持 RTMP、RTSP、HLS 等协议。以下是一个详细的集群部署方案: ### 1. 环境准备 - **服务器**:准备多台服务器,…...
Docker基础实践与应用举例
Docker 是一个轻量级容器化平台,通过将应用及其依赖打包到容器中,实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例,结合具体操作步骤: 一、基础实践 1. 快速启动一个容器 # 运行一个Nginx容器,映射宿…...

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

百度AI图片助手,免费AI去水印、画质修复、画面延展以及局部替换
最近,要是你常用百度图片,可能已经发现了它新添的一个超实用功能——百度AI图片助手。但很多朋友不知道它的入口地址,我们今天给大家分享一下。 这个功能的出现,在图片编辑修改方面带来了极大便利,它涵盖了AI去水印、…...
【前端】Axios AJAX Fetch
不定期更新,建议关注收藏点赞。 目录 AxiosAJAXCORS 允许跨域请求 Fetch Axios axios 是一个基于 Promise 的 JavaScript HTTP 客户端,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一个简单的 API 来发起请求,并处理请求的结果。axios …...

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

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...