2025年伊始,DeepSeek的惊艳登场再次刷新了大众对AI技术的认知边界。随着其迅速走红,越来越多的AI芯片厂商纷纷宣布适配DeepSeek,展现出这一新兴技术的强大潜力和吸引力。作为一名电子工程师,您是否已经抢先完成了DeepSeek的本地部署?如果您还在摸索阶段,不妨参考一下EEWorld论坛上众多网友分享的宝贵经验。 Raspberry Pi 5 ——本地部署DeepSeek-R1大模型 原文链接: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通过以下创新实现低资源部署: MoE架构:专家混合层动态路由计算路径
梯度稀疏化:反向传播时仅更新关键参数
自适应量化:运行时根据硬件自动选择最优精度
二、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 四、下载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:而且每次同样这个问题,提问之后回答的还不一样。 原文链接:https://www.eeworld.com.cn/aePmPm1 在RDK X3上利用ollama部署deepseek 看似本地部署deepseek很简单,实际因为网络问题,部署起来还是非常麻烦的。在这里给出我摸索出来的方法,在RDK X3上利用ollama部署deepseek,分发ip,使用chatbox同一局域网即可使用deepseek,获得更好的体验 确认系统信息
查找输出中的“Architecture”字段来确定是x86_64(适用于AMD/Intel 64位处理器)还是aarch64/arm64(适用于ARM架构64位处理器)。 根据你的CPU架构从GitHub的release下载对应的.tgz安装包。 对于aarch64/arm64架构,则下载ollama-linux-arm64.tgz。 确保你已经将下载好的.tgz文件传输到了目标Linux服务器上。在vscode上直接拖动即可 sudo tar -C /usr -xzf ollama - linux - amd64.tgz -C /usr指定了解压的目标目录,可根据实际情况调整路径。 这会在后台启动Ollama服务,准备好接收请求并管理模型。 为了确保Ollama已成功安装并正在运行,执行以下命令来列出所有可用的模型: 如果一切正常,你应该能看到已下载模型的列表。如果没有下载任何模型,该命令不会返回错误,只会显示一个空列表。 有时需要根据实际需求更改模型文件的存储路径。以下是详细步骤。 关闭Ollama服务
在更改模型路径之前,需先停止当前运行的Ollama服务。 sudo systemctl stop ollama sudo systemctl disable ollama.service 默认情况下,Ollama会在 /usr/share/ollama/.ollama/models 存储模型文件。 首先,创建一个新的目录作为模型存储路径。例如,创建 /data/ollama/models 目录: sudo mkdir -p /data/ollama/models 确保新目录的权限设置正确,允许Ollama访问和写入: sudo chown -R root:root /data/ollama/models sudo chmod -R 777 /data/ollama/models 注意:这里的用户和组 (root:root) 应根据实际情况调整为运行Ollama服务的实际用户和组。 假设Ollama是通过systemd管理的服务,你需要编辑相应的服务配置文件来指定新的模型路径。 sudo gedit /etc/systemd/system/ollama.service sudo vim /etc/systemd/system/ollama.service Description = Ollama Service After = network - online.target ExecStart = /usr/local/bin/ollama serve Environment = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Environment = "OLLAMA_MODELS=/data/ollama/models" WantedBy = default.target sudo systemctl daemon - reload sudo systemctl restart ollama.service sudo systemctl status ollama 三、使用Ollama加载ModelScope上的GGUF模型 Ollama支持加载托管在ModelScope社区上的模型,魔搭社区是国内的,所以拉取模型速度快更快。ollama默认是拉取huggingface上的,速度比较慢。 GGUF代表量化后的模型,根据RDK X3的性能选择,选择合适的量化模型,这里我使用Q2_K的,测试能做到一秒两三个字。 https://www.modelscope.cn/docs/models/advanced-usage/ollama-integration ollama run modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF:DeepSeek-R1-Distill-Qwen-1.5B-Q2_K.gguf 出现以上样式,说明模型在运行,通过top可以观察CPU使用率 Jetson 利用 Ollama + Anything LLM 部署 Deepseek、LLama3 原文链接:https://www.eeworld.com.cn/a0if5m1 git clone https://github.com/dusty-nv/jetson-containers
bash jetson-containers/install.sh
jetson-containers run --name ollama $(autotag ollama)
ollama run deepseek-r1:1.5b
ollama run deepseek-r1:8b
ollama run deepseek-r1:8b -verbose
ollama list
输出解释 total duration: 3m31.258084877s
load duration : 29.482802 ms
prompt eval count : 34 token(s)
prompt eval duration : 622 ms
prompt eval rate: 54.66 tokens/s
eval count : 1417 token(s)
eval duration : 3 m30.603 s
eval rate: 6.73 tokens/s
“prompt eval rate(提示评估速率)” 指的是在对输入的提示(prompt)进行评估处理时,模型每秒能够处理的tokens数量。提示通常是用户输入给模型的文本内容,用于引导模型生成特定的输出,prompt eval rate主要衡量的是模型处理初始输入提示部分的速度和效率。 是模型在整体评估过程中,每秒处理tokens的数量。这里的评估过程不仅仅包括对输入提示的处理,还涵盖了模型根据提示进行推理、计算、生成等一系列操作的整个过程,它反映的是模型在完整的任务执行过程中的综合处理速度。 部署Anything LLM容器 export STORAGE_LOCATION=/opt/anythingllm
sudo mkdir -p $STORAGE_LOCATION
sudo chmod 777 -R $STORAGE_LOCATION
touch "$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
欢迎将我们设为“ 星标 ”,这样才能第一时间收到推送消息。 关注EEWorld 旗下订阅号:“机器人开发圈”
回复“ DS ”领取《DeepSeek:从入门到精通》完整版