专栏名称: 电子工程世界
即时参与讨论电子工程世界最火话题,抢先知晓电子工程业界资讯。
目录
相关文章推荐
51好读  ›  专栏  ›  电子工程世界

工程师实测在嵌入式设备上部署DeepSeek-R1大模型:效果出人意料

电子工程世界  · 公众号  ·  · 2025-02-28 08:00

正文

请到「今天看啥」查看全文


2025年伊始,DeepSeek的惊艳登场再次刷新了大众对AI技术的认知边界。随着其迅速走红,越来越多的AI芯片厂商纷纷宣布适配DeepSeek,展现出这一新兴技术的强大潜力和吸引力。作为一名电子工程师,您是否已经抢先完成了DeepSeek的本地部署?如果您还在摸索阶段,不妨参考一下EEWorld论坛上众多网友分享的宝贵经验。
Raspberry Pi 5 ——本地部署DeepSeek-R1大模型
作者:xusiwei1236
原文链接:https://www.eeworld.com.cn/aTmbD4S

一、DeepSeek简介

1.1 发展历程

DeepSeek是由中国深度求索公司开发的开源大语言模型系列,其研发始于2023年,目标是为学术界和产业界提供高效可控的AI基础设施。R1系列作为其里程碑版本,通过稀疏化架构和动态计算分配技术,在保持模型性能的同时显著降低了计算资源需求。

1.2 模型特点

  • 参数规模灵活:提供1.5B/7B/33B等多种规格

  • 混合精度训练:支持FP16/INT8/INT4量化部署

  • 上下文感知优化:动态分配计算资源至关键token

  • 中文优化:在Wudao Corpus等中文数据集上强化训练

1.3 技术突破

相比传统LLM,DeepSeek-R1通过以下创新实现低资源部署:
  1. MoE架构:专家混合层动态路由计算路径

  2. 梯度稀疏化:反向传播时仅更新关键参数

  3. 自适应量化:运行时根据硬件自动选择最优精度

二、ollama简介

2.1 软件简介

Ollama是一个获取和运行大语言模型的工具,官网的简介是:

Get up and running with large language models.

2.2 主要功能

最常用的两个功能是:
  • 下载大语言模型;

  • 运行大语言模型;
    除此之外还有很多功能,通过它的命令行帮助信息可以看到:

    基本上可以归纳为两类功能:

  • 模型文件管理:下载(pull)、创建(create)、删除(rm)、拷贝(cp)、查看(list)、上传(push)、查看模型信息(show)

  • 模型运行管理:运行(run)、启动(serve)、停止(stop)、查看正在运行的模型(ps)
    2.3 主要优势
    其核心优势包括:

  • 跨平台支持(Linux/Windows/macOS);

  • 支持NIVIDA/AMD GPU加速,如有相应GPU推理速度快;

  • 使用简单,安装软件、下载模型、运行模型均只需要一条命令

三、安装ollama

安装ollama非常简单,官网提供了在线安装脚本(install.sh)。
在树莓派5上,使用如下命令即可下载在线安装脚本并运行:
curl -fsSL https://ollama.com/install.sh | sh
运行输出如下:
安装后,会自动启动服务进程:
ps -ef | grep ollama
执行如下:

四、下载deepseek-r1:1.5b模型

安装好了ollama之后,我们就可以使用ollama下载deepseek-r1:1.5b模型了,使用如下命令:
ollama pull deepseek-r1:1.5b

五、运行deepseek-r1:1.5b模型

下载好了deepseek-r1:1.5b模型之后,我们就可以使用ollama运行deepseek-r1:1.5b模型了,使用如下命令:
ollama run deepseek-r1:1.5b
直接运行也可以,该命令会下载模型,再运行,非常方便!
再问一个经典的快速排序问题,回答如下:
>>> 用Python写一个快速排序的函数,实现对包含整数的列表进行排序

嗯,我现在需要帮用户写一个用于快速排序的Python函数,而且用户已经给了这个任务。首先,我要理解用户的需求是什么。他们可能是一个刚开始学编程的人,或者
需要快速完成一个简单的排序程序。

接下来,我应该分析用户的使用场景和身份。可能是刚接触编程的新手,或者是需要快速实现一个基本功能的用户。用户的真实需求应该是了解如何编写一个高效的排
序函数,并且能够运行在实际的应用中。

然后是思考用户可能没有明确表达出来的深层需求。比如,他们可能不仅仅想看到代码,还希望了解排序算法的基本原理、优缺点,或者如何优化这个函数以提高效率
。这些都是潜在的需求,可能会帮助我更全面地回答问题。

现在,我要考虑用户的编程基础情况。快速排序作为一种高效的排序算法,通常需要理解递归的策略和选择基准点的能力。因此,如果用户的基础较弱,可能在实现过
程中会遇到一些困难,比如如何正确分割数组或选择合适的基准点。因此,我的解释应该详细但易于理解,确保用户能够逐步掌握。

我还需要思考现有的代码结构。快速排序的实现通常包括几个步骤:选择一个基准点,将数组分成两部分,然后递归地对这两部分进行排序。如果需要优化,可以考虑
使用堆化结构或者减少比较次数,但这可能超出了用户的需求范围。

最后,我要确保提供的回答足够详细,能够帮助用户理解整个过程,并且代码也尽可能简洁,同时易于修改和扩展。这样,即使用户只是想测试函数的运作,也能快速
得到所需的结果。


好的!以下是用Python实现快速排序(QuickSort)的函数,以及一个简单的示例:

```python
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
rest = arr[1:]

less = []
greater = []
for num in rest:
if num < pivot:
less.append(num)
else:
greater.append(num)

return quicksort(less) + [pivot] + quicksort(greater)

def test_quicksort():
import random
arr = [3, 6, 8, 10, 1, 2, 9, 5]
random.shuffle(arr)

sorted_arr = quicksort(arr)
print("原数组:", arr)
print("快速排序后的结果:", sorted_arr)

if __name__ == "__main__":
test_quicksort()
```

### 使用说明:
1. **输入**:一个包含整数的列表(数组)。
2. **实现过程**:
- 如果数组长度小于等于 1,直接返回该数组本身(作为基准情况)。
- 在选择第一个元素作为基准点 `pivot`,然后将剩下的元素分成两部分:一部分是所有比基准点小的元素,另一部分是比基准点大的元素。
- 对于较小的部分,继续递归地应用快速排序方法,直到整个数组被排序。

3. **输出**:
- 原始输入数组的一个 shuffled 版本(因为示例中使用了 `random.shuffle`)。
- 快速排序后的结果。

### 示例运行结果:
```python
原数组:[1, 2, 9, 5, 3, 6, 8, 10]
快速排序后的结果:[1, 2, 3, 5, 6, 8, 9, 10]
```

这个函数实现了基本的快速排序实现,但需要根据实际需求进行调整和优化。

total duration: 1m16.264529746s
load duration: 40.057974ms
prompt eval count: 65 token(s)
prompt eval duration: 1.097s
prompt eval rate: 59.25 tokens/s
eval count: 767 token(s)
eval duration: 1m14.622s
eval rate: 10.28 tokens/s
看起来好像没啥问题,速度还行,达到了10 token/s。
但是,更复杂一点的问题,deepseek-r1:1.5b模型就回答不了了,比如:
>>> 水浒传中有多少个梁山好汉?

嗯,用户问的是《水浒传》里有多少个梁山好汉。首先,我得回想一下梁山好汉是谁们。我记得梁山好汉主要是那些在梁山打倒的豪强人,比如黄忠、鲁智深、张天师这些大人物,他们组成了一支好汉队伍。

然后,问题来了,有多少个呢?《水浒传》里可能没有明确给出数字,所以可能需要根据故事来推断或者查证。我好像听说过梁山好汉一共有三路:第一路是黄忠、鲁智深和张天师;第二路是黄光石、林冲、赵云;第三路是白虎、刘禅、黑虎。

算下来,每条路有三人,那应该是九个好汉。所以可能梁山好汉一共有九个人组成一支队伍,或者可能是九个好汉在梁山打倒过。

不过,我也得考虑一下是否有其他的人加入或变动的情况。比如,在《水浒传》中提到过,梁山好汉有三路,每路三人,加上一些后来的人物,但总体上还是九个人组成一支队伍,也就是梁山好汉总共九人。

所以,综合来看,梁山好汉一共有九个成员,也就是梁山好汉队。这可能就是用户在问的答案。


《水浒传》中的梁山好汉一共有一路、二路、三路三个大队伍,每组各有三人,组成总共**九个梁山好汉**(“梁山好汉”一词)。这些好汉包括黄忠、鲁智深、张天师;黄光石、林冲、赵云;白虎、刘禅、黑虎。他们在梁山打倒过许多豪强人,成为梁山的守护者和英雄。

total duration: 38.169465732s
load duration: 38.989844ms
prompt eval count: 14 token(s)
prompt eval duration: 645ms
prompt eval rate: 21.71 tokens/s
eval count: 396 token(s)
eval duration: 37.484s
eval rate: 10.56 tokens/s
这次的输出就是在胡说了,模型太小了,考虑里面没有相关的信息。PS:而且每次同样这个问题,提问之后回答的还不一样。
RDK X3上——部署deepseek
作者:YUPINLE
原文链接:https://www.eeworld.com.cn/aePmPm1
在RDK X3上利用ollama部署deepseek
看似本地部署deepseek很简单,实际因为网络问题,部署起来还是非常麻烦的。在这里给出我摸索出来的方法,在RDK X3上利用ollama部署deepseek,分发ip,使用chatbox同一局域网即可使用deepseek,获得更好的体验
一、手动安装Ollama
  1. 确认系统信息

  • 首先,确认你的Linux发行版和CPU架构,以便下载正确的Ollama版本。

  • 查看Linux内核版本:

Bash
cat /proc/version
  • 查看CPU架构:

Bash
lscpu
查找输出中的“Architecture”字段来确定是x86_64(适用于AMD/Intel 64位处理器)还是aarch64/arm64(适用于ARM架构64位处理器)。
2.下载Ollama安装包
根据你的CPU架构从GitHub的release下载对应的.tgz安装包。
对于aarch64/arm64架构,则下载ollama-linux-arm64.tgz。
3.安装Ollama
确保你已经将下载好的.tgz文件传输到了目标Linux服务器上。在vscode上直接拖动即可
  • 使用以下命令解压并安装Ollama到系统目录中(需要root权限):

Bash
sudo tar -C /usr -xzf ollama - linux - amd64.tgz
-C /usr指定了解压的目标目录,可根据实际情况调整路径。
4.启动Ollama服务
安装完成后,使用以下命令启动Ollama服务:
Bash
ollama serve

出现图中这个情况说明,已经启动
这会在后台启动Ollama服务,准备好接收请求并管理模型。
5.验证安装
为了确保Ollama已成功安装并正在运行,执行以下命令来列出所有可用的模型:
Bash
ollama list
如果一切正常,你应该能看到已下载模型的列表。如果没有下载任何模型,该命令不会返回错误,只会显示一个空列表。
二、更换Ollama模型下载路径(可以跳过)
有时需要根据实际需求更改模型文件的存储路径。以下是详细步骤。
  1. 关闭Ollama服务

在更改模型路径之前,需先停止当前运行的Ollama服务。
  • 使用systemctl命令(如果Ollama作为服务运行):

Bash
sudo systemctl stop ollama
sudo systemctl disable ollama.service
  • 或者手动停止服务:在运行Ollama的终端中按 Ctrl + C。

2.默认模型路径
默认情况下,Ollama会在 /usr/share/ollama/.ollama/models 存储模型文件。
3.创建新的模型存储目录
首先,创建一个新的目录作为模型存储路径。例如,创建 /data/ollama/models 目录:
Bash
sudo mkdir -p /data/ollama/models
4.更改目录权限
确保新目录的权限设置正确,允许Ollama访问和写入:
Bash
sudo chown -R root:root /data/ollama/models
sudo chmod -R 777 /data/ollama/models

注意:这里的用户和组 (root:root) 应根据实际情况调整为运行Ollama服务的实际用户和组。

5.修改Ollama服务配置文件
假设Ollama是通过systemd管理的服务,你需要编辑相应的服务配置文件来指定新的模型路径。
  • 编辑服务配置文件:

Bash
sudo gedit /etc/systemd/system/ollama.service
或者使用vim:
Bash
sudo vim /etc/systemd/system/ollama.service
  • 修改配置内容,在 [Service] 部分添加或更新以下行:

TOML
[Unit]
Description = Ollama Service
After = network - online.target
[Service]
ExecStart = /usr/local/bin/ollama serve
User = root
Group = root
Restart = always
RestartSec = 3
Environment = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment = "OLLAMA_MODELS=/data/ollama/models"
[Install]
WantedBy = default.target
6.重载配置并重启Ollama服务
  • 重载systemd配置:

Bash
sudo systemctl daemon - reload
  • 重新启动Ollama服务:

Bash
sudo systemctl restart ollama.service
  • 检查服务状态以确认服务是否正常运行:

Bash
sudo systemctl status ollama
7.验证更改
  • 检查旧路径 (/usr/share/ollama/.ollama/models) 是否已经不再包含模型文件。

  • 检查新路径 (/data/ollama/models) 下是否有生成的 blobs 和 manifests 文件夹,这表明模型路径更改成功。

三、使用Ollama加载ModelScope上的GGUF模型
Ollama支持加载托管在ModelScope社区上的模型,魔搭社区是国内的,所以拉取模型速度快更快。ollama默认是拉取huggingface上的,速度比较慢。
GGUF代表量化后的模型,根据RDK X3的性能选择,选择合适的量化模型,这里我使用Q2_K的,测试能做到一秒两三个字。
https://www.modelscope.cn/docs/models/advanced-usage/ollama-integration
具体文档在以上链接,可以自己查看。
  • 一键运行ModelScope模型

Bash
ollama run modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF:DeepSeek-R1-Distill-Qwen-1.5B-Q2_K.gguf
出现以上样式,说明模型在运行,通过top可以观察CPU使用率
这样就完成了deepseek的本地部署。
Jetson 利用 Ollama + Anything LLM 部署 Deepseek、LLama3
作者:LitchiCheng
原文链接:https://www.eeworld.com.cn/a0if5m1
安装jetson_containers
git clone https://github.com/dusty-nv/jetson-containersbash jetson-containers/install.sh
运行ollama容器,加载LLM
# 运行 ollama 容器,首次会下载jetson-containers run --name ollama $(autotag ollama)
# 运行 deepseek 1.5b,首次会自动 pull 镜像ollama run deepseek-r1:1.5b
# 运行 deepseek 8b 占用大概内存 6-7Gollama run deepseek-r1:8b
# verbose 增加详尽的输出,会将当前的 tokens 速率等显示出来ollama run deepseek-r1:8b -verbose
# 列出已经下载的 LLMollama list

输出解释

total duration: 3m31.258084877sload duration: 29.482802msprompt eval count: 34 token(s)prompt eval duration: 622msprompt eval rate: 54.66 tokens/seval count: 1417 token(s)eval duration: 3m30.603seval rate: 6.73 tokens/s
“prompt eval rate(提示评估速率)”
指的是在对输入的提示(prompt)进行评估处理时,模型每秒能够处理的tokens数量。提示通常是用户输入给模型的文本内容,用于引导模型生成特定的输出,prompt eval rate主要衡量的是模型处理初始输入提示部分的速度和效率。
“eval rate(评估速率)”
是模型在整体评估过程中,每秒处理tokens的数量。这里的评估过程不仅仅包括对输入提示的处理,还涵盖了模型根据提示进行推理、计算、生成等一系列操作的整个过程,它反映的是模型在完整的任务执行过程中的综合处理速度。

部署Anything LLM容器

export STORAGE_LOCATION=/opt/anythingllmsudo mkdir -p $STORAGE_LOCATIONsudo chmod 777 -R $STORAGE_LOCATIONtouch "$STORAGE_LOCATION/.env"
sudo docker run -it --rm -p 3001:3001 --cap-add SYS_ADMIN -v ${STORAGE_LOCATION}:/app/server/storage -v ${STORAGE_LOCATION}/.env:/app/server/.env -e STORAGE_DIR="/app/server/storage" ghcr.io/mintplex-labs/anything-llm
配置

· END ·


欢迎将我们设为“ 星标 ”,这样才能第一时间收到推送消息。

关注EEWorld旗下订阅号:“机器人开发圈”

回复“DS”领取《DeepSeek:从入门到精通》完整版

图片

扫码添加小助手回复“机器人”

进群和电子工程师们面对面交流经验







请到「今天看啥」查看全文