简介:面向银河麒麟V10操作系统技术人员的一份DeepSeek离线部署操作指南,重点解决在内网或无互联网环境下安装ollama大语言模型服务及chatbox客户端的问题。资源为单个docx文档,约2.69MB,内容涵盖系统环境与硬件检查、ollama解压安装与systemd服务配置、环境变量文件设置、DeepSeek-R1模型离线拉取及导入等完整流程。文档在chatbox部分还说明了安装方法、桌面快捷方式创建和接口配置方式,并附带远程访问DeepSeek的建议,适合需要在国产化系统上部署AI服务的运维人员参考。全文以实际命令和路径示例贯穿,便于读者按步骤在同等环境中复现,目前已有5532人学习。1. 银河麒麟V10上离线部署deepseek-r1:不联网也不装显卡,14B模型照样跑起来手里有一台银河麒麟V10 SP1的arm64机器,CPU是飞腾FT-2000,没有GPU,还断着外网。想在上面跑一个本地大模型,给内部做代码辅助或知识库问答,这听起来有点折腾,但其实一条完整的离线链路是能走通的:ollama做模型服务、deepseek-r1:14b做蒸馏模型、chatbox做图形客户端。这份部署资料把整个过程拆成了可照抄的步骤,从解压ollama压缩包到配置systemd服务,从离线导入模型到做桌面快捷方式都有,还附了远程访问方案。适合两类人:一类是麒麟、统信这类国产化环境里的运维,另一类是想在无GPU的arm64机器上把大模型服务跑起来的技术人员。下面按我实际拆解的顺序,从安装到避坑一步步说。2. 装ollama 0.5.7:解压、专用系统用户、systemd服务一次配完2.1 为什么在这台机器上优先选ollama,而不是vLLM或推理框架全家桶飞腾FT-2000是arm64架构、纯CPU环境,装大模型推理服务首先得考虑「能不能编译过、运行时占多少内存」。vLLM确实支持CPU推理,但在arm64的国产系统上要自己编一堆依赖,Python环境、编译工具链、算子库,哪个版本对不上都够折腾一天。ollama的优势在于官方直接提供linux-arm64的tgz压缩包,解压即用,它对ARMv8指令集和GGUF量化模型的支持做得比较成熟,而且模型管理、服务启动都封装在一条命令里,适合离线环境。还有一层原因:ollama把模型统一放在OLLAMA_MODELS目录下,用manifest加blob的方式管理,这给离线导入提供了很大方便。后面要导入的deepseek-r1:14b在ollama仓库里就是GGUF格式的量化模型,14B在CPU上跑,Q4量化文件大约9GB,内存加载十几GB,这也在大多数服务器的承受范围内。如果换成FP16原版权重,光加载就要翻倍的内存,纯CPU推理基本跑不动。2.2 目录规划和解压:tar的-C参数别写错先确定安装根目录,资料里用的是 /opt/deepseek/ollama,我建议照抄这个路径,原因有两个:一是/opt下面不受系统升级影响,二是后面所有配置、环境变量、模型路径都围绕这个根目录展开,统一好记。解压前先确认tgz包已经传到这台机器上,然后一次性完成建目录和解压:cd /opt/deepseek ls -l ollama-linux-arm64.tgz mkdir -p /opt/deepseek/ollama tar -C /opt/deepseek/ollama -xzf ollama-linux-arm64.tgz注意tar的-C参数指定了解压目标目录,-xzf里的z是解gzip压缩,f指定文件。如果解压后ls /opt/deepseek/ollama/bin里能看到ollama可执行文件,说明包没问题。这里有个容易踩的地方:有些tgz包解压出来是带顶层目录的,不加-C直接解压会把文件散到当前目录,后面systemd里ExecStart路径就得跟着改,不如一开始就固定好。2.3 建专用系统用户:最小权限跑服务,别用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禁止这个用户登录Shell,-U同时创建同名用户组,-d指定家目录。这样设计的目的是让ollama服务以非特权身份运行,即使模型解析层有漏洞,也不会直接拿到root权限。第二条命令把当前用户加进ollama组,是为了临时调试时能读取模型目录文件。随后把环境变量文件写到安装目录里:sudo vim /opt/deepseek/ollama/ollama.conf2.4 写systemd服务文件和环境变量:OLLAMA_MODELS和OLLAMA_HOST两个决定成败环境变量内容如下,我建议一行一行核对:OLLAMA_HOME=/opt/deepseek/ollama OLLAMA_MODELS="/opt/deepseek/ollama/models" OLLAMA_HOST="0.0.0.0" OLLAMA_ORIGINS="*" PATH=$OLLAMA_HOME/bin:$PATHOLLAMA_MODELS决定模型文件存放位置,离线导入的模型会写到这里;OLLAMA_HOST设为0.0.0.0是让服务监听所有网卡,远程机器才能访问;OLLAMA_ORIGINS设为*表示放行跨域请求,不然chatbox用浏览器内核访问时会因为同源策略被拦,这个参数经常被忽略,是个经典的玄学位置。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然后把归属权限改成ollama,再重载并启动服务:sudo chown -R ollama:ollama /opt/deepseek/ollama sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama这里注意EnvironmentFile的坑:systemd读取这个文件时不会像shell那样完整解析,变量值里的双引号会被当作值的一部分带进去,好在OLLAMA_MODELS这里带引号也不影响ollama读取。另外PATH变量在EnvironmentFile里覆盖了系统PATH,所以后面登录shell时仍需要单独往/etc/profile里加export PATH=/opt/deepseek/ollama/bin:$PATH,否则手动敲ollama命令会提示command not found。2.5 状态怎么验才不算白配启动后用systemctl status看运行状态,更关键的是看服务日志里有没有出现[GIN-debug]开头的API路由输出,这代表HTTP服务真正起来了:sudo systemctl status ollama journalctl -u ollama -f curl http://127.0.0.1:11434/api/tags/api/tags返回{}也正常,表示服务在监听但还没有模型。注意日志里Memory只有十几MB很正常,因为模型还没加载进来,真正占内存的是推理阶段,不要被这个数值误导以为服务没起来。3. 离线导入deepseek-r1:14b:先pull再show,从modelfile里挖出真正的GGUF文件3.1 离线导入的思路:为什么不能直接在目标机上pull目标机器没有外网,ollama pull deepseek-r1:14b这条命令在断网环境下会一直卡在连接超时。离线导入的常规思路是在一台有外网、同架构的机器上先把模型拉下来,再把模型文件带进内网,最后用ollama create导入。这里有个前提:两台机器的架构要一致,即使都是arm64,也要确认是arm64而不是armhf,否则GGUF文件虽然能拷过去,ollama解析时可能直接报illegal instruction。ollama的模型文件实际存储在OLLAMA_MODELS目录下,manifest文件记录模型组成方式,真正的模型权重则是blobs目录下以sha256哈希命名的文件。直接整目录拷贝理论上可行,但文件多、哈希对不齐、容易漏,不如用modelfile方式干净。3.2 有网机器上:先装同版本ollama,再pull再show在联网机器上安装同版本ollama arm64版,然后执行拉取:ollama pull deepseek-r1:14b ollama show --modelfile deepseek-r1:14b拉取过程中能看到一堆百分比进度,如果网络不好,多试几次,它支持断点续传。show --modelfile的作用是把模型包的构建配方打印出来,这是离线导入的关键一步,因为单独把blobs目录里那个大文件拷走还不够,ollama create需要知道模型的结构,而modelfile就是描述这个结构的文件。3.3 手工导出GGUF:modelfile第5行FROM才是模型本体把ollama show --modelfile打印的内容完整保存成modelfile.txt,重点看里面这样一段:FROM /root/.ollama/models/blobs/sha256-6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1eFROM后面指向的才是真正的GGUF权重文件。把这个文件单独复制出来,重命名成deepseek-r1-14b.gguf,和modelfile.txt一起放U盘。这段有个血泪经验:modelfile里可能不止一个FROM行,描述Prompt模板的地方也可能出现FROM字样,一定只看第一处FROM即模型权重行,或者看行数定位,通常是前几行。我当时第一次导出时把模板文件当权重拷了,导入时ollama报no such file,排查半天才发现拷错文件。3.4 在目标机器上用ollama create导入并验证把U盘里的modelfile.txt和gguf文件放到 /opt/deepseek 下,注意modelfile.txt里的FROM路径如果还是原机的绝对路径,导入必然失败,要改成实际文件路径。然后执行:cd /opt/deepseek ollama create deepseek-r1:14b -f modelfile.txt正常执行时日志会依次出现gathering model components、copying file sha256...、parsing GGUF using existing layer sha256...、creating new layer sha256...、writing manifest success。看到success就说明导入成功。随后验证:ollama list ollama run deepseek-r1:14bollama list能看到NAME为deepseek-r1:14b、SIZE约9.0GB的条目。ollama run进入对话交互模式,输入你好能正常回复就说明模型可用。这个过程中我建议顺手验证一下ollama show --modelfile deepseek-r1:14b,确认导入后的FROM路径已经被改写为本地路径,方便后面排查问题。3.5 无显卡CPU推理:内存和并行度怎么调飞腾FT-2000这种纯CPU环境跑14B模型,首先要清楚性能边界。Q4量化后的14B模型,权重文件约9GB,推理时模型整体加载进内存,加上上下文KV缓存,建议机器内存不低于16GB,32GB以上更从容。ollama在CPU上默认使用所有可用核心,但FT-2000的核心数有限,实际生成速度大概是每秒几个token到十几个token之间,这受限于内存带宽,CPU频率不是主要瓶颈。如果同时有多个人访问,可以设置环境变量OLLAMA_NUM_PARALLEL控制并行请求数。CPU环境下这个值建议设成1,因为模型只有一个副本,并行度设高会导致多个请求抢内存带宽,反而互相拖慢速度。OLLAMA_KEEP_ALIVE则控制模型在内存中的驻留时间,默认5分钟,频繁访问可以改长,比如OLLAMA_KEEP_ALIVE=30m,省去反复加载模型的时间。4. chatbox客户端安装与桌面图标:AppImage依赖、.desktop权限和第一次对话配置4.1 为什么客户端选chatbox,AppImage格式有什么讲究模型服务起来了,还需要一个交互界面。用命令行ollama run能对话但不直观,chatbox这种图形客户端可以保存多轮对话、管理历史记录、切换模型,体验好得多。它的Linux版是AppImage格式,一个文件即整个应用,不需要安装,给执行权限后直接运行。这个格式有个隐含要求:系统要有FUSE支持,麒麟V10默认是有的,但如果双击没反应,优先检查libz这个动态库。chatbox的arm64版本AppImage放到 /opt/deepseek 目录,然后手动执行一次确认它能跑:chmod +x /opt/deepseek/Chatbox-1.9.8-arm64.AppImage /opt/deepseek/Chatbox-1.9.8-arm64.AppImage如果终端报错error while loading shared libraries: libz.so.1,说明系统缺zlib1g-dev包。这时候需要找到对应架构的deb包,本地安装:sudo dpkg -i zlib1g-dev_1%3a1.2.11.dfsg-2kylin1.5k0.2_arm64.deb。注意必须是arm64版本,装成amd64的会直接报错格式错误。4.2 桌面图标不是随便建个文件就行:Exec、Icon和chmod缺一不可每次从终端启动AppImage不现实,桌面快捷方式是必须的。在桌面创建Chatbox.desktop:[Desktop Entry] Version=1.0 Name=Chatbox Comment=AI Chat Client Exec=/opt/deepseek/Chatbox-1.9.8-arm64.AppImage Icon=/opt/deepseek/Chatbox.png Terminal=false Type=Application Categories=Utility;Application;然后执行chmod +x Chatbox.desktop。文件管理器让桌面图标可执行,才能真正响应双击。Icon那一项我建议用绝对路径,如果聊天客户端没带png图标,可以自己截一个放过去,否则图标会显示成空白,虽然不影响功能但很影响观感。这个操作在麒麟上有个小细节:有些版本的文件管理器第一次识别.desktop文件会弹「不受信任的启动器」提示,右键属性里勾选允许执行,或重新chmod一次即可。整个.desktop方案的坑在于Exec路径必须和AppImage实际位置一致,如果之后移动了AppImage,图标就会失效。4.3 配置chatbox连上ollama:模型名和API域名别填错打开chatbox,设置里选择Ollama API类型,API域名填http://127.0.0.1:11434。如果这台机器要被远程访问,则填服务器实际IP,比如http://192.168.1.100:11434。模型配置里填的模型名必须和ollama list输出的NAME完全一致,大小写、冒号都不能错,填deepseek-r1:14b,少写:14b会报模型不存在。配置完成后点新对话,发一句话测试。如果报连接失败,先在本机用curl http://127.0.0.1:11434/api/tags验证服务是否活着,排除网络问题。如果回复一直在转圈,看ollama服务日志,journalctl -u ollama -f会显示请求头和推理过程。5. 避坑与排查:离线部署ollama和deepseek的五个典型问题5.1 现象:systemd服务显示active,但curl和chatbox都连不上服务状态明明active,访问11434端口却连接被拒。原因通常是ollama进程的监听地址出了问题,或者OLLAMA_HOST环境变量没有真正传给服务进程。检查方式:systemctl show ollama -p Environment看环境变量是否加载,再用ss -tlnp | grep 11434看监听地址,如果显示127.0.0.1说明OLLAMA_HOST没生效。解决:确认ollama.conf里OLLAMA_HOST=0.0.0.0,然后sudo systemctl daemon-reload && sudo systemctl restart ollama,再查监听地址变成*:11434才算对。5.2 现象:ollama create时报文件找不到,但文件明明在同目录modelfile.txt里FROM路径还是联网机器上的绝对路径。这是最常见的翻车点,我自己也掉过一次。解决:查看modelfile.txt内容,把FROM这行改成目标机器上的实际路径,比如FROM /opt/deepseek/deepseek-r1-14b.gguf。改完再执行create。另外注意ollama create必须在能读到该相对路径的工作目录下执行,或者干脆全部都写绝对路径,一劳永逸。5.3 现象:ip_forward和防火墙规则导致局域网死活不通目标机器上本机访问一切正常,但其他电脑访问11434超时。这多半是防火墙拦了端口。麒麟默认有ufw或firewalld,先看防火墙状态再放行端口:sudo ufw status sudo ufw allow 11434/tcp如果是firewalld:sudo firewall-cmd --permanent --add-port=11434/tcp && sudo firewall-cmd --reload。检查确认端口放行后,用局域网另一台机器telnet一下telnet 目标IP 11434,能通就继续配chatbox。5.4 现象:AppImage双击没反应,终端里执行才看到动态库错误chatbox AppImage需要libz.so.1,系统里缺这个32/64位库时文件管理器双击会静默失败,不弹任何窗口。解决:安装对应架构的zlib1g-dev包,装的时候注意包名里的arm64要和系统一致,不能装错架构。装完再执行AppImage验证一次,能启动再回去做桌面图标。5.5 现象:模型能对话,但重启机器后服务没起来,需要手动startsystemd服务enable了但还是没自启,原因是deepseek.service依赖了ollama.service,如果ollama服务因为环境变量路径问题启动失败,依赖它的服务也不会跟着起。解决:先单独查systemctl status ollama,确保它是running,再看deepseek.service的状态。另外有些资料喜欢把模型进程也做成systemd服务的开机自启项,这个做法要按需要取舍,ollama run本身是交互式进程,做成ExecStart=/opt/deepseek/ollama/bin/ollama run deepseek-r1:14b时,服务启动后会挂着交互会话,日志会刷屏,对排查干扰很大。我一般只让ollama serve开机自启,模型靠OLLAMA_KEEP_ALIVE保持常驻,反而省心。6. 远程连接deepseek与最终验证:从conf到curl的一次完整体检6.1 OLLAMA_HOST=0.0.0.0的真实含义:监听全部网卡但不等于穿透防火墙OLLAMA_HOST设成0.0.0.0只是让ollama进程不再局限于回环地址,它主动监听所有网卡接口。这里最容易误解的是「设置了就能远程访问」,实际上防火墙仍然在起作用,数据包要先穿过防火墙才能到达11434端口。所以远程访问有两条确认路径:第一条看监听地址,ss -tlnp | grep 11434出现*:11434或0.0.0.0:11434;第二条看防火墙规则。两者都通过了,远程主机再用telnet或nc测一下TCP端口通不通。如果不想把服务暴露在局域网所有机器上,可以把OLLAMA_HOST改成具体网卡IP,这样只有能路由到该IP的机器能访问,安全性好一些。6.2 用curl模拟chatbox的请求:从API探测到真实推理服务是否正常,最快的验证方式是直接用curl打ollama的API,这比打开chatbox点对话快得多。先探活,再发一次真实推理请求:curl http://127.0.0.1:11434/api/tags curl http://127.0.0.1:11434/api/generate -d '{ "model": "deepseek-r1:14b", "prompt": "用一句话介绍你自己", "stream": false }'第一条返回的JSON数组里应该有deepseek-r1:14b的条目,如果这里看不到模型,后面对话肯定失败。第二条/api/generate是ollama的生成接口,model字段对应ollama list输出的模型名,prompt是输入内容,stream设为false表示一次性返回完整响应而不走流式输出,这样curl输出容易读。返回里会有一个response字段,能看到模型生成的文本,还有total_duration等性能指标。如果返回400,检查模型名;如果返回500,看服务日志定位是OOM还是模型文件损坏。6.3 远程主机上配置chatbox并验证:端口测试比打开软件更靠前在局域网另一台机器上装好chatbox,设置里API域名填服务器的IP,格式http://192.168.x.x:11434。模型名依旧是deepseek-r1:14b。配完先别急着发消息,用nc或telnet验证端口:nc -vz 192.168.x.x 11434端口通再打开chatbox对话。端口不通的情况,回到第5.3条查防火墙。如果端口通但chatbox报错,再用curl从远程机器请求/api/tags,能返回模型列表就说明服务链路完好,问题出在chatbox配置上,重点检查协议头http有没有漏写。这套部署流程完整走完,会在麒麟V10上得到一个常驻的本地大模型服务,deepseek-r1:14b离线可用,chatbox负责交互,局域网其他电脑也能接入共用。从那以后,我每次在国产化环境里装这类服务,都会强制自己走一遍「先curl探活、再远程端口测试、最后才打开客户端」的验证顺序,这套顺序帮我拦下了不少配置层面的低级错误。希望这套部署思路也能帮到你,少走一段弯路。本文还有配套的精品资源,点击获取
简介:面向银河麒麟V10操作系统技术人员的一份DeepSeek离线部署操作指南,重点解决在内网或无互联网环境下安装ollama大语言模型服务及chatbox客户端的问题。资源为单个docx文档,约2.69MB,内容涵盖系统环境与硬件检查、ollama解压安装与systemd服务配置、环境变量文件设置、DeepSeek-R1模型离线拉取及导入等完整流程。文档在chatbox部分还说明了安装方法、桌面快捷方式创建和接口配置方式,并附带远程访问DeepSeek的建议,适合需要在国产化系统上部署AI服务的运维人员参考。全文以实际命令和路径示例贯穿,便于读者按步骤在同等环境中复现,目前已有5532人学习。1. 银河麒麟V10上离线部署deepseek-r1:不联网也不装显卡,14B模型照样跑起来手里有一台银河麒麟V10 SP1的arm64机器,CPU是飞腾FT-2000,没有GPU,还断着外网。想在上面跑一个本地大模型,给内部做代码辅助或知识库问答,这听起来有点折腾,但其实一条完整的离线链路是能走通的:ollama做模型服务、deepseek-r1:14b做蒸馏模型、chatbox做图形客户端。这份部署资料把整个过程拆成了可照抄的步骤,从解压ollama压缩包到配置systemd服务,从离线导入模型到做桌面快捷方式都有,还附了远程访问方案。适合两类人:一类是麒麟、统信这类国产化环境里的运维,另一类是想在无GPU的arm64机器上把大模型服务跑起来的技术人员。下面按我实际拆解的顺序,从安装到避坑一步步说。2. 装ollama 0.5.7:解压、专用系统用户、systemd服务一次配完2.1 为什么在这台机器上优先选ollama,而不是vLLM或推理框架全家桶飞腾FT-2000是arm64架构、纯CPU环境,装大模型推理服务首先得考虑「能不能编译过、运行时占多少内存」。vLLM确实支持CPU推理,但在arm64的国产系统上要自己编一堆依赖,Python环境、编译工具链、算子库,哪个版本对不上都够折腾一天。ollama的优势在于官方直接提供linux-arm64的tgz压缩包,解压即用,它对ARMv8指令集和GGUF量化模型的支持做得比较成熟,而且模型管理、服务启动都封装在一条命令里,适合离线环境。还有一层原因:ollama把模型统一放在OLLAMA_MODELS目录下,用manifest加blob的方式管理,这给离线导入提供了很大方便。后面要导入的deepseek-r1:14b在ollama仓库里就是GGUF格式的量化模型,14B在CPU上跑,Q4量化文件大约9GB,内存加载十几GB,这也在大多数服务器的承受范围内。如果换成FP16原版权重,光加载就要翻倍的内存,纯CPU推理基本跑不动。2.2 目录规划和解压:tar的-C参数别写错先确定安装根目录,资料里用的是 /opt/deepseek/ollama,我建议照抄这个路径,原因有两个:一是/opt下面不受系统升级影响,二是后面所有配置、环境变量、模型路径都围绕这个根目录展开,统一好记。解压前先确认tgz包已经传到这台机器上,然后一次性完成建目录和解压:cd /opt/deepseek ls -l ollama-linux-arm64.tgz mkdir -p /opt/deepseek/ollama tar -C /opt/deepseek/ollama -xzf ollama-linux-arm64.tgz注意tar的-C参数指定了解压目标目录,-xzf里的z是解gzip压缩,f指定文件。如果解压后ls /opt/deepseek/ollama/bin里能看到ollama可执行文件,说明包没问题。这里有个容易踩的地方:有些tgz包解压出来是带顶层目录的,不加-C直接解压会把文件散到当前目录,后面systemd里ExecStart路径就得跟着改,不如一开始就固定好。2.3 建专用系统用户:最小权限跑服务,别用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禁止这个用户登录Shell,-U同时创建同名用户组,-d指定家目录。这样设计的目的是让ollama服务以非特权身份运行,即使模型解析层有漏洞,也不会直接拿到root权限。第二条命令把当前用户加进ollama组,是为了临时调试时能读取模型目录文件。随后把环境变量文件写到安装目录里:sudo vim /opt/deepseek/ollama/ollama.conf2.4 写systemd服务文件和环境变量:OLLAMA_MODELS和OLLAMA_HOST两个决定成败环境变量内容如下,我建议一行一行核对:OLLAMA_HOME=/opt/deepseek/ollama OLLAMA_MODELS="/opt/deepseek/ollama/models" OLLAMA_HOST="0.0.0.0" OLLAMA_ORIGINS="*" PATH=$OLLAMA_HOME/bin:$PATHOLLAMA_MODELS决定模型文件存放位置,离线导入的模型会写到这里;OLLAMA_HOST设为0.0.0.0是让服务监听所有网卡,远程机器才能访问;OLLAMA_ORIGINS设为*表示放行跨域请求,不然chatbox用浏览器内核访问时会因为同源策略被拦,这个参数经常被忽略,是个经典的玄学位置。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然后把归属权限改成ollama,再重载并启动服务:sudo chown -R ollama:ollama /opt/deepseek/ollama sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama这里注意EnvironmentFile的坑:systemd读取这个文件时不会像shell那样完整解析,变量值里的双引号会被当作值的一部分带进去,好在OLLAMA_MODELS这里带引号也不影响ollama读取。另外PATH变量在EnvironmentFile里覆盖了系统PATH,所以后面登录shell时仍需要单独往/etc/profile里加export PATH=/opt/deepseek/ollama/bin:$PATH,否则手动敲ollama命令会提示command not found。2.5 状态怎么验才不算白配启动后用systemctl status看运行状态,更关键的是看服务日志里有没有出现[GIN-debug]开头的API路由输出,这代表HTTP服务真正起来了:sudo systemctl status ollama journalctl -u ollama -f curl http://127.0.0.1:11434/api/tags/api/tags返回{}也正常,表示服务在监听但还没有模型。注意日志里Memory只有十几MB很正常,因为模型还没加载进来,真正占内存的是推理阶段,不要被这个数值误导以为服务没起来。3. 离线导入deepseek-r1:14b:先pull再show,从modelfile里挖出真正的GGUF文件3.1 离线导入的思路:为什么不能直接在目标机上pull目标机器没有外网,ollama pull deepseek-r1:14b这条命令在断网环境下会一直卡在连接超时。离线导入的常规思路是在一台有外网、同架构的机器上先把模型拉下来,再把模型文件带进内网,最后用ollama create导入。这里有个前提:两台机器的架构要一致,即使都是arm64,也要确认是arm64而不是armhf,否则GGUF文件虽然能拷过去,ollama解析时可能直接报illegal instruction。ollama的模型文件实际存储在OLLAMA_MODELS目录下,manifest文件记录模型组成方式,真正的模型权重则是blobs目录下以sha256哈希命名的文件。直接整目录拷贝理论上可行,但文件多、哈希对不齐、容易漏,不如用modelfile方式干净。3.2 有网机器上:先装同版本ollama,再pull再show在联网机器上安装同版本ollama arm64版,然后执行拉取:ollama pull deepseek-r1:14b ollama show --modelfile deepseek-r1:14b拉取过程中能看到一堆百分比进度,如果网络不好,多试几次,它支持断点续传。show --modelfile的作用是把模型包的构建配方打印出来,这是离线导入的关键一步,因为单独把blobs目录里那个大文件拷走还不够,ollama create需要知道模型的结构,而modelfile就是描述这个结构的文件。3.3 手工导出GGUF:modelfile第5行FROM才是模型本体把ollama show --modelfile打印的内容完整保存成modelfile.txt,重点看里面这样一段:FROM /root/.ollama/models/blobs/sha256-6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1eFROM后面指向的才是真正的GGUF权重文件。把这个文件单独复制出来,重命名成deepseek-r1-14b.gguf,和modelfile.txt一起放U盘。这段有个血泪经验:modelfile里可能不止一个FROM行,描述Prompt模板的地方也可能出现FROM字样,一定只看第一处FROM即模型权重行,或者看行数定位,通常是前几行。我当时第一次导出时把模板文件当权重拷了,导入时ollama报no such file,排查半天才发现拷错文件。3.4 在目标机器上用ollama create导入并验证把U盘里的modelfile.txt和gguf文件放到 /opt/deepseek 下,注意modelfile.txt里的FROM路径如果还是原机的绝对路径,导入必然失败,要改成实际文件路径。然后执行:cd /opt/deepseek ollama create deepseek-r1:14b -f modelfile.txt正常执行时日志会依次出现gathering model components、copying file sha256...、parsing GGUF using existing layer sha256...、creating new layer sha256...、writing manifest success。看到success就说明导入成功。随后验证:ollama list ollama run deepseek-r1:14bollama list能看到NAME为deepseek-r1:14b、SIZE约9.0GB的条目。ollama run进入对话交互模式,输入你好能正常回复就说明模型可用。这个过程中我建议顺手验证一下ollama show --modelfile deepseek-r1:14b,确认导入后的FROM路径已经被改写为本地路径,方便后面排查问题。3.5 无显卡CPU推理:内存和并行度怎么调飞腾FT-2000这种纯CPU环境跑14B模型,首先要清楚性能边界。Q4量化后的14B模型,权重文件约9GB,推理时模型整体加载进内存,加上上下文KV缓存,建议机器内存不低于16GB,32GB以上更从容。ollama在CPU上默认使用所有可用核心,但FT-2000的核心数有限,实际生成速度大概是每秒几个token到十几个token之间,这受限于内存带宽,CPU频率不是主要瓶颈。如果同时有多个人访问,可以设置环境变量OLLAMA_NUM_PARALLEL控制并行请求数。CPU环境下这个值建议设成1,因为模型只有一个副本,并行度设高会导致多个请求抢内存带宽,反而互相拖慢速度。OLLAMA_KEEP_ALIVE则控制模型在内存中的驻留时间,默认5分钟,频繁访问可以改长,比如OLLAMA_KEEP_ALIVE=30m,省去反复加载模型的时间。4. chatbox客户端安装与桌面图标:AppImage依赖、.desktop权限和第一次对话配置4.1 为什么客户端选chatbox,AppImage格式有什么讲究模型服务起来了,还需要一个交互界面。用命令行ollama run能对话但不直观,chatbox这种图形客户端可以保存多轮对话、管理历史记录、切换模型,体验好得多。它的Linux版是AppImage格式,一个文件即整个应用,不需要安装,给执行权限后直接运行。这个格式有个隐含要求:系统要有FUSE支持,麒麟V10默认是有的,但如果双击没反应,优先检查libz这个动态库。chatbox的arm64版本AppImage放到 /opt/deepseek 目录,然后手动执行一次确认它能跑:chmod +x /opt/deepseek/Chatbox-1.9.8-arm64.AppImage /opt/deepseek/Chatbox-1.9.8-arm64.AppImage如果终端报错error while loading shared libraries: libz.so.1,说明系统缺zlib1g-dev包。这时候需要找到对应架构的deb包,本地安装:sudo dpkg -i zlib1g-dev_1%3a1.2.11.dfsg-2kylin1.5k0.2_arm64.deb。注意必须是arm64版本,装成amd64的会直接报错格式错误。4.2 桌面图标不是随便建个文件就行:Exec、Icon和chmod缺一不可每次从终端启动AppImage不现实,桌面快捷方式是必须的。在桌面创建Chatbox.desktop:[Desktop Entry] Version=1.0 Name=Chatbox Comment=AI Chat Client Exec=/opt/deepseek/Chatbox-1.9.8-arm64.AppImage Icon=/opt/deepseek/Chatbox.png Terminal=false Type=Application Categories=Utility;Application;然后执行chmod +x Chatbox.desktop。文件管理器让桌面图标可执行,才能真正响应双击。Icon那一项我建议用绝对路径,如果聊天客户端没带png图标,可以自己截一个放过去,否则图标会显示成空白,虽然不影响功能但很影响观感。这个操作在麒麟上有个小细节:有些版本的文件管理器第一次识别.desktop文件会弹「不受信任的启动器」提示,右键属性里勾选允许执行,或重新chmod一次即可。整个.desktop方案的坑在于Exec路径必须和AppImage实际位置一致,如果之后移动了AppImage,图标就会失效。4.3 配置chatbox连上ollama:模型名和API域名别填错打开chatbox,设置里选择Ollama API类型,API域名填http://127.0.0.1:11434。如果这台机器要被远程访问,则填服务器实际IP,比如http://192.168.1.100:11434。模型配置里填的模型名必须和ollama list输出的NAME完全一致,大小写、冒号都不能错,填deepseek-r1:14b,少写:14b会报模型不存在。配置完成后点新对话,发一句话测试。如果报连接失败,先在本机用curl http://127.0.0.1:11434/api/tags验证服务是否活着,排除网络问题。如果回复一直在转圈,看ollama服务日志,journalctl -u ollama -f会显示请求头和推理过程。5. 避坑与排查:离线部署ollama和deepseek的五个典型问题5.1 现象:systemd服务显示active,但curl和chatbox都连不上服务状态明明active,访问11434端口却连接被拒。原因通常是ollama进程的监听地址出了问题,或者OLLAMA_HOST环境变量没有真正传给服务进程。检查方式:systemctl show ollama -p Environment看环境变量是否加载,再用ss -tlnp | grep 11434看监听地址,如果显示127.0.0.1说明OLLAMA_HOST没生效。解决:确认ollama.conf里OLLAMA_HOST=0.0.0.0,然后sudo systemctl daemon-reload && sudo systemctl restart ollama,再查监听地址变成*:11434才算对。5.2 现象:ollama create时报文件找不到,但文件明明在同目录modelfile.txt里FROM路径还是联网机器上的绝对路径。这是最常见的翻车点,我自己也掉过一次。解决:查看modelfile.txt内容,把FROM这行改成目标机器上的实际路径,比如FROM /opt/deepseek/deepseek-r1-14b.gguf。改完再执行create。另外注意ollama create必须在能读到该相对路径的工作目录下执行,或者干脆全部都写绝对路径,一劳永逸。5.3 现象:ip_forward和防火墙规则导致局域网死活不通目标机器上本机访问一切正常,但其他电脑访问11434超时。这多半是防火墙拦了端口。麒麟默认有ufw或firewalld,先看防火墙状态再放行端口:sudo ufw status sudo ufw allow 11434/tcp如果是firewalld:sudo firewall-cmd --permanent --add-port=11434/tcp && sudo firewall-cmd --reload。检查确认端口放行后,用局域网另一台机器telnet一下telnet 目标IP 11434,能通就继续配chatbox。5.4 现象:AppImage双击没反应,终端里执行才看到动态库错误chatbox AppImage需要libz.so.1,系统里缺这个32/64位库时文件管理器双击会静默失败,不弹任何窗口。解决:安装对应架构的zlib1g-dev包,装的时候注意包名里的arm64要和系统一致,不能装错架构。装完再执行AppImage验证一次,能启动再回去做桌面图标。5.5 现象:模型能对话,但重启机器后服务没起来,需要手动startsystemd服务enable了但还是没自启,原因是deepseek.service依赖了ollama.service,如果ollama服务因为环境变量路径问题启动失败,依赖它的服务也不会跟着起。解决:先单独查systemctl status ollama,确保它是running,再看deepseek.service的状态。另外有些资料喜欢把模型进程也做成systemd服务的开机自启项,这个做法要按需要取舍,ollama run本身是交互式进程,做成ExecStart=/opt/deepseek/ollama/bin/ollama run deepseek-r1:14b时,服务启动后会挂着交互会话,日志会刷屏,对排查干扰很大。我一般只让ollama serve开机自启,模型靠OLLAMA_KEEP_ALIVE保持常驻,反而省心。6. 远程连接deepseek与最终验证:从conf到curl的一次完整体检6.1 OLLAMA_HOST=0.0.0.0的真实含义:监听全部网卡但不等于穿透防火墙OLLAMA_HOST设成0.0.0.0只是让ollama进程不再局限于回环地址,它主动监听所有网卡接口。这里最容易误解的是「设置了就能远程访问」,实际上防火墙仍然在起作用,数据包要先穿过防火墙才能到达11434端口。所以远程访问有两条确认路径:第一条看监听地址,ss -tlnp | grep 11434出现*:11434或0.0.0.0:11434;第二条看防火墙规则。两者都通过了,远程主机再用telnet或nc测一下TCP端口通不通。如果不想把服务暴露在局域网所有机器上,可以把OLLAMA_HOST改成具体网卡IP,这样只有能路由到该IP的机器能访问,安全性好一些。6.2 用curl模拟chatbox的请求:从API探测到真实推理服务是否正常,最快的验证方式是直接用curl打ollama的API,这比打开chatbox点对话快得多。先探活,再发一次真实推理请求:curl http://127.0.0.1:11434/api/tags curl http://127.0.0.1:11434/api/generate -d '{ "model": "deepseek-r1:14b", "prompt": "用一句话介绍你自己", "stream": false }'第一条返回的JSON数组里应该有deepseek-r1:14b的条目,如果这里看不到模型,后面对话肯定失败。第二条/api/generate是ollama的生成接口,model字段对应ollama list输出的模型名,prompt是输入内容,stream设为false表示一次性返回完整响应而不走流式输出,这样curl输出容易读。返回里会有一个response字段,能看到模型生成的文本,还有total_duration等性能指标。如果返回400,检查模型名;如果返回500,看服务日志定位是OOM还是模型文件损坏。6.3 远程主机上配置chatbox并验证:端口测试比打开软件更靠前在局域网另一台机器上装好chatbox,设置里API域名填服务器的IP,格式http://192.168.x.x:11434。模型名依旧是deepseek-r1:14b。配完先别急着发消息,用nc或telnet验证端口:nc -vz 192.168.x.x 11434端口通再打开chatbox对话。端口不通的情况,回到第5.3条查防火墙。如果端口通但chatbox报错,再用curl从远程机器请求/api/tags,能返回模型列表就说明服务链路完好,问题出在chatbox配置上,重点检查协议头http有没有漏写。这套部署流程完整走完,会在麒麟V10上得到一个常驻的本地大模型服务,deepseek-r1:14b离线可用,chatbox负责交互,局域网其他电脑也能接入共用。从那以后,我每次在国产化环境里装这类服务,都会强制自己走一遍「先curl探活、再远程端口测试、最后才打开客户端」的验证顺序,这套顺序帮我拦下了不少配置层面的低级错误。希望这套部署思路也能帮到你,少走一段弯路。本文还有配套的精品资源,点击获取