资讯动态

无GPU也能跑大模型:银河麒麟V10离线部署DeepSeek-R1全流程

发布时间:2026/10/21 12:13:32 来源:尧图企业网站定制
简介面向银河麒麟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_HOST0.0.0.0 OLLAMA_ORIGINS* PATH$OLLAMA_HOME/bin:$PATHOLLAMA_MODELS决定模型文件存放位置离线导入的模型会写到这里OLLAMA_HOST设为0.0.0.0是让服务监听所有网卡远程机器才能访问OLLAMA_ORIGINS设为*表示放行跨域请求不然chatbox用浏览器内核访问时会因为同源策略被拦这个参数经常被忽略是个经典的玄学位置。systemd服务文件单独建[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然后把归属权限改成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 手工导出GGUFmodelfile第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缓存建议机器内存不低于16GB32GB以上更从容。ollama在CPU上默认使用所有可用核心但FT-2000的核心数有限实际生成速度大概是每秒几个token到十几个token之间这受限于内存带宽CPU频率不是主要瓶颈。如果同时有多个人访问可以设置环境变量OLLAMA_NUM_PARALLEL控制并行请求数。CPU环境下这个值建议设成1因为模型只有一个副本并行度设高会导致多个请求抢内存带宽反而互相拖慢速度。OLLAMA_KEEP_ALIVE则控制模型在内存中的驻留时间默认5分钟频繁访问可以改长比如OLLAMA_KEEP_ALIVE30m省去反复加载模型的时间。4. chatbox客户端安装与桌面图标AppImage依赖、.desktop权限和第一次对话配置4.1 为什么客户端选chatboxAppImage格式有什么讲究模型服务起来了还需要一个交互界面。用命令行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] Version1.0 NameChatbox CommentAI Chat Client Exec/opt/deepseek/Chatbox-1.9.8-arm64.AppImage Icon/opt/deepseek/Chatbox.png Terminalfalse TypeApplication CategoriesUtility;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_HOST0.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如果是firewalldsudo firewall-cmd --permanent --add-port11434/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_HOST0.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探活、再远程端口测试、最后才打开客户端」的验证顺序这套顺序帮我拦下了不少配置层面的低级错误。希望这套部署思路也能帮到你少走一段弯路。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑