麒麟 V10 (Lance) x86_64 GCC9.4.0 + Ollama 0.32.5 + Qwen3‑4B 部署总结
环境说明
- OS:Kylin Linux Advanced Server V10 (Lance) x86_64,系统自带 libstdc++ 最高 GLIBCXX_3.4.24
- GCC9.4.0:独立安装
/usr/local/gcc94,不替换系统库,提供 GLIBCXX_3.4.25~3.4.28- Ollama 版本:0.32.5,二进制包
ollama-linux-amd64.tar.zst- 模型本地文件:
/data/tangdou/llm/Qwen3-4B-Instruct-2507-Q4_K_M.gguf- 目标:后台 systemd 托管服务;模型 CPU 推理;API 传参 keep_alive:-1 实现常驻内存;服务重启自动预加载模型。
一、前置:独立编译部署 GCC‑9.4.0(不破坏系统)
- 源码解压至
/usr/local/src/gcc‑9.4.0,手动准备 gmp/mpfr/mpc 依赖包,软链接,不使用 download_prerequisites 脚本 - build 编译配置:
../configure \
--prefix=/usr/local/gcc94 \
--enable-languages=c,c++ \
--disable-multilib \
--without-isl- 编译,内存不足用
make -j1,安装到/usr/local/gcc94 - 校验:
strings /usr/local/gcc94/lib64/libstdc++.so.6 | grep GLIBCXX,确认包含GLIBCXX_3.4.25
⚠️禁止修改系统
/usr/lib64库;业务程序通过LD_LIBRARY_PATH=/usr/local/gcc94/lib64加载新版 libstdc++。
二、部署 Ollama 0.32.5
2.1 解压二进制包
cd /data/tangdou/ollama
tar -I zstd -xf ollama-linux-amd64.tar.zst
cp ./bin/ollama /usr/local/bin/
chmod +x /usr/local/bin/ollama2.2 systemd ollama.service 完整配置
/etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network.target
[Service]
Environment="HOME=/root"
Environment="LD_LIBRARY_PATH=/usr/local/gcc94/lib64:$LD_LIBRARY_PATH"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/data/tangdou/ollama/models"
Environment="OLLAMA_NUM_PARALLEL=2"
# ========== 常驻内存配置 ==========
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
# =================================
ExecStart=/usr/local/bin/ollama serve
MemoryHigh=22G
MemoryMax=26G
CPUShares=800
LimitNOFILE=65536
LimitNPROC=4096
Restart=always
RestartSec=5
RestartPreventExitStatus=
StandardOutput=journal+console
StandardError=journal+console
[Install]
WantedBy=multi-user.target2.3 开机预加载脚本(服务启动自动加载模型常驻内存)
/data/tangdou/ollama/preload_qwen.sh
#!/bin/bash
sleep 8
curl -s http://127.0.0.1:11434/api/generate -d '{
"model":"qwen3:4b",
"prompt":"hi",
"keep_alive":-1,
"stream":false
}' > /dev/nullchmod +x /data/tangdou/ollama/preload_qwen.sh2.4 启动服务与防火墙
systemctl daemon-reload
systemctl enable ollama
systemctl start ollama
systemctl status ollama
firewall-cmd --add-port=11434/tcp --permanent
firewall-cmd --reload校验端口监听:ss -tulpn | grep 11434
2.5 编写 Modelfile(keep_alive 不能写在此文件,属于 API 运行时参数)
路径 /data/tangdou/llm/Modelfile
# Qwen3‑4B‑Instruct Q4_K_M 麒麟V10 海光虚拟机
from ./Qwen3-4B-Instruct-2507-Q4_K_M.gguf
parameter num_ctx 8192
parameter num_batch 256
parameter num_thread 2
parameter num_gpu 0
parameter low_vram true
parameter temperature 0.7
parameter top_p 0.8
parameter repeat_penalty 1.05
# 0.32.5 最大输出token参数叫 num_predict,不是max_tokens
parameter num_predict 2048
parameter repeat_last_n 64
# stop停止标记,0.32.5只能用parameter stop
parameter stop "<|end|>"
parameter stop "<|user|>"
parameter stop "<|assistant|>"
template """{{if .System}}<|system|>
{{ .System }}<|end|>
{{end}}
{{range .Messages}}
{{if eq .Role "user"}}<|user|>
{{ .Content }}<|end|>
{{end}}
{{if eq .Role "assistant"}}<|assistant|>
{{ .Content }}<|end|>
{{end}}
{{end}}
<|assistant|>
"""
system "你是Qwen3 AI助手,请简洁准确回答用户问题。"2.6 构建 ollama 模型镜像
shell 环境缺少新版 libstdc++,cli 客户端必须带上 LD_LIBRARY_PATH
cd /data/tangdou/llm
LD_LIBRARY_PATH=/usr/local/gcc94/lib64:$LD_LIBRARY_PATH /usr/local/bin/ollama create qwen3:4b -f ./Modelfile校验:
LD_LIBRARY_PATH=/usr/local/gcc94/lib64:$LD_LIBRARY_PATH /usr/local/bin/ollama list三、调用方式 & 常驻内存规则
- 常驻内存实现:API 请求携带
"keep_alive":‑1
- 不能写在 Modelfile;首次加载请求带上,模型将永久驻留内存,空闲不会自动卸载。
- ollama 服务重启,内存模型丢失;依靠
ExecStartPost脚本自动重新加载。
示例调用:
curl http://127.0.0.1:11434/api/chat -d '{
"model":"qwen3:4b",
"messages": [{"role":"user","content":"你的问题"}],
"keep_alive":-1,
"stream":false
}'手动从内存卸载模型:
curl http://127.0.0.1:11434/api/generate -d '{"model":"qwen3:4b","keep_alive":0}'四、关键踩坑清单
- ollama 二进制依赖高版本 GLIBCXX,shell 的 export 环境变量对 systemd 服务无效,必须写在 service 的
Environment; - systemd 缺少
HOME环境变量,ollama 直接崩溃循环重启; - 旧版 ollama Modelfile 不支持
PARAMETER keep_alive,keep_alive 是 API 请求参数; - shell 执行 ollama cli 命令,必须手动带上
LD_LIBRARY_PATH=/usr/local/gcc94/lib64:$LD_LIBRARY_PATH前缀;curl 调用接口不需要 ollama cli; - 编译 GCC 不要替换系统 libstdc++.so.6,会造成系统命令损坏;
- 模型常驻内存仅在 ollama serve 进程存活期间有效,重启服务内存模型清空。
五、性能参考
Qwen3‑4B‑Q4_K_M,纯 CPU 推理,内存占用约 3.3‑3.8G,吞吐约 7‑8 token/s。
建议服务器可用内存≥6G。