国产软硬件适配|飞龙RM5000-F(飞腾CPU)+麒麟系统 Ollama离线部署教程(小白也能懂)
前两天有为网友私信讨论了一下国产硬件+麒麟系统部署大模型的问题。一开始我也是有点懵的。因为之前我没接触过国产CPU和显卡。大脑里有点空白,就连麒麟系统其实也很陌生。聊着聊着吧,发现需求并非这么简单。服务器还没显卡,还不连互联网,需要docker部署,局域网内用户还要可以访问。以我之前的经验,基本知道即便部署起来,实际用户体验也不会好到哪里去。但是,朋友提了需求,拿就得想办法去解决呗。于是开始各种找资料。
经过两天时间学习,基本上总结了一个方案。
一、适用情况(对号入座)
硬件:
飞龙RM5000-F服务器(搭配飞腾FT-2000+ CPU,ARM64架构,64核2.2GHz),没有独立显卡,内存至少16GB(不够会卡顿)系统:麒麟系统(不管是Debian/Ubuntu版,还是RHEL/CentOS版都能用)环境限制:服务器不连外网,只能离线操作,想用Docker装(容器化更稳,不容易出问题)核心需求:装Ollama大模型,搭自己的知识库(比如公司文档、专业资料),实现离线问答,还能让同一局域网的电脑、手机都访问使用
二、核心思路(不用懂原理,跟着做就行)
离线环境下就四步走:先在能上网的机器下好所有东西→拷贝到离线服务器→装容器和模型→搭知识库。用到的工具都给大家说清楚,不用额外找:
容器工具:Docker(专门适配ARM64架构的版本,咱们离线装)大模型:Ollama(纯靠CPU跑,选轻量版的,4-bit量化后不占资源)知识库工具:LlamaIndex+Chroma(本地存数据,不用连远程数据库)嵌入模型:bge-small-zh-v1.5(专门处理中文,体积小,CPU也能带动)
三、提前准备(联网机器上弄,就一次)
找一台能上网、且和服务器最好同架构的ARM64 Linux机器(比如另一台麒麟、Ubuntu ARM64电脑),把所有需要的文件下好打包,之后用U盘或内网拷贝到离线服务器就行。
1. 下Docker离线安装包(服务器没装过Docker就弄)
打开Docker官方网站下载离线包,选和服务器系统对应的版本(比如麒麟V10就选Ubuntu 20.04的)下载3个ARM64架构的包:docker-ce、docker-ce-cli、containerd.io(麒麟Debian版下.deb后缀,RHEL版下.rpm后缀)打包成一个文件,方便拷贝:Debian版输tar -zcvf docker-offline.tar.gz *.deb,RHEL版输tar -zcvf docker-offline.tar.gz *.rpm
2. 下Ollama镜像和模型(核心组件)
(1)Ollama ARM64镜像
# 这个命令会自动下ARM64版本,官方镜像自带多架构,不用手动选
docker pull ollama/ollama:latest
# 把镜像存成包,方便拷贝到离线服务器
docker save -o ollama-arm64.tar ollama/ollama:latest
小提醒:Ollama官方镜像自带ARM64版本,在ARM机器上执行命令,Docker会自动识别下载对应版本,不用额外设置。
(2)轻量模型(离线能用,不卡CPU)
# 下中文友好的轻量模型,qwen2:0.5b版最稳,CPU跑着流畅
ollama pull qwen2:0.5b-instruct-q4_0
# 把模型目录打包,默认存在用户目录下的.ollama/models里
tar -zcvf ollama-models.tar.gz ~/.ollama/models
3. 下载Python依赖和嵌入模型(搭知识库用)
(1)Python离线依赖包
# 建个目录存依赖,避免乱
mkdir -p python-packages
# 下载搭知识库需要的所有依赖,都是适配ARM64的
pip download llama-index chromadb pypdf sentence-transformers gradio -d ./python-packages
# 打包起来
tar -zcvf python-packages.tar.gz python-packages/
(2)离线嵌入模型(处理中文知识库)
下bge-small-zh-v1.5就行,才100MB左右,纯CPU也能跑,处理中文很顺手,打包后拷贝:
# 方式1:用git克隆(联网机操作,慢的话换方式2)
git clone https://huggingface.co/BAAI/bge-small-zh-v1.5
tar -zcvf bge-small-zh-v1.
5.tar.gz bge-small-zh-v1.
5/
# 方式2:手动下载(git克隆失败用这个)
# 打开https://huggingface.co/BAAI/bge-small-zh-v1.5/tree/main,把所有文件下载下来
# 手动建个同名目录放进去,再打包,目录结构别乱就行
4. 准备自己的知识库文档
把你要导入的文档(TXT、PDF、Markdown都行)整理好,打包成一个文件:
# 建个目录放文档
mkdir -p knowledge-
base
# 把你的文档都放进这个目录,再打包
tar -zcvf knowledge-
base.tar.gz knowledge-
base/
5. 拷贝所有文件到离线服务器
先在离线的麒麟服务器上建个目录,统一放这些文件,避免乱:mkdir -p /root/offline,然后把以下6个文件都拷贝到这个目录里:
docker-offline.tar.gz(Docker离线安装包)ollama-arm64.tar(Ollama镜像包)ollama-models.tar.gz(Ollama模型包)python-packages.tar.gz(Python依赖包)bge-small-zh-v1.5.tar.gz(嵌入模型包)knowledge-base.tar.gz(你的知识库文档包)
四、核心部署(离线服务器上操作,一步一步来)
步骤1:离线装Docker(分系统操作,别装错)
麒麟(Debian/Ubuntu版)
# 进入存离线包的目录
cd /root/offline
# 解压Docker安装包
tar -zxvf docker-offline.tar.gz
# 按顺序装这三个包,忽略依赖警告就行
sudo dpkg -i containerd.io_*.deb docker-ce-cli_*.deb docker-ce_*.deb
# 启动Docker,设置开机自启(下次服务器重启自动运行)
sudo systemctl start docker
sudo systemctl enable docker
# 验证下是否装成,能显示版本号就没问题
docker --version
麒麟(RHEL/CentOS版)
# 进入目录
cd /root/offline
# 解压
tar -zxvf docker-offline.tar.gz
# 安装
sudo rpm -ivh containerd.io-
*.rpm docker-ce-cli-
*.rpm docker-ce-
*.rpm
# 启动并设自启
sudo systemctl start docker && sudo systemctl enable docker
步骤2:导入Ollama镜像和模型(让Docker能用)
(1)导入Ollama镜像
cd /root/offline
# 导入镜像到Docker
sudo docker load -i ollama-arm64.tar
# 看看是否导入成功,能看到ollama/ollama:latest就对了
sudo docker images
(2)导入模型(持久化存储,下次不用再导)
# 建个模型目录
mkdir -p ~/ollama/models
# 解压模型包,直接放到指定目录,去掉多余层级
tar -zxvf ollama-models.tar.gz -C ~/ollama --strip-components=2
# 给权限,避免Docker访问不了
sudo chmod -R 777 ~/ollama/models
步骤3:启动Ollama容器(纯CPU模式,支持局域网访问)
sudo docker run -d \
--name ollama-cpu \
# 给容器起个名字,好管理
--restart=always \
# 服务器重启后自动启动容器
-v ~
/ollama/models:/root/.ollama \
# 挂载模型目录,容器能读取
-e OLLAMA_CPU=
1 \
# 强制用CPU跑,因为没有显卡
-e OLLAMA_NUM_PARALLEL=
32 \
# 用32线程,适配64核CPU,不浪费资源
-e OLLAMA_MAX_MEMORY=
16GB \
# 限制用16GB内存,防止卡死
-e OLLAMA_HOST=
0.
0.
0.
0:11434 \
# 关键!允许局域网所有设备访问
-p
11434:11434 \
# 端口映射,把容器端口暴露给服务器
ollama/
ollama:latest
# 看看容器是否启动成功,状态是UP就没问题
sudo docker ps
# 有问题就看日志排查
sudo docker logs -f ollama-cpu
局域网访问说明:上面的-e OLLAMA_HOST=0.0.0.0:11434和-p 11434:11434这两个配置是关键,能让同一局域网的电脑、手机,通过“服务器局域网IP:11434”访问这个Ollama服务,不管是对话、调API还是用知识库都能用。
步骤4:搭自有知识库(离线也能查自己的资料)
(1)装Python离线依赖
cd /root/offline
# 解压依赖包
tar -zxvf python-packages.tar.gz
# 离线安装,不用连网
pip install --
no-
index --find-links=./python-packages llama-
index chromadb pypdf sentence-transformers gradio
(2)导入嵌入模型
# 建个目录存嵌入模型
mkdir -p ~/offline-models
# 解压到这个目录
tar -zxvf bge-small-zh-v1.5.tar.gz -C ~/offline-models/
(3)准备知识库文档
# 建目录存自己的文档
mkdir -p ~/knowledge-
base
# 解压文档包
tar -zxvf knowledge-
base.tar.gz -C ~/knowledge-
base/
(4)写个脚本(一键启动知识库问答)
新建一个叫offline_kb_qa.py的文件,把下面的代码复制进去就行,全程不用连网,代码里都加了注释,不用懂Python也能抄:
# 导入需要的工具
from llama_index.core
import SimpleDirectoryReader, VectorStoreIndex, StorageContext
from llama_index.core
import Settings
from llama_index.embeddings.huggingface
import HuggingFaceEmbedding
from llama_index.llms.ollama
import Ollama
from llama_index.vector_stores.chroma
import ChromaVectorStore
import chromadb
import gradio
as gr
# 1. 配置中文嵌入模型(填咱们刚才解压的路径)
embed_model = HuggingFaceEmbedding(
model_name=
"/root/offline-models/bge-small-zh-v1.5",
embed_batch_size=
16 # 适配CPU性能,不卡顿
)
# 2. 连接本地Ollama服务
llm = Ollama(
model=
"qwen2:0.5b-instruct-q4_0",
# 用咱们导入的轻量模型
base_url=
"http://localhost:11434",
# 连接Docker里的Ollama
temperature=
0.1 # 回答更精准,不瞎编
)
# 3. 全局设置(固定配置,不用改)
Settings.llm = llm
Settings.embed_model = embed_model
Settings.chunk_size =
512 # 文档拆分大小,适配小模型
Settings.chunk_overlap =
50 # 拆分后留部分重叠,检索更准
# 4. 加载自己的知识库文档
documents = SimpleDirectoryReader(
"/root/knowledge-base").load_data()
# 5. 本地建向量库(存文档向量,不用远程)
chroma_client = chromadb.PersistentClient(path=
"/root/local-chroma-db")
chroma_collection = chroma_client.get_or_create_collection(
"my_kb")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 6. 构建索引,创建问答引擎
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
query_engine = index.as_query_engine(similarity_top_k=
5)
# 找5个最相关的文档片段
# 7. 问答函数(对接Web界面)
def kb_qa(question):
response = query_engine.query(question)
return str(response)
# 8. 启动Web界面(可选,局域网能访问)
if __name__ ==
"__main__":
gr.Interface(
fn=kb_qa,
inputs=
"text",
# 输入问题的地方
outputs=
"text",
# 显示回答的地方
title=
"飞龙RM5000-F离线知识库问答",
description=
"无网也能用,只回答你知识库中的内容(飞腾CPU驱动)"
).launch(server_name=
"0.0.0.0", server_port=
7860)
# 局域网可访问
(5)启动知识库问答
# 先确保Ollama容器在运行
sudo docker start ollama-cpu
# 运行脚本,启动Web界面
python3 offline_kb_qa.py
步骤5:验证是否成功(4步搞定,不踩坑)
本地验证:在服务器终端输curl http://localhost:11434,能返回一串带版本号的信息,就说明Ollama服务正常;
局域网验证:在同一局域网的电脑上,打开浏览器输http://[服务器局域网IP]:11434,能返回同样的信息,说明局域网能访问;
Web界面验证:浏览器输http://[服务器局域网IP]:7860,能看到问答界面,输入问题(比如“我的知识库有哪些内容”),能返回回答就没问题;
API调用验证:局域网电脑终端输下面的命令(替换成服务器IP),能收到回答就说明API能用:
curl http://[服务器局域网IP]:11434/api/generate -d "{
\"model\":
\"qwen2:0.5b-instruct-q4_0\",
\"prompt\":
\"你好\"
}"
小提醒:里面的双引号前面加了反斜杠,别删,不然会报错;
速度验证:进容器输docker exec -it ollama-cpu ollama run qwen2:0.5b-instruct-q4_0 --verbose,日志里的“eval rate”就是每秒输出的字符数,飞龙服务器估计理论能跑这个模型大概18-25。
五、提速小技巧(适配飞龙服务器,跑得更顺)
1. CPU和内存优化(充分利用64核性能)
容器参数就按我给的来:-e OLLAMA_NUM_PARALLEL=32(用一半核心,既够快又不占满)、-e OLLAMA_MAX_MEMORY=16GB(按实际修改,避免内存不够卡死);模型就选qwen2:0.5b或1.5b版,4-bit量化的,12-25字符/秒的速度,日常用足够,别选7B及以上的,CPU扛不住;关闭swap分区(输sudo swapoff -a),开启CPU性能模式(输sudo cpupower frequency-set -g performance),飞龙CPU的性能能拉满。
2. 知识库优化(回答更精准)
文档预处理:大PDF(超过100MB)拆成小文件,删掉没用的内容(比如页眉页脚),检索更准;调整参数:大文档把chunk_size改成1024,小文档改成256,similarity_top_k设3-5就行,太多反而乱;权限优化:向量库目录别直接设777(虽然后台能用,但不安全),输sudo chown -R $USER:$USER /root/local-chroma-db,精准授权更稳妥。
六、常见问题排查(遇到问题不用慌)
遇到的问题
怎么解决
装Docker时提示缺依赖
先装系统依赖:Debian版输sudo apt install -y libseccomp2,RHEL版输sudo dnf install -y libseccomp
Ollama容器启动后闪退
输docker logs ollama-cpu看日志;检查模型目录权限;把OLLAMA_MAX_MEMORY改成12GB试试
模型加载失败,提示文件缺失
看看~/ollama/models/blobs里有没有大文件,没有就重新导入模型包,可能是拷贝时损坏了
知识库加载不了,提示无法读取文档
确保装了pypdf依赖(离线包已包含);文档只能是PDF、TXT、MD格式,别用其他格式
局域网访问不了Web界面或API
先放行端口:sudo firewall-cmd --permanent --add-port=7860/tcp --add-port=11434/tcp && sudo firewall-cmd --reload;再排查:1. 用ip addr查服务器局域网IP对不对;2. 用docker ps看端口是否映射成0.0.0.0:11434->11434/tcp;3. 用ps aux | grep python3看脚本是否在运行
七、总结(一句话概括,放心用)
这个方案专门适配飞龙RM5000-F服务器(飞腾FT-2000+ CPU)和麒麟离线环境,全程不用连网,按“联网下文件→拷贝→部署→用”的流程来,选qwen2:0.5b模型最稳,局域网里多设备都能访问,不管是日常问答还是查自己的知识库都够用。
有些代码和参数根据实际情况进行修改。
#ollama##AI大模型##国产服务器##麒麟系统#