☰
银河麒麟V10离线部署DeepSeek:Ollama与GGUF完整指南
2026/10/14 16:11:09 网站建设 项目流程

简介:面向银河麒麟V10操作系统的运维与AI应用技术人员,这份离线部署指南专门解决无互联网或网络受限环境下的deepseek大模型落地问题。内容覆盖硬件环境确认、ollama服务安装、系统服务与开机自启配置,以及通过OLLAMA_MODELS、OLLAMA_HOST等环境变量管理模型路径和远程访问规则;同时详细说明deepseek-r1模型如何从同架构联网机器下载、导出为gguf文件后再离线导入本地库,包含拉取模型、查看modelfile、定位真实模型文件等完整流程,并给出远程访问模型的网络配置方法。包体为单个docx文档,共1个文件,压缩包大小2.69MB,文档以分步命令、配置文件示例和运行状态验证为主,便于读者直接参照执行并排查常见问题。已有5524人学习下载。掌握该指南后,读者可在Kylin V10上完成ollama后台托管、chatbox客户端安装与桌面快捷方式创建,最终在国产化离线环境中获得可交互的AI问答服务。

1. 银河麒麟V10上离线部署deepseek:先看清链路再动手

银河麒麟V10的离线环境里部署deepseek,不是装个Python包就能完事的事。没有互联网,pip和HuggingFace都指望不上;机器又没有独立显卡,CPU推理才是常态。这时候最实用的路线是:用ollama把大模型服务跑起来,通过GGUF格式的蒸馏模型做推理,再用chatbox这类图形客户端搭出对话界面。这套方案的妙处在于把一次性下载与日常使用彻底分离——模型只导入一次,之后整个系统完全离线运行。适合在受限网络环境里部署AI模型的技术人员,也适合在ARM64国产处理器平台上做验证的测试人员。下面把整个部署过程拆成可复现的步骤。

2. 离线部署前置:架构判断、目录规划与物料清单三件套

动手前别急着解压压缩包。先把系统架构、安装路径、依赖文件这三件事确认清楚,后面每一步都能少走弯路。这个环节花十分钟,能省下后面两小时的排错时间。

2.1 确认CPU架构和系统版本:先跑这三条命令

uname -m cat /etc/os-release lscpu | grep -E "Architecture|CPU"

uname -m返回的是机器架构,aarch64就是ARM64,x86_64就是x86。这个结果直接决定你下载哪个版本的ollama压缩包和chatbox安装包,两条路不能混。cat /etc/os-release能确认系统是不是银河麒麟V10的SP1版本,构建号类似2303,不同构建号之间zlib等基础库版本会有差异。lscpu里能看到CPU型号,确认是飞腾还是鲲鹏平台,这一步对后面定位兼容性问题很有用。

架构判断出错是离线部署里最常见的翻车点之一。我见过有人把x86机器上下载的包硬拷到ARM机器上,解压能成功,一执行就报Exec format error,连服务都起不来。所以这三条命令的结果,请先记在纸上再继续。

2.2 安装目录规划:把二进制和模型分开

sudo mkdir -p /opt/deepseek/ollama sudo mkdir -p /opt/deepseek/ollama/models cd /opt/deepseek

我一般把ollama的安装目录放在/opt/deepseek/ollama,模型文件放在/opt/deepseek/ollama/models,chatbox客户端放在/opt/deepseek下。这样规划有几个实际好处:/opt目录是第三方软件的约定安装区,不会混进系统目录;ollama二进制和模型分离后,备份或迁移时只需要打包models目录;权限也容易控制,把/opt/deepseek整体授权给ollama用户,服务运行时不会出现写权限不足的玄学问题。

不要图省事把模型放在普通用户home目录下。home目录经常因为用户切换、系统清理被挪动,而且如果服务是用独立用户跑的,home目录不一致会导致模型路径失效。

2.3 物料清单核对:四类文件缺一不可

离线部署最怕的是装到一半发现少个包。建议动手前先按这个表格核对一遍:

物料文件名/内容用途是否必需
ollama服务端ollama-linux-arm64.tgz(0.5.7)提供大模型推理服务必需
chatbox客户端arm64版本AppImage图形化对话界面必需
zlib1g-devarm64的deb包AppImage运行依赖按需,报错才装
deepseek模型deepseek-r1:14b,约9.0GB离线推理模型必需

注意最后一项模型文件不是去某个网站直接下载的。它需要在一台同架构、能联网的Linux机器上,通过ollama pull拉取,再提取出GGUF文件后拷贝进离线机。这个流程会在第4章完整展开。

3. 安装ollama服务:从tar解压到systemd托管,关键参数逐个过

ollama在这套方案里承担着模型推理服务的角色,相当于一个本地大模型HTTP服务。安装本身不复杂,真正容易出错的是用户权限、服务文件和环境变量三件事。这一章把每一步拆开讲清楚。

3.1 解压ollama到指定目录:tar的-C参数与文件归属

cd /opt/deepseek sudo tar -C /opt/deepseek/ollama -xzf ollama-linux-arm64.tgz ls -l /opt/deepseek/ollama/bin

tar的-C参数是先在命令行里切换到目标目录再解压,这样ollama的bin目录会直接落在/opt/deepseek/ollama/bin下。解压完成后看一眼bin目录,确认ollama可执行文件真实存在,权限是-rwxr-xr-x这类。这一步如果发现文件缺失,八成是安装包下载不完整,需要重新拷贝。

3.2 创建ollama最小权限用户:为什么要用专用账户

sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama sudo usermod -a -G ollama $(whoami)

-r表示创建系统账户,-s /bin/false禁止该用户登录shell,-U同时创建同名用户组,-m -d指定home目录。这样即使服务被入侵,攻击者也拿不到交互shell。第二行命令把你当前用户加入ollama组,目的是方便调试时直接读取模型目录文件,不需要切root。如果是在生产环境,第二行可以省略。

为什么不用root直接跑?root跑ollama会带来两个实际麻烦:模型目录和日志文件权限会归属到root,后续普通用户想查看备份需要sudo;一旦服务有远程漏洞,攻击者直接拿root权限。用专用账户跑服务属于最基本的加固习惯。

3.3 编写ollama.service文件:systemd托管的核心配置

[Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/opt/deepseek/ollama/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 EnvironmentFile=/opt/deepseek/ollama/ollama.conf [Install] WantedBy=default.target

保存路径是/etc/systemd/system/ollama.service。ExecStart指定服务启动命令,ollama serve是ollama的服务模式子命令。Restart=always让服务崩溃后自动拉起,配合RestartSec=3避免频繁重启。EnvironmentFile指向环境变量文件,这是ollama能找到模型目录和正确监听地址的关键。After=network-online.target保证网络就绪后再启动,防止网卡慢导致绑定端口失败。

3.4 配置ollama.conf:四个环境变量必须理解到位

OLLAMA_HOME=/opt/deepseek/ollama OLLAMA_MODELS="/opt/deepseek/ollama/models" OLLAMA_HOST="0.0.0.0" OLLAMA_ORIGINS="*" PATH=$OLLAMA_HOME/bin:$PATH

保存路径是/opt/deepseek/ollama/ollama.conf。这里每个变量都有明确职责:

变量值作用
OLLAMA_HOME/opt/deepseek/ollamaollama工作目录,日志和临时文件会放这里
OLLAMA_MODELS/opt/deepseek/ollama/models模型文件实际存放位置
OLLAMA_HOST0.0.0.0监听所有网卡,允许局域网其他机器访问
OLLAMA_ORIGINS*允许任意来源的网页或客户端调用API
PATH$OLLAMA_HOME/bin:$PATH让终端直接识别ollama命令,不用写全路径

OLLAMA_MODELS是这里最容易忽略的。如果不指定,模型会默认写到~/.ollama/models,服务用ollama用户跑,路径就会落在/usr/share/ollama/.ollama/models,跟你的规划目录完全对不上。OLLAMA_HOST默认是127.0.0.1,只允许本机访问,要远程连接就必须改成0.0.0.0。

3.5 授权、启动与开机自启:systemctl三条命令的顺序

sudo chown -R ollama:ollama /opt/deepseek/ollama sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama sudo systemctl status ollama

chown把整个目录授权给ollama用户,这一步不做,服务启动后写不了模型目录会直接报错。daemon-reload是必须的,新建或修改service文件后不重载,systemd用的还是旧配置。顺序上先enable再start,这样重启系统后服务会自动拉起。status命令看到Active: active (running)就说明服务已经起来了,再往下能看到Listening相关的日志。

4. 离线导入模型并接通chatbox:GGUF提取、modelfile重建与远程访问

这一章是整个部署的核心。ollama服务本身只是一个空壳,没有模型它就是空转。而离线环境拿不到模型,必须在联网机器上“制造”出模型文件再搬进来。这一步有明确的套路。

4.1 在同架构联网机上下载模型:架构一致性不能妥协

ollama pull deepseek-r1:14b ollama list

这条命令必须在与离线机同架构的Linux机器上执行。ARM64的离线机,联网机也必须是ARM64。为什么这么严格?因为ollama在拉取模型时,会按当前平台选择对应的算子实现,x86机器拉下来的模型分片在ARM平台上推理时可能遇到不兼容的指令。这是ollama的机制决定的,不是模型文件名能看出来的。

ollama list确认模型拉取成功,deepseek-r1:14b的大小应该在9.0GB左右。如果列表为空或者大小明显偏小,说明拉取过程被中断过,重新pull一次。

4.2 提取modelfile并定位GGUF文件:ollama show是关键一步

ollama show --modelfile deepseek-r1:14b > modelfile.txt head -10 modelfile.txt

ollama show --modelfile把模型的完整描述文件导出到modelfile.txt。这个文件里记录了三样关键信息:FROM后面的GGUF文件路径、模型的对话模板TEMPLATE、采样参数如temperature和top_p。其中FROM行大约在文件的第5行,指向的是ollama缓存目录里的GGUF文件。

把FROM指向的那个文件完整复制出来,重命名为deepseek-r1-14b.gguf。连同整个modelfile.txt一起准备拷贝。这里有个细节:modelfile里除了FROM行之外的TEMPLATE和PARAMETER内容,决定了导入后模型的行为风格,一行都不能丢。

cp /path/to/original.gguf deepseek-r1-14b.gguf

这样联网机上需要准备的东西就齐了:一个modelfile.txt,一个deepseek-r1-14b.gguf。两个文件通过U盘或内网传输到离线机,放到同一个目录下,比如/opt/deepseek。

4.3 离线机导入模型:ollama create的完整日志解读

cd /opt/deepseek ollama create deepseek-r1:14b -f modelfile.txt

-f参数指定modelfile路径,ollama会读取文件里的内容重建模型。导入成功后会看到一串日志,含义分别是:

  • gathering model components:读取modelfile,收集模型组件
  • copying file sha256:6e9f...:把GGUF文件复制进模型层
  • parsing GGUF:解析并校验GGUF格式,损坏的文件会在这步报错
  • creating new layer sha256:...:为TEMPLATE、PARAMETER等元数据创建独立层
  • writing manifest success:写入模型清单,导入完成

导入完成后模型文件由ollama自己管理,路径在/opt/deepseek/ollama/models下。不要手动去拷模型进models目录,那样ollama识别不到,必须走ollama create。

4.4 验证模型运行:ollama list与ollama run的交互测试

ollama list ollama run deepseek-r1:14b

ollama list显示已导入的模型列表,能看到deepseek-r1:14b和ID、大小、修改时间。ollama run进入交互式对话框,第一次运行会把模型载入内存,CPU机器上可能要等几十秒,这是正常的。输入一句测试问题,能正常返回内容就说明推理链路通了。退出交互模式输入/bye即可。

这一步是大模型的“点火测试”,我一般会故意输入几个不同类型的问题,确认不是只会复读模板。另外可以开一个新终端跑ollama ps,确认模型已常驻内存。

4.5 配置deepseek.service:开机后自动预加载模型

[Unit] Description=DeepSeek Service After=ollama.service [Service] ExecStart=/opt/deepseek/ollama/bin/ollama run deepseek-r1:14b ExecStop=/opt/deepseek/ollama/bin/ollama stop deepseek-r1:14b User=ollama Group=ollama Restart=always RestartSec=3 EnvironmentFile=/opt/deepseek/ollama/ollama.conf [Install] WantedBy=default.target

保存为/etc/systemd/system/deepseek.service。这个服务的核心价值是开机后自动把模型预加载进内存,避免第一次对话等十几秒的冷启动。ExecStart用的是ollama run,让进程保持在前台运行;ExecStop用ollama stop优雅退出,释放显存和内存。After=ollama.service确保先启动ollama再加载模型。

sudo systemctl daemon-reload sudo systemctl enable deepseek

这里注意deepseek服务不需要手动start,直接enable后随系统启动就好。手动start会阻塞在交互模式里,终端不太好退出。

4.6 安装chatbox并配置远程访问:让模型有“脸”可用

chatbox是AppImage格式,拷到/opt/deepseek目录后先加执行权限:

chmod +x /opt/deepseek/Chatbox-1.9.8-arm64.AppImage ./Chatbox-1.9.8-arm64.AppImage

如果双击或命令行执行报错,提示缺少库,多半是zlib依赖问题,先安装指定的deb包:

sudo dpkg -i zlib1g-dev_1%3a1.2.11.dfsg-2kylin1.5k0.2_arm64.deb

为了美观和方便,可以在桌面创建快捷方式:

[Desktop Entry] Version=1.0 Name=Chatbox Comment=DeepSeek Chat Client Exec=/opt/deepseek/Chatbox-1.9.8-arm64.AppImage Icon=/opt/deepseek/Chatbox.png Terminal=false Type=Application Categories=Utility;Application;

保存为Chatbox.desktop后执行chmod +x Chatbox.desktop,双击即可打开。注意Exec必须是AppImage的绝对路径,Icon指向的png文件必须真实存在。

打开chatbox后,在设置里选择Ollama API类型,API域名填http://127.0.0.1:11434,模型名填deepseek-r1:14b。新建对话就能直接使用。远程访问时,把API域名里的IP换成离线机的主机IP即可,前提是OLLAMA_HOST已经改为0.0.0.0。

5. 避坑排查:离线部署最容易翻车的五个位置

这一章集中写我在复现这套部署过程时遇到的典型问题,每一条都是“现象-原因-解决”的结构,可以在排错时对照查看。

5.1 systemctl status显示failed:ExecStart路径写错的排查套路

现象:执行systemctl status ollama,服务状态是failed,日志里提示Failed at step EXEC spawning /opt/deepseek/ollama/bin/ollama: No such file or directory。

原因:service文件里的ExecStart路径与实际安装路径不一致。常见是把/opt/deepseek/ollama/bin/ollama写成了/opt/deepseek/ollama/ollama,或者多写了一个斜杠。

解决:先跑systemctl cat ollama看实际生效的配置,再直接到路径下手动执行/opt/deepseek/ollama/bin/ollama serve。手动执行能跑通,说明问题只出在路径或环境变量;手动执行也报错,说明安装包解压不完整,重新解压。

5.2 sudo source /etc/profile报错:环境变量不是这样刷新的

现象:执行sudo source /etc/profile,终端报sudo: source: command not found。

原因:source是shell内建命令,不是可执行文件,sudo无法直接调用它。这个操作原本想刷新环境变量,但方法用错了。

解决:退出当前终端重新登录,或者执行source /etc/profile(不需要sudo)。刷新后验证一下:which ollama能输出/opt/deepseek/ollama/bin/ollama就说明PATH生效了。如果不想全局生效,也可以只在当前终端的.bashrc里加一行export PATH=/opt/deepseek/ollama/bin:$PATH。

5.3 ollama create找不到FROM指向的文件:modelfile里的路径是死的

现象:在离线机上执行ollama create deepseek-r1:14b -f modelfile.txt,报错提示FROM指定的文件不存在。

原因:modelfile.txt是在联网机上生成的,里面的FROM行写的是联网机上的绝对路径,比如/home/user/.ollama/models/blobs/sha256-xxx。拷贝到离线机后这个路径当然不存在。

解决:把modelfile.txt和deepseek-r1-14b.gguf放在同一个目录,然后把modelfile.txt里FROM那一行改成相对路径:

FROM ./deepseek-r1-14b.gguf

改完再执行ollama create,就能正常读取同目录下的GGUF文件。这个坑非常隐蔽,我第一次离线导入时卡了半小时才反应过来。

5.4 双击AppImage没反应:执行权限和依赖一起查

现象:chatbox的AppImage文件双击后没反应,或者图标一闪而过。

原因:两类可能性。一是文件没有执行权限,AppImage格式要求chmod +x后才能运行;二是系统缺少依赖库,麒麟系统里最常见的是zlib1g-dev缺失。

解决:先在终端运行./Chatbox-1.9.8-arm64.AppImage,看控制台输出什么。如果是Permission denied就补执行权限;如果是error while loading shared libraries就安装对应的deb包。装完依赖再双击新建的.desktop图标即可。

5.5 局域网客户端连不上模型:改完OLLAMA_HOST必须重启服务

现象:远程主机上的chatbox配置了http://192.168.x.x:11434,一直提示连接失败,但本机访问127.0.0.1:11434正常。

原因:两个高概率原因。一是env文件里的OLLAMA_HOST改成了0.0.0.0,但改完后没有重启ollama服务,服务还在用旧的127.0.0.1监听;二是系统防火墙放行了80端口但没放行11434端口。

解决:先跑systemctl restart ollama,再用ss -lntp | grep 11434确认监听地址是0.0.0.0:11434。然后从远程机器测试:

curl http://离线机IP:11434/api/tags

能返回JSON格式的模型列表,说明网络链路通了。如果curl超时,检查防火墙规则,放行TCP 11434端口。

6. 上线前的验证闭环:每次部署完我都会跑一遍的检查清单

部署到这里整个链路已经完整,但“装完”不等于“能用”。我每次在离线机上部署完这套环境,都会强制自己走一遍验证闭环,五分钟确认所有环节都是通的,而不是等到业务方来问的时候才发现某个服务已经悄悄挂了。

6.1 本地服务验证

systemctl status ollama --no-pager | head -5 systemctl status deepseek --no-pager | head -5 curl -s http://127.0.0.1:11434/api/tags ollama ps

前面两条命令确认ollama服务和模型预加载服务都在运行状态。第三条curl命令直接请求API,返回的JSON里应该能看到deepseek-r1:14b的模型信息,这比任何状态输出都真实。ollama ps能确认模型已经常驻内存,如果这里什么都没有,说明deepseek服务没把模型拉起来。

6.2 远程访问验证

从另一台同网段机器执行:

curl -s http://离线机IP:11434/api/tags

这一步验证的是OLLAMA_HOST配置和防火墙放行是否同时生效。能返回模型列表,远程chatbox才有意义。

6.3 日常使用习惯

模型要换版本时,先ollama stop再ollama run切换;日志排查用journalctl -u ollama -f实时跟踪;模型备份直接打包/opt/deepseek/ollama/models目录,恢复时解包后重新执行一次ollama create即可。这套习惯不需要额外工具,但能避免很多事后补救的手忙脚乱。

从那以后我每次部署完离线环境,都强制自己跑一遍上面的验证闭环,确认API有响应、模型已驻留、远程能访问,才敢对外说“部署完成”。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询