当前位置: 首页 > article >正文

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

文章目录

  • 离线安装Ollama
    • Ollama下载
    • Ollama硬件需求
    • Ollama 常用命令参考
    • Ollama安装
    • Ollama 服务管理&开机启动
    • 开启局域网访问 Ollama 服务
  • 离线安装模型
    • gguf 文件格式
    • 下载Qwen2.5-Coder-7B-Instruct-GGUF
    • 格式选择 ( gguf 版本 )
    • 构建Modelfile文件
    • 加载并运行离线模型
    • 测试
  • 集成客户端
  • 问题
    • 缺少依赖
  • 小结

在这里插入图片描述


离线安装Ollama

Ollama下载

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

在这里插入图片描述


Ollama硬件需求

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

模型参数模型大小建议 CPU建议内存建议显存特点
1.5B1.1GB4 核4~8GB4GB轻量级,普通文本处理
7B4.7GB8 核16GB14GB硬件要求适中,性能较好
8B4.9GB8 核16GB14GB略强于 7B,精度更高
14B9GB12 核32GB26GB适合复杂任务,如数学推理、代码生成
32B20GB16 核64GB48GB高精度任务
70B43GB32 核128GB140GB大规模计算和高复杂度任务
671B404GB64 核512GB1342GB超大规模,性能卓越

如果没有显卡,就不要折腾了,线上服务器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


小结

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

在这里插入图片描述


http://www.kler.cn/a/597046.html

相关文章:

  • CCF-CSP认证 202206-2寻宝!大冒险!
  • 详解简单选择排序
  • LeetCode 160 Intersection Of Two Linked Lists 相交链表 Java
  • 简单实用!百度AI + Raphael AI = 免费生图
  • 第十四届蓝桥杯省赛电子类单片机学习记录(客观题)
  • [笔记.AI]多头自注意力机制(Multi-Head Attention)
  • 计划变动的坐标系-基线
  • MyBatis-Plus 自动填充:优雅实现创建/更新时间自动更新!
  • SQL之delete、truncate和drop区别
  • JavaScript基础-DOM事件流
  • 【CSS文字渐变动画】
  • 在Mac M1/M2芯片上完美安装DeepCTR库:避坑指南与实战验证
  • OpenCV图像处理:分割、合并、打码、组合与边界填充
  • 一区思路!
  • Linux线程控制封装及线程互斥
  • MyBatis XML配置从零开始:高效处理数据库映射与查询!!!
  • C#基础学习(二)C#数组生存手册:从入门到“血压拉满“的奇妙旅程
  • 人工智能将使勒索软件更加危险
  • 【信息系统项目管理师】【论文分享】【历年真题】​论信息系统项目的成本管理
  • 数字电子技术(三十二)——组合逻辑电路的特点和基本设计方法