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

发布于:2025-03-23 ⋅ 阅读:(36) ⋅ 点赞:(0)

在这里插入图片描述


离线安装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 提供了丰富的命令行工具,方便用户对模型进行管理。

   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到服务器 ,解压

# 解压安装包
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 根据上一步的选择填写

[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
# 加载配置
sudo systemctl daemon-reload
# 设置开机启动
sudo systemctl enable ollama
# 启动 ollama 服务
sudo systemctl start ollama

开启局域网访问 Ollama 服务

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

Windows

# Windows(CMD)设置
setx OLLAMA_HOST 0.0.0.0:11434
setx OLLAMA_ORIGINS *

Linux

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

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

永久生效(推荐)​

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

[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

重新加载配置并重启服务

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, 添加如下内容

在这里插入图片描述

# 刚才命名的模型名
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中添加参数

在这里插入图片描述

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

加载并运行离线模型

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

在这里插入图片描述

在这里插入图片描述

测试

# 通过 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 ,报错

./ollama: /lib64/libstdc++.so.6: version GLIBCXX_3.4.25 not found (required by ./ollama)

检查

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

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

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


小结

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

在这里插入图片描述