[ Content contribution] Deepin 25本地部署DeepSeek
Tofloor
poster avatar
Feelup
deepin
2025-02-06 12:04
Author

最近想要在Deepin系统上部署本地 DeepSeek-R1 模型的话题越来越多了,虽然不是太复杂,但看了好几个帖子都感觉写得不够详细,对新手也不够友好,我就来写一个稍微详细点的吧

谨以此文献给所有希望在本地电脑上使用大模型的新手们以指引

说明:本流程不仅仅适用于 DeepSeek-R1 模型,同样也适用于其它模型的本地部署

演示使用的系统版本与硬件条件

image.png

Ollama部署

打开网站:Ollama软件 ,点击复制命令

image.png

将该命令粘贴到终端中执行即可,安装过程中需要输入当前用户的密码

命令:curl -fsSL https://ollama.com/install.sh | sh

说明:ollama软件大概有1.5GB左右,下载需要一些时间(下图所示还没开始下载哦,下载开始后会显示下载速度等信息)

image.png

ollama下载完成后,就可以正常查看软件版本

命令:ollama --version

image.png

Ollama服务配置

说明1:如果你只希望简单使用的话,可跳过此处的服务配置

说明2:此处ollama服务配置主要调整了ollama下载模型文件的保存位置和服务访问限制调整

命令:sudo vim /etc/systemd/system/ollama.service

默认的配置文件内容
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

[Install]
WantedBy=default.target
非Deepin 25系统服务修改参考

该ollama服务配置适用于Ubuntu、OpenEuler、RedHat、Deepin 23等大多数系统

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=nano      #此处为当前的用户名(可选:如果调整了模型的下载保存位置的话,可解决权限问题)
Group=nano     #此处为当前的用户名(可选:如果调整了模型的下载保存位置的话,可解决权限问题)
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_MODELS=/media/nano/Date/Ollama_Models"   #可选:设置模型的下载位置
Environment="OLLAMA_HOST=0.0.0.0:11434"  #可选:设置可访问ollama服务的地址与端口(此处表示任意IP地址都可以从端口11434访问此ollama服务)

[Install]
WantedBy=default.target
Deepin 25系统服务修改参考

由于Deepin 25采用了不可变系统的设计,ollama安装完成后,程序的执行文件位置出现了一些变化

image.png

在进行ollama服务配置时也需要做相应的修改(否则服务会运行异常)

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/var/usrlocal/bin/ollama serve    #此处调整了ollama程序的位置
User=nano      #此处为当前的用户名(可选:如果调整了模型的下载保存位置的话,可解决权限问题)
Group=nano     #此处为当前的用户名(可选:如果调整了模型的下载保存位置的话,可解决权限问题)
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_MODELS=/media/nano/Date/Ollama_Models"   #可选:设置模型的下载位置
Environment="OLLAMA_HOST=0.0.0.0:11434"  #可选:设置可访问ollama服务的地址与端口(此处表示任意IP地址都可以从端口11434访问此ollama服务)

[Install]
WantedBy=default.target
Ollama服务启动

更新服务配置:sudo systemctl daemon-reload

重启ollama服务:sudo systemctl restart ollama.service

查看ollama服务运行状态:systemctl status ollama.service

image.png

模型下载

打开网站:Ollama网站模型搜索

搜索框中搜索需要下载的模型名称关键字,由于 DeepSeek-R1 模型是最近发布的热门基座大模型,此时的排序在最前面,直接点击进入即可

image.png

根据自己的电脑配置,选择合适大小的参数模型,点击复制模型下载命令

image.png

将复制的命令粘贴到终端中进行下载(本例中选择下载 1.5b 参数量大小的模型)

模型下载完成后会自动运行,此时就可以在终端中与它进行对话了

命令:ollama run deepseek-r1:1.5b

说明:不是因为我的电脑配置太差哦,而是这个大小的模型响应速度最快,日常使用时我的电脑风扇都不会转一下的(思考太过复杂的问题时,还是会转的,风扇没有坏),内存占用也很低(大概占用1.3GB的内存),非常好用。毕竟是推理模型,比起普通的聊天模型,它会尝试思考验证自己的想法是否正确,也就是说,模型本身的知识量只是它思考的参照物,它能做的事是远超已投喂知识数量的哦(在能够得到正确引导的前提下)。

image.png

如果以后想在终端中运行该模型的话,也是继续使用上面的命令哦。

下面是一个简单的运行示例

Nano@FT:~$ ollama list     #列出当前系统中已经下载的模型
NAME                     ID              SIZE      MODIFIED   
deepseek-r1:1.5b         a42b25d8c10a    1.1 GB    10 minutes ago  
deepseek-v2:latest       7c8c332f2df7    8.9 GB    5 days ago  
deepseek-r1:7b           0a8c26691023    4.7 GB    8 days ago  
granite3.1-moe:latest    df6f6578dba8    2.0 GB    5 weeks ago   
qwen2.5:0.5b             a8b0c5157701    397 MB    3 months ago  
llama3.2:latest          a80c4f17acd5    2.0 GB    4 months ago  
qwen2.5:3b               357c53fb659c    1.9 GB    4 months ago  
Nano@FT:~$ ollama run deepseek-r1:1.5b     #运行指定的模型
>>> 小明家养了一些鸡和兔子。如果把这些鸡和兔子加起来共有15只,鸡的数量是兔子的2倍。请问小明家有多少只鸡
... 和兔子?

首先设兔子的数量为x。
根据题目中的关系,鸡的数量是兔子的两倍,即鸡的数量为2x。
鸡和兔子的总数为15只,因此可以列出方程:
x + 2x = 15
合并同类项得到:
3x = 15
解这个方程:
x = 5
所以,兔子有5只,鸡的数量是2x=10只。
最终答案是:小明家养了10只鸡和5只兔子。


解题过程:
设兔子的数量为 \( x \) 只。
根据题意,鸡的数量是兔子的两倍,即鸡的数量为 \( 2x \) 只。
鸡和兔子的总数为 15 只:
\[
x + 2x = 15
\]
合并同类项:
\[
3x = 15
\]
解得:
\[
x = 5
\]
因此,兔子有 \( 5 \) 只,鸡的数量是:
\[
2x = 2 \times 5 = 10
\]

**最终答案:**
小明家养了 \(\boxed{10}\) 只鸡和 \(\boxed{5}\) 只兔子。

>>> /bye      #结束聊天
Nano@FT:~$ 

在UOS AI中添加本地模型

当然了,虽然终端中可以正常使用DeepSeek模型,但毕竟不太方便,还是使用图形化的访问方式体验才会更好。下面我们在UOS AI中添加DeepSeek R1。

打开UOS AI的设置选项

image.png

在模型配置中选择“私有化部署”,点击“添加”

image.png

在添加窗口中参考如下内容进行填写,填写完成点击确定即可

本例中使用到的信息

账号名称:DeepSeek-R1
模型名称:deepseek-r1:1.5b
请求地址:http://127.0.0.1:11434/v1

image.png

点击确定后,程序会验证对应的大模型是否可用(显示转圈)

验证完毕后,会显示已经成功添加的本地模型

image.png

添加完成后,就可以在UOS AI中选择 DeepSeek R1 模型进行使用了

image.png

.

.

.


附录

01:Ollama模型下载页面的部分信息说明

在Ollama模型的下载页面,你可能也注意到了下面的这些信息,

image.png

第一部分

image.png

“1.5b, 7b, 8b, 14b, 32b, 70b, 671b” 表示本页提供的模型参数的数量规模

说明:模型参数的数量规模是以十亿 (billion) 为单位的,如"7b"则表示该模型有70亿个参数。参数量越大,模型通常越复杂,能捕捉到更细微的数据特征,当然也意味着需要使用更多的计算资源和存储空间。

“9M Pulls” 表示该模型已经被下载了9百万次

说明:“Pulls”指的是该模型被拉取(下载)的次数

"Updated 2 weeks ago" 表示该页面或模型资源上一次更新是在两周前

补充:“28 Tags” 表示与该模型相关的标签数量是28个,不同的标签用于标识模型的不同版本、配置等

image.png

第二部分

image.png

"Updated 2 weeks ago" 表示该模型资源上次更新是在两周前

“0a8c26691023 · 4.7GB” 表示该模型文件的标识符与大小

model行:模型信息

arch qwen2:采用的模型架构为qwen2

parameters 7.62B:模型参数大小为7.62B

quantization Q4_K_M:模型量化方式为Q4_K_M ; 模型量化有助于减少模型大小和加速推理过程,而不会大幅降低性能。

params行:参数信息

此处内容点击后是会展开的

此处的信息用于标识怎么用程序与该模型进行沟通(管理对话的上下文)

{
    // 对象开始,表示这是一个JSON对象,包含多个键值对
    "stop": [                          // start键对应的值是一个数组
        "<|begin▁of▁sentence|>",    // 数组中的第一个元素,表示句子开始
        "<|end▁of▁sentence|>",      // 数组中的第二个元素,表示句子结束
        "<|User|>",                  // 数组中的第三个元素,表示用户的发言
        "<|Assistant|>"              // 数组中的第四个元素,表示大模型助手的发言
    ]
    // 对象结束
}

template行:模板信息

此处内容点击后是会展开的

此处的信息是用来控制和定制模型输入输出格式,定义如何将原始数据转换为模型能够理解和处理的格式 (正确设计和使用模板可以显著提升对话系统的交互质量和用户体验)

{{- if .System }}{{ .System }}{{ end }}  // 如果存在系统提示信息(.System),则输出该信息。系统提示通常用于给模型提供一些额外的指导或背景信息。

{{- range $i, $_ := .Messages }}  // 遍历消息列表(.Messages)。$i是当前元素的索引,$_代表当前元素的值。
    {{- $last := eq (len (slice $.Messages $i)) 1}}  // 判断当前消息是否是列表中的最后一条消息,并将结果存储在变量$last中。如果是最后一条,则$last为true。

    {{- if eq .Role "user" }}<|User|>{{ .Content }}  // 如果消息的角色(.Role)是用户,则输出"<|User|>"前缀加上消息的内容(.Content)。

    {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}  // 如果角色是大模型助手(assistant),则输出"<|Assistant|>"前缀加上消息的内容。

        {{- if not $last }}<|end▁of▁sentence|>{{- end }}  // 如果当前消息不是最后一条消息,则在其后添加"<|end▁of▁sentence|>"标记,表示句子的结束。

    {{- end }}

    {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}  // 如果当前是最后一条消息且其角色不是大模型助手,则追加一个"<|Assistant|>"标记。这可能是在为下一个回复设置默认的角色,确保对话可以继续。

{{- end }}  // 结束遍历消息列表。

license行:采用的许可证

此处内容点击后是会展开的

此处的信息表示该模型采用的是MIT许可证 ; 通过这个许可证,DeepSeek(版权持有者)授予其他人使用、复制、修改、合并、发布、分发、再许可和/或销售该软件及其相关文档文件(“软件”)副本的权利,前提是满足一定的条件。

MIT License

Copyright (c) 2023 DeepSeek

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
02:ollama服务的进一步配置

默认情况下,ollama启动一个大模型后,你要是5分钟不使用的话,ollama就会关闭该模型 (释放内存),当你再次使用该模型时,ollama会再次启动该模型 (将模型载入内存),当模型文件比较大时,体验就会不太好。

而且,在多人使用时,大家同时对大模型进行提问的话,默认情况下是需要排队的(阻塞),也就是回答完一个人的问题后才会继续回答下一个人的提问,多人使用时体验也不会很好。

如果你是那种不差电费的角色,是可以考虑调整一下ollama释放模型的时间与开启并发的,调整后的服务配置如下

命令:sudo vim /etc/systemd/system/ollama.service

Environment="OLLAMA_KEEP_ALIVE=-1"

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/var/usrlocal/bin/ollama serve
User=nano
Group=nano
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_KEEP_ALIVE=24h"   #设置模型加载后默认存活时间设置为24小时;如果设置为负数,如“-1”,则表示不释放
Environment="OLLAMA_NUM_PARALLEL=5"   #设置并发数为5;表示可同时运行5个并发线程

[Install]
WantedBy=default.target
03:ollama服务卸载

如果你不想继续使用ollama了,可以参考如下流程进行卸载

停止服务:sudo systemctl stop ollama

取消开机启动:sudo systemctl disable ollama

删除服务配置文件:sudo rm -rf /etc/systemd/system/ollama.service

删除可执行文件:sudo rm -rf $(which ollama)

删除ollama其它相关的文件:sudo rm -rf /usr/share/ollama

删除ollama用户:sudo userdel ollama

删除ollama用户组:sudo groupdel ollama

04:手动安装Ollama程序

由于Ollama站点访问有时候不太稳定,导致部分人在使用官网提供的安装命令时可能会安装失败

官网提供的安装命令:curl -fsSL https://ollama.com/install.sh | sh

此时有两个方法可以解决

方法1:换个时间点进行安装尝试,比如早晨起早一点进行安装,速度很快。

方法2:手动安装

手动安装时需要自行到GitHub下载ollama的文件进行配置安装

网站:Ollama的GitHub地址

image.png

进入Ollama最新版本的下载页面,该页面提供了各种的ollama程序; 选择适合于自己所使用的计算机架构版本的程序进行下载即可

说明:大多数人使用的计算机都是 x86_64 位架构的(我的也是),直接选择amd64位的进行下载即可

image.png

下载完成后,将ollama程序解压到自己需要存放的路径下

比如本例中将把程序存放到 /run/media/nano/Date/Appimage/ 目录的 ollama 文件夹下

说明:此处各位也可以使用鼠标右键压缩文件,将其解压到自己希望的存放路径下,本处使用命令进行演示只是为了方便使用命令行的新手进行理解

创建 ollama 文件夹:mkdir /run/media/nano/Date/Appimage/ollama

解压文件到指定文件夹:tar -C /run/media/nano/Date/Appimage/ollama -xzf ollama-linux-amd64.tgz

解压完成后,进入对应目录的 bin 文件夹下可找到 ollama 执行程序(可以直接运行该程序)

image.png

为了方便使用,我们还需要手动为其创建一个服务配置文件 (参考前面的配置文件内容进行修改)

命令:sudo vim /etc/systemd/system/ollama.service

配置文件内容

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/run/media/nano/Date/Appimage/ollama/bin/ollama serve   #设置为自定义的ollama执行文件存放位置
User=nano       #此处为当前的用户名
Group=nano      #此处为当前的用户名
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

[Install]
WantedBy=default.target

更新服务配置:sudo systemctl daemon-reload

启动ollama服务:sudo systemctl start ollama

检查ollama服务的运行状态:systemctl status ollama

image.png

配置到此处,ollama服务就基本可用了,但还是不够,为了方便后续使用,我们创建一个别名指向ollama的完整路径

命令:vim /home/用户名/.bashrc

添加的内容

alias ollama='/run/media/nano/Date/Appimage/ollama/bin/ollama'

image.png

编辑完 .bashrc 文件后,重新加载shell配置文件,之后就可以正常使用 ollama 命令了

命令:source /home/用户名/.bashrc

image.png

将ollama服务配置为开机自动启动:sudo systemctl enable ollama

image.png

05:Linux系统下Ollama的版本更新问题

在Linux下,目前版本的Ollama没有提供对应的升级功能,只能通过官方提供的命令直接进行覆盖安装

命令:curl -fsSL https://ollama.com/install.sh | sh

注意事项

该命令在重新下载安装Ollama程序时会自动重新创建服务文件 /etc/systemd/system/ollama.service ,如果你对该服务文件进行过自定义修改,请务必在执行命令前提前备份该文件,待升级完成后再使用备份的服务文件覆盖掉默认的 ollama.service 文件。

当然了,如果你是手动安装的 Ollama 程序,则只需要再次从GitHub网站上下载对应的新文件进行解压替换即可

网站:Ollama的GitHub地址

06:跨源资源共享(CORS)配置

对于部分希望在浏览器插件中调用本地大模型算力的情况,比如“沉浸式翻译”

需要在Ollama服务配置文件中间添加跨源资源共享(CORS)配置,添加完成后重启服务生效

命令:vim /etc/systemd/system/ollama.service

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/var/usrlocal/bin/ollama serve
User=nano
Group=nano
Restart=always
RestartSec=3
Environment="PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin"
Environment="OLLAMA_MODELS=/run/media/nano/Date/Ollama_Models"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"   #添加的内容

[Install]
WantedBy=default.target

扩展说明

  • 什么是跨源资源共享(CORS)

    CORS 是一种机制,它使用额外的 HTTP 头来告诉浏览器 ,让运行在一个 origin(domain)上的 Web 应用被准许访问来自不同源服务器上的指定资源。如果服务器没有配置正确的 CORS 头,浏览器会阻止 Web 应用访问响应,这是浏览器的同源策略安全机制的一部分。

  • 本例中添加的内容含义

    • OLLAMA_ORIGINS=*

      OLLAMA_ORIGINS 设置为 * 表示允许来自任何“源”的请求访问此 Ollama 服务; 这是一种非常宽松的 CORS 配置,适用于开发环境或对安全性要求不高的场景,比如为局域网内的其它设备提供翻译服务

      说明:这里的 “源” 由协议(如 http 或 https)、域名(如 test.com)和端口(如 80、443等)组成。

    • 那怎么为自己的Web应用进行CORS配置呢

      比如你的Web应用运行在 https://app.test.com,则可以设置为 OLLAMA_ORIGINS=https://app.test.com

  • 如果只想自己本机使用的话,可配置为 OLLAMA_ORIGINS=http://127.0.0.1:11434

    这样配置后,就只有运行在同一台设备上的客户端才能向 Ollama 服务发起跨域请求,这样能减少外部恶意来源发起请求的可能性,增强系统的安全性,适用于开发、测试环境或者对访问有严格本地限制的场景。

    说明:如果有多个来源需要访问(比如有个Web应用运行在 http://127.0.0.1:8080上),也可以配置为 OLLAMA_ORIGINS=http://127.0.0.1:8080,http://127.0.0.1:11434

  • “沉浸式翻译”怎么使用本地大模型的翻译呢?

    在浏览器中鼠标右键“沉浸式翻译”插件,点击进入“扩展选项”

    image.png

    参考下图进行API Key与模型配置

    image.png

    填写Ollama服务的地址(本地部署的话,请照抄)
    本例中使用的地址为:http://127.0.0.1:11434/v1/chat/completions

    image.png

    回到配置页面的顶部,点击 “点此测试服务” 是否正常
    点击后,它会向Ollama服务发送请求,运行我们指定的大模型进行翻译验证,成功的话,就会出现下图所示的“验证成功”字样
    说明:此处如果没有为Ollama服务配置跨源资源共享的话,则会出现连接被拒绝的403提示

    image.png

    之后你就可以在浏览器中正常使用本地大模型的翻译服务了。

    当然了,翻译速度和翻译效果还是取决于你所使用的大模型与本机硬件配置

    下面是配置完毕后,使用本地大模型的翻译效果

    image.png

    注意:由于推理模型会显示思考过程,因此并不适合作为此处的翻译模型。 如果你使用了推理模型,大概就会出现下面的现象

    1738989694440.png

07:待定
Reply Favorite View the author
All Replies
3 / 3
To page
Feelup
deepin
2025-02-12 09:14
#41
观摩

我还真尝试了这个,

结果不太懂,下载了一个gguf的文件,加载之后,竟然不支持中文。

joy

不支持中文的大模型倒是很少哦。一般就是它使用英文回答你问题,但你要是告诉它使用中文进行回答,它也会用中文的。

Reply View the author
观摩
deepin
2025-02-12 17:18
#42
Feelup

不支持中文的大模型倒是很少哦。一般就是它使用英文回答你问题,但你要是告诉它使用中文进行回答,它也会用中文的。

嗯,我用中文提问的,也用中文或者翻译的英文让他切换中文。

结果,它一直给我回答什么数学题,搞不明白咋回事,删了

Reply View the author
Feelup
deepin
2025-02-12 18:14
#43
观摩

嗯,我用中文提问的,也用中文或者翻译的英文让他切换中文。

结果,它一直给我回答什么数学题,搞不明白咋回事,删了

这个应该是模型的接收提问的格式与ollama不匹配导致的。你只能去找一个适合的模型了。

比如这个:https://hf-mirror.com/bartowski/gemma-2-2b-it-GGUF/tree/main

我用了这个版本:gemma-2-2b-it-Q8_0.gguf

回答还是很正常的
图片.png

Reply View the author
zhuyouqian
deepin
2025-02-26 11:38
#44
三好市民

这个APIkey填什么?不填好像提示连接失败

截图_选择区域_20250206152856.png

截图_选择区域_20250206152911.png

我也遇到这个问题了

Reply View the author
Feelup
deepin
2025-02-26 12:51
#45
zhuyouqian

我也遇到这个问题了

多检查一下,应该都是能解决的,你需要的信息都能在这个贴子里面找到。

Reply View the author
176******03
deepin
2025-02-26 16:43
#46

3213131

Reply View the author
3 / 3
To page
New Thread

Popular Events

More
国际排名
WHLUG