银河麒麟V10离线部署DeepSeek:ollama与Chatbox实战
简介这份文档面向需要在银河麒麟V10操作系统上离线部署大语言模型的技术人员尤其适合网络受限、无法直接访问外网下载模型的场景。内容围绕ollama服务安装、deepseek-r1模型离线导入、chatbox客户端配置及远程访问展开覆盖从系统环境准备到服务开机自启的完整链路。资源包为1个docx文件大小约2.69MB以图文与命令行示例结合的方式呈现便于对照操作。文档中给出了具体的安装路径、环境变量配置、systemd服务单元写法以及模型文件转换与导入方法还说明了chatbox桌面快捷方式的创建与交互配置并简要提及远程连接deepseek的方式。对于使用飞腾FT-2000等ARM架构设备且无独立显卡的用户文中也提供了可参考的部署思路。目前已有5531人学习适合希望掌握离线AI模型部署与客户端联调的技术人员参考。1. 银河麒麟V10离线部署DeepSeek从零跑通ollama与Chatbox手里有一台飞腾FT-2000的麒麟V10机器没显卡、没外网却要跑一个14B参数的大语言模型——这事听起来像给自己找麻烦但确实有不少场景必须这么干。比如某实验室的内网推理节点、某公司的涉密文档问答终端机器就在那儿摆着网络不通数据不能出本地唯一能用的就是离线包。这份资源给的就是一条完整路径在Kylin-Desktop-V10-SP1 arm64上用ollama 0.5.7做模型服务把deepseek-r1:14b蒸馏模型导进去再配一个Chatbox客户端当交互界面。全程不需要显卡CPU推理虽然慢但能跑通、能对话、能远程调用。适合谁适合手里有麒麟机器、需要在内网搭一个可用AI问答入口的运维或开发人员。下面按实际拆包顺序走一遍。2. 环境准备与ollama离线安装arm64包解压与用户权限2.1 确认系统架构与依赖完整性麒麟V10 SP1的arm64版本在飞腾FT-2000上跑第一步不是急着解压而是确认几个基础条件。打开终端执行uname -m输出aarch64才说明架构匹配如果显示x86_64那后面所有arm64包都白搭。接着检查glibc版本ldd --version看第一行ollama 0.5.7的二进制依赖glibc 2.28以上麒麟V10一般自带2.31问题不大。但有一个容易翻车的点AppImage格式的Chatbox需要FUSE支持而部分麒麟精简版默认没装libfuse2这个后面装Chatbox时会单独处理。另一个前置条件是root权限。ollama要注册成系统服务安装目录又放在/opt/deepseek/ollama普通用户没有写权限。我一般直接用sudo -i切到root或者每条命令前加sudo。但注意ollama服务本身不建议用root跑后面会创建一个专用的ollama系统用户来承载服务进程这是标准做法既满足权限隔离又避免服务以root身份暴露在网络上。下载下来的文件就一个ollama-linux-arm64.tgz。别小看这个包它里面包含了bin/ollama主程序、lib/下的动态库以及一些运行时依赖。解压前先建目录再解压顺序不能反。# 创建安装目录路径按项目约定放在 /opt/deepseek/ollama sudo mkdir -p /opt/deepseek/ollama # 解压ollama离线包到指定目录 # -C 指定解压目标路径-xzf 分别表示解压、gzip格式、指定文件 sudo tar -C /opt/deepseek/ollama -xzf ollama-linux-arm64.tgz # 验证解压结果应该能看到bin/ollama可执行文件 ls -lh /opt/deepseek/ollama/bin/ollama解压完成后/opt/deepseek/ollama/bin/ollama就是主程序。这里有个细节tar包解压后不会自动设置可执行权限如果ls -l看到权限是-rw-r--r--需要手动chmod x。不过官方包一般已经带执行权限检查一下就行。2.2 创建专用用户与systemd服务注册ollama官方推荐用独立用户跑服务原因很简单模型文件动辄几个GB服务进程需要读写模型目录用root跑一旦出问题影响面太大。创建一个不能登录的系统用户# -r 表示系统用户-s /bin/false 禁止登录shell # -U 创建同名用户组-m 创建家目录-d 指定家目录路径 sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama # 把当前用户加入ollama组方便后续操作模型文件 sudo usermod -a -G ollama $(whoami)接下来写systemd服务单元。这个文件决定了ollama怎么启动、用什么用户、读哪个环境变量文件。路径固定在/etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork-online.target [Service] ExecStart/opt/deepseek/ollama/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 EnvironmentFile/opt/deepseek/ollama/ollama.conf [Install] WantedBydefault.target逐行说一下关键参数。ExecStart指向解压出来的ollama二进制serve是启动服务模式的子命令。User和Group都设为ollama这样服务进程以ollama身份运行对/opt/deepseek/ollama目录有读写权。Restartalways配合RestartSec3表示进程意外退出后3秒自动重启这对长时间运行的模型服务很重要——CPU推理偶尔会因为内存压力被OOM killer干掉自动拉起能省不少人工。EnvironmentFile指向独立的环境变量文件这样改配置不用动service文件维护起来干净。环境变量文件/opt/deepseek/ollama/ollama.conf内容如下# ollama安装根目录 OLLAMA_HOME/opt/deepseek/ollama # 模型文件存放路径离线导入的gguf文件最终会落在这里 OLLAMA_MODELS/opt/deepseek/ollama/models # 监听所有网卡允许远程主机访问API OLLAMA_HOST0.0.0.0 # 允许跨域来源Chatbox通过HTTP调用时需要 OLLAMA_ORIGINS* # 把ollama的bin目录加入PATH方便命令行直接调用 PATH$OLLAMA_HOME/bin:$PATHOLLAMA_MODELS是重点默认模型存在/usr/share/ollama/.ollama/models但项目要求统一放在/opt/deepseek/ollama/models所以必须显式指定。OLLAMA_HOST设为0.0.0.0意味着监听所有网络接口默认只监听127.0.0.1不改的话远程Chatbox连不上。OLLAMA_ORIGINS*是给浏览器端跨域用的Chatbox桌面版其实走的是本地HTTP请求但加上没坏处。权限和自启配置# 把整个ollama目录的属主改为ollama用户 sudo chown -R ollama:ollama /opt/deepseek/ollama # 重新加载systemd配置让新service文件生效 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable ollama # 立即启动服务 sudo systemctl start ollama # 查看运行状态确认Active是running sudo systemctl status ollama状态输出里看到Active: active (running)就说明服务起来了。日志里会打印GIN路由注册信息那是ollama内置的HTTP框架在注册API端点属于正常输出。如果状态是failed用journalctl -u ollama -n 50看最近50行日志常见原因是ExecStart路径写错或者ollama.conf里有语法错误。最后把ollama加入全局PATH这样终端里直接敲ollama就能用# 追加到/etc/profile对所有用户生效 echo export PATH/opt/deepseek/ollama/bin:$PATH | sudo tee -a /etc/profile # 当前会话立即生效 source /etc/profile到这里ollama服务本身已经跑起来了但还没有模型。下一步处理离线模型导入。3. 离线导入deepseek-r1:14b从联网机拉取到内网create3.1 在联网机器上导出GGUF模型文件内网机器没有外网没法直接ollama pull。标准做法是找一台同架构arm64的联网机器先装ollama把模型拉下来再从ollama的模型仓库里把GGUF文件抠出来。为什么强调同架构因为ollama的模型层是按平台分发的arm64和x86_64拉到的blob可能不同跨架构拷贝会出问题。在联网机器上执行# 拉取deepseek-r1的14b蒸馏模型 # 14b表示140亿参数蒸馏版基于Qwen架构CPU推理相对友好 ollama pull deepseek-r1:14b # 查看模型的modelfile确认FROM行指向的GGUF文件路径 ollama show --modelfile deepseek-r1:14bollama show --modelfile的输出里有一行FROM /path/to/blob这个路径指向的就是实际的GGUF模型文件。把整段输出保存为modelfile.txt然后把那个blob文件复制出来重命名为deepseek-r1-14b.gguf。注意modelfile.txt里的FROM行需要改成新文件名否则导入时找不到文件。# 假设blob路径是 /usr/share/ollama/.ollama/models/blobs/sha256-xxxx # 复制并重命名 cp /usr/share/ollama/.ollama/models/blobs/sha256-xxxx ./deepseek-r1-14b.gguf # 编辑modelfile.txt把FROM行改为 # FROM ./deepseek-r1-14b.gguf这个GGUF文件大概9GB左右拷贝到内网机器时建议用移动硬盘或者内网文件共享别用分卷压缩再合并容易出校验错误。3.2 在内网机器上执行ollama create导入把deepseek-r1-14b.gguf和modelfile.txt放到内网机器的同一个目录下比如/opt/deepseek/。然后执行导入# 切换到模型文件所在目录 cd /opt/deepseek # 使用modelfile创建模型-f 指定modelfile路径 ollama create deepseek-r1:14b -f modelfile.txt导入过程会输出一系列copying file、parsing GGUF、creating new layer的信息。这里有个坑ollama create 会把GGUF文件复制到OLLAMA_MODELS指定的目录下所以确保/opt/deepseek/ollama/models有足够空间至少留出模型体积两倍的余量。导入完成后用ollama list查看ollama list # 输出示例 # NAME ID SIZE MODIFIED # deepseek-r1:14b 2d1a5972ac3a 9.0 GB 2 minutes ago看到模型出现在列表里就可以直接运行ollama run deepseek-r1:14b # 进入交互模式输入问题测试 你好请介绍一下你自己CPU推理14B模型的速度取决于核心数和内存带宽。FT-2000一般是8核或16核14B Q4量化模型大概能跑到每秒3到8个token对话能感觉到延迟但可用。如果内存不足16GB建议换7B或更小的模型否则加载阶段就会失败。3.3 配置模型开机自启的systemd服务ollama服务本身开机自启了但模型不会自动加载到内存。如果希望开机后模型就处于可调用状态需要再加一个service[Unit] Descriptiondeepseek Service Afterollama.service [Service] ExecStart/opt/deepseek/ollama/bin/ollama run deepseek-r1:14b ExecStop/opt/deepseek/ollama/bin/ollama stop deepseek-r1:14b Userollama Groupollama Restartalways RestartSec3 EnvironmentFile/opt/deepseek/ollama/ollama.conf [Install] WantedBydefault.target保存为/etc/systemd/system/deepseek.service然后daemon-reload、enable、start三连。注意Afterollama.service确保ollama先启动否则ollama run会找不到服务端。这个service的ExecStart会保持前台运行模型常驻内存第一次调用时不需要再加载响应更快。4. Chatbox客户端部署AppImage打包与桌面图标配置4.1 AppImage运行依赖与zlib1g-dev补装Chatbox在Linux arm64上提供的是AppImage格式单文件、免安装双击就能跑。但麒麟V10默认可能缺zlib1g-dev导致AppImage解压运行时库时报错。先装依赖# 安装zlib开发包AppImage运行时需要 sudo dpkg -i zlib1g-dev_1%3a1.2.11.dfsg-2kylin1.5k0.2_arm64.deb如果提示依赖不满足用sudo apt-get install -f自动修复。装完后把Chatbox的AppImage放到/opt/deepseek/下赋予执行权限chmod x /opt/deepseek/Chatbox-1.9.8-arm64.AppImage直接命令行运行./Chatbox-1.9.8-arm64.AppImage测试能否启动。如果报FUSE相关错误说明系统没装libfuse2用sudo apt-get install libfuse2补上。AppImage的本质是把应用和依赖打包成一个可执行文件运行时通过FUSE挂载内部文件系统所以FUSE是硬依赖。4.2 制作桌面图标与快捷启动命令行能跑之后做一个桌面图标方便双击启动。在桌面新建Chatbox.desktop[Desktop Entry] Version1.0 NameChatbox CommentAI Chat Client Exec/opt/deepseek/Chatbox-1.9.8-arm64.AppImage Icon/opt/deepseek/Chatbox.png Terminalfalse TypeApplication CategoriesUtility;Application;Exec指向AppImage完整路径Icon指向一张PNG图标没有的话可以从AppImage里提取或者随便找一张。保存后赋权chmod x Chatbox.desktop双击图标就能启动。如果双击没反应检查两点一是Exec路径是否绝对路径且文件有执行权限二是.desktop文件本身是否有执行权限。麒麟的桌面环境对desktop文件权限比较敏感缺一个都点不开。4.3 Chatbox连接ollama的API配置打开Chatbox后点设置模型提供方选Ollama API。关键配置项配置项值说明API域名http://127.0.0.1:11434本机ollama默认端口模型名称deepseek-r1:14b必须与ollama list中的名称一致上下文长度4096根据内存调整14B模型建议不低于2048如果Chatbox装在其他机器上API域名改成ollama所在主机的IP比如http://192.168.1.100:11434。前提是ollama.conf里OLLAMA_HOST已经设为0.0.0.0并且防火墙放行了11434端口。麒麟V10默认的firewalld可能没开用sudo firewall-cmd --add-port11434/tcp --permanent加一下然后reload。配置保存后新建对话输入问题如果能看到流式输出就说明整条链路通了。第一次请求会触发模型加载等待时间较长之后就会快很多。5. 避坑排查离线部署中最容易翻车的五个点5.1 ollama服务启动失败日志报permission denied现象systemctl status ollama显示failedjournalctl里看到permission denied打开某个目录或文件。原因/opt/deepseek/ollama目录属主是root而service以ollama用户运行没有写权限。尤其是OLLAMA_MODELS指向的models目录如果没提前创建并赋权ollama启动时会尝试创建但失败。解决sudo chown -R ollama:ollama /opt/deepseek/ollama确保整个目录树属主正确。如果models目录是单独挂载的也要单独赋权。5.2 ollama create导入模型时报错“file not found”现象执行ollama create deepseek-r1:14b -f modelfile.txt后提示找不到GGUF文件。原因modelfile.txt里的FROM行写的是相对路径而执行create时的当前工作目录与modelfile所在目录不一致。ollama解析FROM时以modelfile文件所在目录为基准但有些人会把modelfile复制到别处执行。解决要么在modelfile所在目录执行create要么FROM行写绝对路径。我一般直接写绝对路径省得搞混。5.3 Chatbox连接ollama超时但本机curl能通现象本机curl http://127.0.0.1:11434/api/tags有返回但Chatbox填了本机IP后连接超时。原因ollama默认只监听127.0.0.1即使OLLAMA_HOST设了0.0.0.0如果ollama.conf文件没被正确加载比如service里EnvironmentFile路径写错实际还是默认监听。解决sudo systemctl show ollama | grep EnvironmentFile确认加载的文件路径然后ss -tlnp | grep 11434看监听地址是127.0.0.1还是0.0.0.0。如果是前者检查ollama.conf语法等号两边不要有空格值不要加引号除非值本身含空格。5.4 模型加载到一半被killeddmesg看到OOM现象ollama run deepseek-r1:14b运行几秒后进程消失dmesg | tail显示Out of memory killer。原因14B模型Q4量化后约9GB加载时需要额外内存做推理缓存总需求可能到12-14GB。如果机器只有16GB且其他服务占用较多就会触发OOM。解决换更小的模型如deepseek-r1:7b或者在ollama.conf里加OLLAMA_NUM_PARALLEL1限制并发减少内存占用。也可以设置OLLAMA_MAX_LOADED_MODELS1确保只加载一个模型。5.5 AppImage双击无反应命令行运行报FUSE错误现象桌面图标双击没动静终端里执行AppImage提示dlopen(): error loading libfuse.so.2。原因系统缺少FUSE 2库AppImage依赖它来挂载内部文件系统。解决sudo apt-get install libfuse2。如果源里没有找对应的deb包离线安装。麒麟V10的软件源里一般有但内网环境需要提前把deb包也下载好带进去。6. 远程调用与性能调优让14B模型在CPU上跑得更稳远程连接这块核心就一句话在远程主机装ChatboxAPI域名填ollama主机的IP。但实际用起来有几个细节值得说。第一ollama的API默认没有认证任何能访问11434端口的人都能调用模型。内网环境问题不大但如果网段里有不受控的设备建议用防火墙限制来源IP比如firewall-cmd --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port11434 protocoltcp accept。第二远程调用时模型加载仍在服务端客户端只负责收发文本所以远程机器的配置无所谓关键是服务端内存要够。性能调优方面CPU推理的瓶颈通常在内存带宽和核心数。ollama会自动检测CPU核心并设置线程数但有时候默认值不是最优。可以通过环境变量OLLAMA_NUM_THREADS手动指定比如16核机器设为12或14留几个核心给系统。设太高反而会因为上下文切换导致性能下降。我一般会跑一个简单的基准ollama run deepseek-r1:14b --verbose看eval rate然后逐步调整线程数找到峰值。另一个实用技巧是控制上下文长度。Chatbox里默认可能给到4096甚至8192但CPU推理时上下文越长内存占用和计算量越大。如果只是日常问答2048足够。在Chatbox设置里把上下文长度调到2048响应速度会有明显提升。最后说一个验证方法用curl直接调ollama的API排除Chatbox的干扰。比如curl http://127.0.0.1:11434/api/generate -d { model: deepseek-r1:14b, prompt: 用一句话解释什么是操作系统, stream: false }如果这个命令能返回JSON结果说明ollama服务本身没问题问题就在Chatbox配置上。反过来如果curl都不通那就别折腾客户端了先查服务端。从那以后我每次离线部署模型都会先用curl把API跑通再配客户端。这个习惯帮我省了很多来回排查的时间。希望帮到你。本文还有配套的精品资源点击获取