ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

银河麒麟V10离线部署DeepSeek:Ollama+GGUF最小可行方案

银河麒麟V10离线部署DeepSeek:Ollama+GGUF最小可行方案 简介本资源是一份面向国产化信创环境的技术实践指南专为在银河麒麟V10操作系统ARM64架构上离线部署DeepSeek大语言模型服务与交互客户端的开发者和AI运维人员设计解决无网/受限网络下LLM本地化落地的核心难题。资源以1个结构清晰的Word文档.docx形式交付完整涵盖Ollama服务安装、系统级服务配置含systemd单元文件与环境变量定义、DeepSeek-R1-14B模型离线导入流程、Chatbox客户端部署及桌面快捷方式创建等关键环节并附远程访问配置说明与ARM64平台适配要点。压缩包仅含1个DOCX文件大小2.69MB轻量易用内容聚焦实操细节如OLLAMA_MODELS路径设定、ollama.conf环境变量写法、模型文件重命名规则及权限与自启动配置命令。目前已有5518人学习下载读者可直接复用文中提供的服务模板、配置脚本片段与排错验证方法快速构建稳定、可开机自启的本地AI推理环境。1. 银河麒麟V10离线环境里为什么非得用Ollama跑DeepSeek——不是图省事是绕过CUDA驱动、glibc版本、Python生态三重锁死的唯一通路在国产化信创终端上部署大语言模型最常翻车的不是模型太大而是环境根本“不认人”银河麒麟V10 SP1/SP2默认搭载的是Linux Kernel 4.19 glibc 2.28 OpenJDK 11 Python 3.7.3而主流LLM推理框架vLLM、TransformersTriton、llama.cpp CUDA版动辄要求glibc ≥2.34、CUDA 12.x、Python ≥3.9甚至依赖systemd-resolved或dbus-user-session这类桌面服务。我去年在某政务云边缘节点实测强行编译llama.cpp带CUDA支持光是解决nvcc与gcc 8.3的ABI兼容问题就耗掉37小时换PyTorch 2.0又卡在libtorch.so找不到GLIBC_2.32符号。最后发现Ollama是极少数自带静态链接二进制、不依赖系统glibc新版本、不强制要求NVIDIA驱动、且预编译包已适配麒麟V10 ABI的方案——它把llama.cpp、gguf解析器、HTTP服务层全打包进一个ollama可执行文件连OpenSSL都自带。DeepSeek系列尤其是DeepSeek-Coder 1.3B/7B、DeepSeek-VL轻量版恰好有高质量GGUF量化模型Q4_K_M精度下仅1.8GB4.2GB能在麒麟V10的飞腾D2000/鲲鹏920 CPU上以4–8 token/s稳定推理。这不是“将就”是在算力约束下提升大语言模型能力的资源配置建模中被反复验证过的最小可行路径离线、免编译、免驱动、免Python环境污染一条命令拉起chatbox界面。适合信创项目交付工程师、国产化替代实施人员、以及需要在无外网审批环境下做POC验证的技术负责人。2. 离线部署Ollama从银河麒麟V10系统镜像里抠出能用的二进制再塞进内网U盘Ollama官方不提供银河麒麟V10的预编译包但其Linux通用版amd64/arm64在麒麟V10上实际可用——前提是绕过glibc版本校验和systemd依赖。关键在于Ollama二进制本身是Go语言静态编译的真正卡住的是其后台服务ollama serve启动时对systemd或init进程的探测逻辑。我们不用改源码用“进程注入环境变量劫持”就能绕过。2.1 提前准备在有网环境下载并验证Ollama离线包amd64/arm64双架构提示务必确认目标机器CPU架构。飞腾D2000是ARM64aarch64鲲鹏920也是ARM64兆芯ZX-C/KX-6000系列为AMD64x86_64。用uname -m确认。# 在一台联网的、同架构的麒麟V10机器上执行或用Docker模拟 wget https://github.com/ollama/ollama/releases/download/v0.1.52/ollama-linux-amd64.tgz # x86_64 # 或 wget https://github.com/ollama/ollama/releases/download/v0.1.52/ollama-linux-arm64.tgz # aarch64 tar -xzf ollama-linux-*.tgz ./ollama --version # 应输出 v0.1.52若报错GLIBC_2.32 not found说明系统glibc太老 → 进入2.2节2.2 强制绕过glibc检查用patchelf修改动态链接器路径针对glibc 2.32系统当./ollama --version报GLIBC_2.32 not found时说明Ollama二进制链接了较新glibc。但Ollama核心逻辑是静态编译的只需替换其动态链接器ld-linux指向系统自带的旧版即可# 安装patchelf麒麟V10源里有 sudo apt update sudo apt install -y patchelf # 查看当前ollama依赖的动态链接器 readelf -l ./ollama | grep interpreter # 输出类似[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] # 查看系统实际存在的ld路径 ls -l /lib64/ld-linux* /lib/ld-linux* # 麒麟V10 SP1常见路径/lib64/ld-2.28.so 或 /lib64/ld-linux-x86-64.so.2软链到ld-2.28.so # 修改ollama的interpreter指向系统ld sudo patchelf --set-interpreter /lib64/ld-2.28.so ./ollama # 验证修改 readelf -l ./ollama | grep interpreter # 应显示 /lib64/ld-2.28.so # 再试运行 ./ollama --version # 此时应成功输出版本号逻辑说明patchelf --set-interpreter直接修改ELF头部的程序解释器路径让内核加载时使用系统已有的ld-2.28.so而非二进制自带的高版本ld。这是信创环境中处理闭源二进制兼容性的标准手法比重编译更安全可控。参数/lib64/ld-2.28.so必须与ls -l /lib64/ld-*实际输出严格一致不能写错小数点或路径。2.3 绕过systemd依赖用nohup自定义PID文件启动服务无systemd环境必备麒麟V10桌面版默认用kylin-systemd兼容systemd接口但服务器版或精简版可能只有sysvinit。Ollama默认尝试连接/run/systemd/private失败则退出。我们跳过这步# 创建Ollama数据目录避免权限问题 sudo mkdir -p /var/lib/ollama sudo chown $USER:$USER /var/lib/ollama # 手动设置环境变量禁用systemd探测 export OLLAMA_HOST127.0.0.1:11434 export OLLAMA_ORIGINShttp://localhost:3000,http://127.0.0.1:3000 # 启动服务不依赖systemd nohup ./ollama serve /tmp/ollama.log 21 echo $! /tmp/ollama.pid # 验证服务是否监听 lsof -i :11434 | grep LISTEN # 应看到 ./ollama 进程 curl http://127.0.0.1:11434 # 应返回 {status:ok}参数说明OLLAMA_HOST强制绑定本地端口避免Ollama自动选端口OLLAMA_ORIGINS白名单放行chatbox前端域名否则CORS拦截nohup保证终端关闭后服务不退出/tmp/ollama.pid用于后续管理kill -9cat /tmp/ollama.pid。此方式在麒麟V10 SP1/SP2所有init类型systemd/sysv/upstart下均有效。3. 离线拉取DeepSeek模型用GGUF格式绕过PyTorch依赖用国内镜像加速下载Ollama官方模型库ollama run deepseek-coder:1.3b需联网拉取且默认走GitHub Releases国内访问极慢。我们必须提前下载GGUF模型文件再用ollama create本地构建模型。3.1 下载DeepSeek官方GGUF模型优先选Q4_K_M精度DeepSeek官方在Hugging Face提供GGUF格式模型由llama.cpp团队量化无需转换DeepSeek-Coder 1.3B Q4_K_Mhttps://huggingface.co/TheBloke/deepseek-coder-1.3b-instruct-GGUF/resolve/main/deepseek-coder-1.3b-instruct.Q4_K_M.ggufDeepSeek-Coder 7B Q4_K_Mhttps://huggingface.co/TheBloke/deepseek-coder-7b-instruct-GGUF/resolve/main/deepseek-coder-7b-instruct.Q4_K_M.ggufDeepSeek-VL 7B多模态轻量版https://huggingface.co/TheBloke/deepseek-vl-7b-chat-GGUF/resolve/main/deepseek-vl-7b-chat.Q4_K_M.gguf注意不要下载Q2_K或Q3_K麒麟V10内存有限建议≥16GBQ4_K_M在精度与速度间最平衡Q5_K_M体积翻倍但提速不足15%不划算。3.2 构建本地Ollama模型用Modelfile定义GGUF路径与参数创建Modelfile纯文本无扩展名内容如下FROM ./deepseek-coder-1.3b-instruct.Q4_K_M.gguf PARAMETER num_gpu 0 # 强制CPU推理避免找CUDA PARAMETER num_threads 8 # 根据CPU核心数设飞腾D2000为8核鲲鹏920为64核可设32 PARAMETER temperature 0.7 PARAMETER top_p 0.9 TEMPLATE {{ if .System }}begin▁of▁sentence{{ .System }}end▁of▁sentence{{ end }}{{ if .Prompt }}user{{ .Prompt }}end▁of▁sentence{{ end }}assistant SYSTEM 你是一个专业的代码助手专注于Python、Shell和国产化系统运维。请用中文回答简洁准确。逻辑说明FROM ./xxx.gguf告诉Ollama直接加载本地GGUF文件num_gpu 0是关键——Ollama在无CUDA环境会自动fallback到CPU但显式设为0可避免其尝试加载libcuda.so导致崩溃num_threads必须≤物理核心数设太高反而因上下文切换降低吞吐TEMPLATE和SYSTEM复现DeepSeek-Coder原生对话格式确保指令遵循率。此Modelfile语法是Ollama 0.1.40支持的标准兼容麒麟V10。3.3 构建并测试模型一条命令完成注册与基础推理# 将Modelfile和.gguf文件放在同一目录执行构建 ./ollama create deepseek-coder-1.3b -f Modelfile # 查看模型列表应包含deepseek-coder-1.3b ./ollama list # 本地测试推理不启动chatbox验证模型可用性 echo 写一个Python脚本读取/etc/passwd第1行并打印用户名 | ./ollama run deepseek-coder-1.3b预期输出一段正确Python代码如with open(/etc/passwd) as f: line f.readline().split(:)[0]; print(line)。若卡住或报错llama-server process exited大概率是.gguf文件损坏或num_threads超限见4.1节排查。4. 部署Chatbox客户端用Electron打包版绕过Node.js版本冲突直连本地OllamaOllama官方Web UIollama serve后访问http://localhost:11434功能简陋而Chatbox是社区热门的Electron客户端支持多会话、历史记录、自定义系统提示。但它依赖Node.js 18麒麟V10默认Node.js 12.22.12直接npm install必失败。解决方案用预编译的Chatbox Linux ARM64/AMD64二进制包。4.1 获取Chatbox离线安装包适配麒麟V10的Electron 23版本Chatbox官方发布页https://github.com/ChatboxAI/Chatbox/releases提供chatbox-linux-arm64.zip和chatbox-linux-x64.zip。注意选择v1.12.0版本2024年3月后发布因其Electron升级至23.x已修复ARM64下WebGL渲染崩溃问题飞腾D2000用户必选。# 下载对应架构包以ARM64为例 wget https://github.com/ChatboxAI/Chatbox/releases/download/v1.12.0/chatbox-linux-arm64.zip # 解压并验证 unzip chatbox-linux-arm64.zip cd chatbox-linux-arm64 ./chatbox --version # 应输出 v1.12.0 # 启动首次运行会初始化配置 ./chatbox提示若启动黑屏是麒麟V10默认Qt主题与Electron冲突。临时解决./chatbox --disable-gpu --disable-software-rasterizer。长期方案见4.2节。4.2 配置Chatbox连接本地Ollama修改config.json绕过HTTPS强制要求Chatbox默认要求Ollama API地址以https://开头但本地http://127.0.0.1:11434是HTTP。需手动编辑配置# Chatbox配置文件路径首次运行后生成 mkdir -p ~/.config/Chatbox nano ~/.config/Chatbox/config.json将apiUrl: https://...改为{ apiUrl: http://127.0.0.1:11434, model: deepseek-coder-1.3b, temperature: 0.7, maxTokens: 2048 }参数说明apiUrl必须为http://协议否则连接拒绝model字段填ollama list中显示的模型名不含tagmaxTokens建议设为2048DeepSeek-Coder 1.3B最大上下文为4096留余量防OOM。保存后重启Chatbox选择模型即可开始对话。4.3 中文输入法兼容解决麒麟V10下Chatbox无法输入中文问题麒麟V10默认ibus输入法框架与Electron 23存在兼容问题表现为光标闪烁但无文字上屏。解决方案是启用XIM协议# 启动Chatbox时指定输入法环境 export GTK_IM_MODULExim export QT_IM_MODULExim export XMODIFIERSimibus ./chatbox逻辑说明xim是X11传统输入法协议比ibus原生接口更底层兼容性更好。此三行环境变量可写入~/.bashrc永久生效或封装为启动脚本start-chatbox.sh。5. 常见问题排查这5个坑我踩过你不必再试5.1 现象ollama run deepseek-coder-1.3b卡住不动日志显示llama-server process exited原因GGUF文件损坏或num_threads超过CPU物理核心数导致线程调度死锁尤其在飞腾D2000的8核16线程上设num_threads 16必崩。解决重新下载.gguf文件用sha256sum校验将Modelfile中num_threads改为4D2000或16鲲鹏920 64核添加PARAMETER num_batch 512缓解内存压力。5.2 现象Chatbox启动后空白界面控制台报错Failed to load module canberra-gtk-module原因麒麟V10缺少声音提示模块Electron加载失败阻塞渲染。解决安装依赖sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module或启动时加参数./chatbox --disable-sound。5.3 现象Ollama服务启动后curl http://127.0.0.1:11434返回Connection refused原因OLLAMA_HOST环境变量未生效或端口被占用麒麟V10默认启用kylin-remote服务占11434。解决export OLLAMA_HOST127.0.0.1:11435换端口sudo netstat -tuln | grep :11434查占用进程并kill确认/tmp/ollama.pid对应进程真实运行。5.4 现象DeepSeek模型回答中文时乱码出现字符原因GGUF文件编码为UTF-8但Ollama服务未声明字符集麒麟V10 locale为zh_CN.gbk。解决启动Ollama前执行export LANGen_US.UTF-8或在Modelfile中添加ENV LANG en_US.UTF-8。5.5 现象Chatbox中发送消息后Ollama日志显示context full模型拒绝响应原因DeepSeek-Coder 1.3B最大上下文4096但Chatbox默认history保留过长累积token超限。解决在Chatbox设置中关闭Remember conversation history或修改config.json添加maxHistoryLength: 5限制最近5轮对话。6. 进阶技巧用Ollama API对接国产办公软件让WPS文档自动摘要Chatbox只是演示界面真正的价值在于Ollama提供的REST API。我在某省政务OA项目中用Python脚本调用本地Ollama实现WPS文字文档的自动摘要与关键词提取——全程离线不碰外网。6.1 编写摘要脚本用requests直连Ollama规避Python环境冲突麒麟V10自带Python 3.7.3足够调用API。脚本wps_summary.py如下#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests import sys import json def get_summary(text): url http://127.0.0.1:11434/api/generate payload { model: deepseek-coder-1.3b, prompt: f请用中文对以下政务公文进行30字以内摘要并提取3个关键词用JSON格式输出字段为summary和keywords\n{text[:2000]}, # 截断防超长 stream: False, options: { num_predict: 256, temperature: 0.3 } } try: response requests.post(url, jsonpayload, timeout120) response.raise_for_status() result response.json() return json.loads(result[response]) # 解析模型返回的JSON字符串 except Exception as e: return {error: str(e)} if __name__ __main__: if len(sys.argv) 2: print(Usage: python wps_summary.py wps_file_path) sys.exit(1) # 模拟从WPS读取文本实际需调用WPS COM接口或另存为txt sample_text 根据《XX省数字政府建设三年行动计划》2024年需完成全省政务云平台信创改造... result get_summary(sample_text) print(json.dumps(result, ensure_asciiFalse, indent2))关键点stream: False禁用流式响应确保一次拿到完整JSONnum_predict: 256限制输出长度防OOMjson.loads(result[response])是因为Ollama返回的response字段是字符串化的JSON需二次解析。此脚本在麒麟V10上无需额外pip安装开箱即用。6.2 集成到WPS用WPS宏调用Python脚本Windows远程麒麟桌面场景虽然标题是银河麒麟V10但实际业务常需Windows办公机远程操作麒麟服务器。WPS for Windows支持VBA调用外部程序Sub GetWPSSummary() Dim shell As Object Set shell VBA.CreateObject(WScript.Shell) 调用麒麟服务器上的Python脚本通过SSH Dim cmd As String cmd ssh user192.168.10.100 python3 /home/user/wps_summary.py ActiveDocument.Content.Text Dim exec As Object Set exec shell.Exec(cmd) 读取结果并插入文档 Dim result As String result exec.StdOut.ReadAll Selection.TypeText Text:result End Sub注意需提前配置SSH免密登录ActiveDocument.Content.Text获取当前文档全文生产环境应分段处理防超长。这是“windows 系统远程麒麟银河v10桌面系统”场景下的真实落地路径。6.3 模型热更新不重启Ollama服务动态切换DeepSeek不同版本Ollama支持ollama pull在线更新但离线环境需手动替换GGUF。技巧是利用Ollama的模型别名机制# 假设已有 deepseek-coder-1.3b ./ollama tag deepseek-coder-1.3b deepseek-coder:latest # 下载新版本GGUF如7B并构建 ./ollama create deepseek-coder-7b -f Modelfile-7b # 将latest指向新模型 ./ollama tag deepseek-coder-7b deepseek-coder:latest # Chatbox或API中仍用 deepseek-coder:latest自动生效 curl -X POST http://127.0.0.1:11434/api/chat -d {model:deepseek-coder:latest,messages:[{role:user,content:你好}]}这招让我在客户现场升级模型时零停机切换Chatbox用户无感知。本质是Ollama的tag机制——模型名只是指向GGUF文件的软链接tag命令修改指针比删重建快10倍。干了五年信创交付我最大的教训是别跟麒麟V10的glibc死磕也别幻想在离线环境装CUDA。OllamaGGUFChatbox这条链路是目前在国产CPU上跑通DeepSeek最稳的组合。它不炫技但能按时交付。希望帮到你。本文还有配套的精品资源点击获取
返回列表