news 2026/10/20 17:52:48

银河麒麟V10离线部署DeepSeek:ARM无显卡机器跑14B模型全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
银河麒麟V10离线部署DeepSeek:ARM无显卡机器跑14B模型全攻略

简介:面向银河麒麟V10操作系统用户,提供一套在离线环境下部署deepseek大语言模型服务的完整操作指南。内容涵盖硬件与系统环境检查、ollama安装及系统服务配置、环境变量与模型存储路径设置、deepseek-r1模型离线获取与导入方法,以及chatbox客户端安装、桌面快捷方式创建和交互配置,并附有远程访问模型服务的说明。资源为docx格式文档(1个文件,压缩包约2.69MB),文字步骤清晰,适合在无互联网连接的国产化环境中需要本地部署AI服务的运维与技术人员参考。当前已有5532人学习使用,文档中结合了作者在飞腾FT-2000处理器上的实际部署经验,对命令操作、权限配置、服务状态验证等关键环节均有详细记录,可帮助读者规避常见坑点,快速完成ollama与deepseek的离线落地。

1. 银河麒麟V10离线部署DeepSeek:无显卡的FT-2000 ARM机器也能跑14B模型

把 DeepSeek 跑在银河麒麟 V10 的 FT-2000 机器上,而且是在完全离线、没有显卡的环境里,这件事听起来挺反直觉——14B 模型在 ARM CPU 上推理,速度不敢恭维,但作为内网问答助手,完全够用。我拿到一份完整的离线安装记录,从 ollama 0.5.7 的解压部署、systemd 服务化,到 deepseek-r1:14b 蒸馏模型的离线导入,再到 Chatbox 客户端和远程访问,每一步都落到了具体命令上。这份指南适合两类人:一类是要在国产化终端上做 AI 能力演示的交付工程师,另一类是内网环境里想自建私有大模型问答服务的运维。全文默认无显卡,纯 CPU 推理方案,不涉及显卡加速配置。

2. 离线安装ollama:目录规划、系统服务与环境变量三板斧

2.1 选型逻辑:为什么是 ollama 而不是裸跑 Python 推理

在国产化机器上部署大模型,路径有好几条:用 Transformers 写 Python 脚本、用 llama.cpp 量化版直接跑、或者用 ollama 这种带 API 的服务框架。我一般劝后来者直接选 ollama,理由有三个。

第一,模型管理。ollama 自带模型仓库机制,ollama list、ollama pull 这些命令把模型的下载、导入、删除都收拢成一条命令,不用自己维护散落的 GGUF 文件和 tokenizer。第二,接口统一。它暴露 /api/generate、/api/chat 标准 HTTP 接口,Chatbox 这类桌面客户端直接对接,不用自己写 Web 服务包装一层。第三,systemd 集成简单。服务文件写好后,开机自启、崩溃重启、日志查看都是系统级能力,比 nohup 挂后台稳得多。

这台机器的处理器是 FT-2000,ARMv8 架构,系统是麒麟 V10 SP1 的 ARM64 版本。ollama 官方对 Linux ARM64 提供 tgz 包,下载文件名是 ollama-linux-arm64.tgz,对应 0.5.7 版本。tgz 包不需要编译,解压即用,这在内网离线环境里是最大优势——不用碰编译器、不用解决构建依赖。

2.2 目录规划与官方 tgz 解压

目录规划沿用原方案的 /opt/deepseek 作为总目录,理由有两个:一是干净统一,ollama、模型、Chatbox 全收在一个父目录下,备份时直接打包 /opt/deepseek 即可;二是后续写 systemd 服务路径时不容易出错。

先创建目标目录并解压:

cd /opt/deepseek mkdir ollama tar -C /opt/deepseek/ollama -xzf ollama-linux-arm64.tgz

tar 的 -C 参数指定解压目标目录,/opt/deepseek/ollama 必须提前创建。解压后检查核心二进制:

ls -l /opt/deepseek/ollama/bin/

正常情况下会看到 ollama 可执行文件。tgz 包解压出来的目录结构已经排好,bin 下就是主程序,不需要额外配置动态库路径。这里有个细节:解压前先确认目标目录是空的,否则 tar 在覆盖同名文件时会逐个询问,离线操作时容易卡住。

2.3 用专用用户跑服务:ollama 用户与权限

服务用什么用户跑,很多人图省事直接用 root。这里不推荐:ollama 的模型管理逻辑会在 OLLAMA_MODELS 目录下做 sha256 校验和层合并,用 root 跑一旦出问题权限边界就没了。原方案单独创建了 ollama 系统用户,我照做了。

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

第一条命令的含义逐项拆解:-r 表示创建系统账户,-s /bin/false 禁止该用户登录,-U 同时创建同名用户组,-m 和 -d 指定家目录为 /usr/share/ollama。第二条命令把当前执行用户加入 ollama 组,这样你在调试模型目录时不会频繁遇到 Permission denied。

要注意的是,真正运行服务的是 ollama 用户,当前用户加组只是为了看模型文件方便。如果后续发现模型目录无法读取,优先检查目录属主,而不是直接 chmod 777。

2.4 systemd 服务文件与环境变量的配合

服务化是整个部署里最关键的一环。机器重启后 ollama 不自己起来,前面全白做。原方案写的 /etc/systemd/system/ollama.service 我复现时只改了 ExecStart 路径,其他保持一致:

[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

EnvironmentFile 指向的环境变量文件必须提前创建,否则服务一启动就失败。内容如下:

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

四个变量分别管四件事:OLLAMA_HOME 是 ollama 的安装根目录;OLLAMA_MODELS 指定模型文件存放位置,这一点决定了模型导入后占用哪个目录;OLLAMA_HOST 设为 0.0.0.0 让服务监听所有网卡接口,这样局域网内其他机器才能访问,这也是后面远程连接的前提;OLLAMA_ORIGINS 设为 * 是为了放行跨域请求,Chatbox 这类 Web 技术栈客户端连不上时,多半就是这里没放宽。

写完两个文件后按顺序执行:

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 把整个 /opt/deepseek/ollama 的属主改成 ollama,防止服务写入模型文件时越权失败。daemon-reload 在每次修改 service 文件后是必做项,忘记重载会让修改不生效。status 输出里看到 active (running),说明服务起来了;日志里 [GIN-debug] 开头的路由注册信息,看到 /api/tags、/api/version 就说明 API 服务已经注册完成。

3. 离线模型导入:从联网机器搬运 deepseek-r1 到内网机的完整路径

3.1 为什么必须在同架构联网机器上准备

离线导入模型这件事,看起来就是把模型文件拷贝过来,但里面有一个容易翻车的细节:架构一致性。

ollama 的模型文件本质上是 GGUF 格式,这种格式本身不区分 CPU 架构,推理时才需要编译对应架构的内核。但 ollama pull 下载下来的目录结构里,除了 GGUF 文件,还有 manifest 和按 sha256 命名的分层数据。联网机器上执行 ollama show --modelfile 导出的 modelfile.txt,其中有 FROM 字段指向一个本地路径。在准备机上操作时这个路径很正常,一旦把 modelfile 拷到另一台机器,路径就失效了。

我见过有人在 x86 的联网机上导出 modelfile,再把 gguf 拷到 ARM 目标机,ollama create 时报各种文件不存在。原方案里特别强调"在同架构联网机器上安装 ollama",这行字背后就是这段血泪经验。所以准备机的要求是:与目标机同为 ARM64 架构、能联网、安装同一版本或相近版本的 ollama。

3.2 拉取模型并导出 modelfile 与 gguf

在联网准备机上执行:

ollama pull deepseek-r1:14b

这个命令从 ollama 官方模型仓库拉取 deepseek-r1 的 14B 版本。模型下来后,用 show 命令导出它的构成:

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

重定向到 modelfile.txt 后,打开它,重点看第 5 行附近的 FROM 字段。原方案里的经验是:FROM 后面指向的文件就是真正的模型权重文件。我把它单独复制出来,重命名为 deepseek-r1-14b.gguf,方便拷回内网后辨认。

cp /home/user/.ollama/models/blobs/sha256-xxx deepseek-r1-14b.gguf

这里有个容易忽略的点:ollama 的模型存储目录里文件以 sha256 哈希命名,没有可读性,复制出来改名是方便后续手工确认。modelfile.txt 里的 FROM 路径先不用改,只要把 modelfile.txt 和 gguf 放在同一个传输目录里一起带走,到内网机上再改。

拉取完毕后用 ollama list 确认:

ollama list

如果 NAME 列能看到 deepseek-r1:14b,说明模型在准备机上已经注册完整。这一步的作用是确保源模型文件没损坏,不会把坏文件带到内网。

3.3 在内网机器上用 ollama create 重新组装

把 modelfile.txt 和 deepseek-r1-14b.gguf 拷贝到内网目标机 /opt/deepseek 目录,执行导入:

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

导入过程会打印一串类似下面的日志:

gathering model components copying file sha256:6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1e 100% parsing GGUF using existing layer creating new layer sha256:369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 creating new layer sha256:6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 creating new layer sha256:f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 writing manifest success

逐行解读一下:gathering model components 是收集模型组件;copying file 后跟的 sha256 是 GGUF 文件的哈希,100% 表示拷贝完成;parsing GGUF using existing layer 表示该哈希在本地已存在,直接复用;creating new layer 是生成新的元数据层;最后 writing manifest success 表示模型清单写入成功,导入完成。

这里容易出问题的还是 FROM 路径。modelfile.txt 里 FROM 如果写的是准备机上的绝对路径,而你在内网机执行 create 时文件放在别的目录,命令会直接找不到源。我用的办法是先改 FROM 相对路径:

sed -i 's|^FROM .*|FROM ./deepseek-r1-14b.gguf|' modelfile.txt ollama create deepseek-r1:14b -f modelfile.txt

sed 替换后再 create,FROM 基于当前目录解析,gguf 文件就放在执行命令的目录下,不会再出路径问题。

3.4 验证模型:list、run 与日志

导入完成后先看注册结果:

ollama list

输出里能看到 deepseek-r1:14b,SIZE 约 9.0 GB,MODIFIED 是刚才的时间。如果 SIZE 明显偏小,比如只有几百 MB,说明导入的 gguf 不完整,要回头检查拷贝过程。

然后做一次实际推理验证:

ollama run deepseek-r1:14b

进入对话交互界面后随便问一句"你好",看有没有正常回复。这一步验证模型权重能被 CPU 加载并推理。14B 模型通常要 16 GB 内存起步,FT-2000 平台上 32 GB 内存跑起来比较轻松。如果报内存不足,边界在物理内存而不是 CPU 主频。

验证完按 Ctrl+D 退出。确认服务进程状态用:

ollama ps

ps 只在模型被调用过之后才有输出,刚启动没跑过请求时列表是空的,这不是故障。如果 ps 能看到模型,说明它已经常驻内存,可以响应请求了。

4. 排查:装完起不来、模型报错、Chatbox 连不上的五个坑

4.1 现象一:systemctl start ollama 后服务处于 failed 状态

现象:执行 sudo systemctl start ollama 后,状态不是 running 而是 failed,journalctl 日志末尾报 "Failed to start Ollama Service"。

原因:最常发生在 EnvironmentFile 指向的 ollama.conf 不存在,或者 service 文件里 User/Group 对应用户不存在。其次是配置文件里变量格式错误,比如行末有多余空格。

解决:按顺序检查三件事:配置文件是否存在、用户是否存在、daemon 是否重载。

sudo ls -l /opt/deepseek/ollama/ollama.conf sudo id ollama sudo systemctl daemon-reload sudo systemctl start ollama

id ollama 如果提示用户不存在,说明 useradd 那步没执行成功,回 2.3 节重跑。配置文件的变量值建议统一不带引号(特殊路径除外),避免 systemd 解析环境变量时出意外。

4.2 现象二:ollama create 报文件找不到

现象:执行 ollama create deepseek-r1:14b -f modelfile.txt 时,终端报 FROM 指定的文件不存在,或提示 "file does not exist"。

原因:modelfile.txt 里的 FROM 行写的是准备机上的绝对路径,比如 /home/user/.ollama/models/blobs/sha256-xxx,内网机没有这个路径,ollama create 会严格按 FROM 路径找源文件。

解决:把 FROM 改成当前目录相对路径。

sed -i 's|^FROM .*|FROM ./deepseek-r1-14b.gguf|' modelfile.txt ollama create deepseek-r1:14b -f modelfile.txt

TEMPLATE、PARAMETER 这些字段不涉及路径,不用动。这个坑我在第三次部署时仍然踩到,后来形成习惯:任何机器上执行 create 之前,先 vim 打开 modelfile.txt 看 FROM 是不是相对路径。

4.3 现象三:局域网内其他机器连不上 11434 端口

现象:本机能跑,另一台机器访问 http://服务器IP:11434 超时,telnet IP 11434 不通。

原因:最常见的是 OLLAMA_HOST 没设成 0.0.0.0,ollama 默认只监听 127.0.0.1,局域网自然不通。另一个可能是系统防火墙拦截了 11434。

解决:先确认环境变量,再看监听地址。

cat /opt/deepseek/ollama/ollama.conf sudo ss -tlnp | grep 11434

如果 OLLAMA_HOST 不是 0.0.0.0,改完重启:sudo systemctl restart ollama。ss 输出显示 127.0.0.1:11434 说明环境变量没生效,回头看 service 文件里 EnvironmentFile 路径是否正确。防火墙放行命令:

sudo firewall-cmd --zone=public --add-port=11434/tcp --permanent sudo firewall-cmd --reload

麒麟系统如果是 iptables 管理,直接 iptables -I INPUT -p tcp --dport 11434 -j ACCEPT 放行。

4.4 现象四:Chatbox 里报 Failed to fetch

现象:Chatbox 配好 API 地址后,点发送消息立即报 Failed to fetch 或 network error。

原因:Chatbox 是 Web 技术栈客户端,跨域请求被 OLLAMA_ORIGINS 默认值拦截会出现这类错。另外 API 地址写成 https 也会报同样的网络错误,因为服务端没有开 TLS。

解决:把 ollama.conf 里 OLLAMA_ORIGINS 设为 *,重启 ollama 服务。然后检查 API 地址是否 http://IP:11434,不要带 https 前缀。我在配置客户机器时见过至少三次把 http 写成 https 的情况,这个低级错误比跨域问题更容易被忽略。

4.5 现象五:双击 Chatbox.AppImage 没反应

现象:AppImage 加了执行权限,双击桌面图标没有窗口弹出,命令行执行报缺库。

原因:AppImage 依赖系统 FUSE 组件和部分动态库。麒麟 V10 上常见缺 libfuse2,另外原方案里提到的 zlib1g-dev 包缺失也会导致起不来。

解决:命令行先跑一次看真实报错:

/opt/deepseek/Chatbox-1.9.8-arm64.AppImage

提示缺 libfuse.so.2 就安装:

sudo apt install libfuse2

zlib 相关报错就用 dpkg 装附带的 zlib1g-dev 包。装完依赖再双击。桌面图标如果还是没反应,检查 Chatbox.desktop 里 Exec 是不是绝对路径,以及 chmod +x 是否对桌面文件执行过。

5. 把服务变成日常工具:Chatbox 桌面入口、远程访问与常用命令

5.1 制作可双击的桌面图标

Chatbox 是 AppImage 格式,双击本来就能执行,但每次进目录找文件太麻烦。照原方案写一个桌面入口:

sudo vim /opt/deepseek/Chatbox.desktop

内容如下,Exec 路径必须和 AppImage 实际路径一致,Icon 指向 png 图标文件,没有可以先不填:

[Desktop Entry] Version=1.0 Name=Chatbox Comment=This is my cool application Exec=/opt/deepseek/Chatbox-1.9.8-arm64.AppImage Icon=/opt/deepseek/Chatbox.png Terminal=false Type=Application Categories=Utility;Application;

保存后执行 chmod +x /opt/deepseek/Chatbox.desktop。麒麟桌面双击提示 untrusted 时,右键属性里勾选允许执行即可。

5.2 Chatbox 连接参数配置

打开设置,API 服务商选 Ollama,模型选 deepseek-r1:14b,关键参数如下:

参数值说明
API Hosthttp://127.0.0.1:11434本机用 127.0.0.1,远程填实际 IP
模型名称deepseek-r1:14b必须与 ollama list 输出一致
API 路径/v1/chat/completionsChatbox 走 OpenAI 兼容接口

注意别把 API 路径配成 /api/chat,配错直接 404。

5.3 远程主机接入模型

远程接入只改一处:API Host 的 127.0.0.1 换成模型机内网 IP,比如 http://192.168.1.100:11434。前提是 OLLAMA_HOST 为 0.0.0.0、防火墙放行 11434。联调前先 telnet 探端口,通了再配客户端。

5.4 常用命令与日常维护

日常维护靠几条命令就够:

ollama list # 查看已导入模型 ollama run deepseek-r1:14b # 运行模型进入对话 ollama ps # 查看已加载模型 ollama stop deepseek-r1:14b # 停止模型释放内存 ollama rm deepseek-r1:14b # 删除模型,必须先 stop

stop 和 rm 容易搞混,rm 前不 stop 会报文件占用。CPU 机器上模型变慢先看内存占用,14B 模型在 FT-2000 上有性能上限。

这套流程我前后做了三遍,前两遍都栽在 modelfile 路径和 OLLAMA_ORIGINS 上。从那以后,每次做离线模型部署我都强制把"查看 FROM 路径、确认 OLLAMA_HOST、telnet 验证端口"三步走一遍,基本没再翻车。希望这份记录能让你在内网环境里少走几步弯路,早点把 DeepSeek 跑起来。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 17:52:28

MCP模型上下文协议:从原理到实战,统一大模型工具接入

最近后台经常有人拿同一张架构图来问我:MCP 到底是什么?图里一堆小方块围着大模型转,标着 tools、resources、prompts。刚接触大模型应用的人最容易卡在这个点上——明明大模型只会输出文字,它凭什么能帮我查数据库、写文件、调接…

作者头像 李华
网站建设 2026/10/20 17:50:04

语音代理:从TTS到商业意图嵌入的基础设施演进

1. 标题里的“语音代理”不是玄学,而是正在落地的商业基础设施“语音代理的贴现:ElevenLabs 220 亿美元”——这个标题乍看像金融术语混搭科技新闻,实则精准戳中了当前AI语音赛道最核心的估值逻辑转折点。“贴现”在这里不是指银行票据打折&a…

作者头像 李华
网站建设 2026/10/20 17:50:03

AI上下文可视化:context-mode如何终结模型的“莫名自信”

有段时间我在维护一个自动化文档助手,用户反馈最多的不是功能缺失,而是“AI莫名自信”:它明明没有我仓库里的最新代码,却能斩钉截铁地告诉我某个函数已被弃用;明明没读某个文件,却引用了一段旧版注释当依据…

作者头像 李华
网站建设 2026/10/20 17:48:01

ODrive v0.3.6 Keil移植包:STM32F4无刷电机FOC闭环实战指南

简介:本资源是面向嵌入式开发者与电机控制工程师的ODrive固件移植实践包,聚焦Keil环境下ODrive-fw-v0.3.6版本的完整工程适配,解决无刷电机(BLDC)在STM32等Cortex-M4平台上的高效驱动与算法部署难题,适用于…

作者头像 李华
网站建设 2026/10/20 17:47:17

AI语音销售机器人源码搭建实战:从ASR到TTS的完整链路与避坑指南

简介:这是一套面向电话营销与智能客服场景的AI语音通话销售机器人源码,适合具备一定后端与语音开发基础的开发者、企业技术团队研究部署。系统整合自然语言处理、语音识别、语音合成与机器学习算法,可模拟人声完成外呼、需求识别、意向判断与…

作者头像 李华
网站建设 2026/10/20 17:46:39

PHP在线图像处理源码实战:GD与ImageMagick引擎选型及部署避坑指南

简介:这是一套基于PHP实现的网页版在线图像处理源码,面向希望学习Web端图片编辑开发、或需要轻量级在线PS工具的开发者与建站爱好者。它模拟Photoshop的常见操作流程,提供裁剪、旋转、缩放、滤镜与图层式调整等能力,用户无需安装桌…

作者头像 李华