LLM - CentOS上离线部署Ollama+Qwen2.5-coder模型完全指南

文章目录


离线安装Ollama

Ollama下载

https://github.com/ollama/ollama/releases


Ollama硬件需求

Ollama 对硬件的基础要求较低,但不同规模的模型对资源的需求不同 .可参考如下配置:

模型参数 模型大小 建议 CPU 建议内存 建议显存 特点
1.5B 1.1GB 4 核 4~8GB 4GB 轻量级,普通文本处理
7B 4.7GB 8 核 16GB 14GB 硬件要求适中,性能较好
8B 4.9GB 8 核 16GB 14GB 略强于 7B,精度更高
14B 9GB 12 核 32GB 26GB 适合复杂任务,如数学推理、代码生成
32B 20GB 16 核 64GB 48GB 高精度任务
70B 43GB 32 核 128GB 140GB 大规模计算和高复杂度任务
671B 404GB 64 核 512GB 1342GB 超大规模,性能卓越

如果没有显卡,就不要折腾了,线上服务器16Core 32G内存, 无显存。 实测部署了个qwen2.5-coder 7B的模型, 对话延时400多秒... qwen2.5-coder 0.5B 延时近30秒, 每秒基本保持在5个token...基本无法使用。


Ollama 常用命令参考

ollama 提供了丰富的命令行工具,方便用户对模型进行管理。

bash 复制代码
   ollama --help:查看帮助信息。
    ollama serve:启动 Ollama 服务。
    ollama create <model-name> [-f Modelfile]:根据一个 Modelfile 文件导入模型。
    ollama show <model-name:[size]>:显示某个模型的详细信息。
    ollama run <model-name:[size]>:运行一个模型。若模型不存在会先拉取它。
    ollama stop <model-name:[size]>:停止一个正在运行的模型。
    ollama pull <model-name:[size]>:拉取指定的模型。
    ollama push <model-name>:将一个模型推送到远程模型仓库。
    ollama list:列出所有模型。
    ollama ps:列出所有正在运行的模型。
    ollama cp <source-model-name> <new-model-name>:复制一个模型。
    ollama rm <model-name:[size]>:删除一个模型。

Ollama安装

上传 ollama linux amd64.tgz到服务器 ,解压

bash 复制代码
# 解压安装包
tar -zxvf  ollama linux amd64.tgz

# 将 ollama 执行命令移动到 /usr/bin 目录下 (可选,为了后面的服务配置做准备)
sudo mv bin/ollama /usr/bin/ollama

# 创建执行用户 (可选 , 有 ollama 执行权限的用户都可以,这里我使用了root)
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)

Ollama 服务管理&开机启动

创建文件 /etc/systemd/system/ollama.service, 其中的 User 和 Group 根据上一步的选择填写

bash 复制代码
[Unit]
Description=ollama
After=local-fs.target sockets.target

[Service]
User=root
Group=root
RemainAfterExit=yes
ExecStart=/usr/bin/ollama serve
Restart=always
EnvirOnment="OLLAMA HOST=0.0.0.0"
EnvirOnment="OLLAMA ORIGINS=*"

[Install]
WantedBy-multi-user.target
bash 复制代码
# 加载配置
sudo systemctl daemon-reload
# 设置开机启动
sudo systemctl enable ollama
# 启动 ollama 服务
sudo systemctl start ollama

开启局域网访问 Ollama 服务

默认情况下,Ollama API 仅允许本机访问。如果需要局域网其他设备访问,需要修改 OLLAMA_HOSTOLLAMA_ORIGINS 环境变量

Windows

bash 复制代码
# Windows(CMD)设置
setx OLLAMA_HOST 0.0.0.0:11434
setx OLLAMA_ORIGINS *

Linux

临时方案(当前会话有效)​

bash 复制代码
export OLLAMA_HOST=0.0.0.0:11434
export OLLAMA_ORIGINS=*
sudo systemctl restart ollama  # 重启服务使配置生效

永久生效(推荐)​

​创建 systemd 配置文件, 适用于通过 systemd 管理的 Ollama 服务:

bash 复制代码
[Unit]
Description=ollama
After=local-fs.target sockets.target
 
[Service]
User=root
Group=root
RemainAfterExit=yes
ExecStart=/usr/bin/ollama serve
Restart=always
EnvirOnment="OLLAMA HOST=0.0.0.0"
EnvirOnment="OLLAMA ORIGINS=*"
 
[Install]
WantedBy-multi-user.target

重新加载配置并重启服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl status ollama
ss -tuln | grep 11434

离线安装模型

我们这里采用 gguf 模型安装方式

gguf 文件格式

GGUFGPT-Generated Unified Format )是新一代专为本地大语言模型(LLM)优化的文件格式,由 llama.cpp 团队设计,用于替代旧版 GGML 格式。

  • 目标:提升模型推理效率、兼容性和可扩展性,同时降低资源占用。
  • 典型特性
    • 单文件结构:模型权重、参数、元数据(如上下文长度)直接嵌入文件,无需外挂配置文件。
    • 跨平台兼容:原生适配 CPU/GPU/NPU 混合计算,支持量化模型(如 4-bit/5-bit)。
    • 动态扩展性:允许开发者灵活添加新功能(例如新增量化类型),无需破坏旧版本兼容性。

下载Qwen2.5-Coder-7B-Instruct-GGUF

访问 https://huggingface.co/Qwen ,查找我们要部署的Coder

  • Qwen2.5:阿里云通义千问模型系列的第 2.5 代版本,性能和功能相较于前代有优化。
  • Coder :表明该模型专为代码生成、理解与补全任务设计,擅长处理编程语言(如 Python、Java、C++ 等)。
  • 7B:模型参数量为 70 亿级别(7 Billion Parameters),属于中等规模模型。
  • Instruct :表示该模型经过指令微调(Instruction Tuning),能更精准理解用户指令并生成符合要求的响应。

请选择 GGUF格式的模型


格式选择 ( gguf 版本 )

Qwen/Qwen2.5-Coder-7B-Instruct-GGUF

这里需要结合模型具体的量化。

我们通过Ollama部署,就要去Ollama官网看下 7b支持情况

https://ollama.com/library/qwen2.5-coder:7b

Model Arch: Qwen2 :模型架构为 Qwen2,即阿里云通义千问模型的第二代架构。

Parameters: 7.62B :模型参数量为 7.62 亿(7.62 Billion Parameters)。

Quantization: Q4_K_M :模型经过 4-bit 量化 ,具体为 Q4_K_M 量化方法。

我们去找 Q4_K_M 格式的 GGUF文件

一般来说大模型文件会比较大,会被分片存储 。 上图就是两个文件,下面就要进行模型文件合并。 我们可以直接下载qwen2.5-coder-7b-instruct-q4_k_m.gguf

如果自己要合并的话可以下载llama.cpp
https://github.com/ggerganov/llama.cpp/releases
然后进到解压包里面使用命令进行合并, 通过如下命令
bash ./llama-gguf-split.exe --merge ../qwen2.5-7b-instruct-q4_k_m-00001-of-00002.gguf ../qwen2.5-7b-instruct-q4_k_m.gguf


构建Modelfile文件

将下载后的文件qwen2.5-coder-7b-instruct-q4_k_m.gguf上传到服务器的目录, 并重命名为 qwen2.5-coder-7b.gguf, 这里重命名为了方便Modelfile中FROM引用

Modelfile格式

命令 描述
FROM (必需的)引入使用的模型或者模型源文件。
PARAMETER 设置大模型的运行参数。
TEMPLATE 用于大模型请求的 prompt 提示词模板。
SYSTEM 设置大模型默认的系统消息。
ADAPTER 定义适用于模型的(Q)LoRA 适配器。
LICENSE 指定 license。
MESSAGE 指定消息历史。

在模型的同级目录下创建文件 Modelfile, 添加如下内容

java 复制代码
# 刚才命名的模型名
FROM ./qwen2.5-coder-7b.gguf

# 可以到 ollama 网站上的模型库去寻找, 如qwen2.5-coder-7b的见上图 https://ollama.com/library/qwen2.5-coder/blobs/e94a8ecb9327
# 直接复制 ollama 上的 Template 到如下三个双引号中间
TEMPLATE """

{{- if .Suffix }}<|fim_prefix|>{{ .Prompt }}<|fim_suffix|>{{ .Suffix }}<|fim_middle|>
{{- else if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}

# Tools

You may call one or more functions to assist with the user query.

You are provided with function signatures within <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>

For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}

"""

有的模型,比如qwq有参数,比如

如果后续运行有问题,可以在Modefile中添加参数

java 复制代码
# 这一步参考 ollama 上的 parameters, 但是 ollama 上的 qwen2.5-coder-7b 是没有参数的, 按照下面的格式添加即可
PARAMETER stop "<|im_start|>"	
PARAMETER stop "<|im_end|>"

加载并运行离线模型

bash 复制代码
# 通过模型描述文件, 创建并运行 qwen2.5 模型
ollama create qwen2.5-coder-7b -f  ./Modelfile
# 查看模型运行列表, 是否正在运行
ollama ls

测试

java 复制代码
# 通过 api 调用模型, 检测模型是否运行正常
curl --location --request POST 'http://127.0.0.1:11434/api/generate' \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen2.5-coder-7b",
    "stream": false,
    "prompt": "你好,你是谁?"
}' \
-w "Time Total: %{time_total}s\n"

model的名字,请保持和ollama create qwen2.5-coder-7b -f Modelfile中的一致

等待正常返回即可

我这里截一个0.5b的图

返回后,ollama ps (以0.5b的为例)就可以看到了(我之前看不到,以为有问题)


集成客户端

如何将 Chatbox 连接到远程 Ollama 服务:逐步指南

设置下 模型即可

对话如下


问题

缺少依赖

运行ollama ,报错

java 复制代码
./ollama: /lib64/libstdc++.so.6: version GLIBCXX_3.4.25 not found (required by ./ollama)

检查

java 复制代码
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

就然只到了3.4.24 , 我从 https://download.csdn.net/download/gyqhlbt/86752716 下载了一个

把原来的软连接删除,上传新的,重新软连一下 即可 ln -s


小结

其他的模型,也可以按照上面的方式来安装,别浪费了你的卡子, 赶紧私有化起来吧 '

'

相关推荐
AI大模型2 天前
基于 Ollama 本地 LLM 大语言模型实现 ChatGPT AI 聊天系统
程序员·llm·ollama
李大腾腾4 天前
3、JSON处理( n8n 节点用于交换信息的语言)
openai·workflow·ollama
陈佬昔没带相机4 天前
ollama 终于有UI了,但我却想弃坑了
人工智能·llm·ollama
李大腾腾5 天前
2、n8n 构建你的第一个 AI Agent
openai·agent·ollama
一包烟电脑面前做一天7 天前
RAG实现:.Net + Ollama + Qdrant 实现文本向量化,实现简单RAG
.net·向量数据库·ai大模型·rag·ollama·qdrant·文本分块
一包烟电脑面前做一天7 天前
MCP实现:.Net实现MCP服务端 + Ollama ,MCP服务端工具调用
.net·ai大模型·ollama·mcp·mcp服务端
简放9 天前
智能机票助手-接入Ollama本地模型-Spring-AI-Alibaba
spring boot·langchain·ollama
高克莱10 天前
【macOS操作系统部署开源DeepSeek大模型,搭建Agent平台,构建私有化RAG知识库完整流程】
macos·llm·agent·知识库·anythingllm·ollama·deepseek
GitLqr15 天前
AI洞察 | Manus 与 GPT-5 等最新动向
chatgpt·claude·ollama
大模型教程18 天前
大模型本地部署:手把手带你在Mac本地部署运行AI大模型
程序员·llm·ollama