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 }}# ToolsYou 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.rhkb.cn/news/38290.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——信号

目录 Linux——信号1.信号的基础了解2.技术应用角度的信号3.产生信号3.1按键组合3.2系统调用产生信号3.2.1 kill()3.2.2 raise()3.2.3 abort() 3.3**.** 软件条件产生信号3.4硬件异常产生信号3.4.1 /0异常3.4.2 内存越界异常 4.理解信号的存在5.总结一下6.核心转储7.全部信号都…

向量叉积的应用——正反画画

1 解题思路 解题思路涉及的向量积相关知识 c实现 #include<iostream> #include<vector>using namespace std;struct TrianglePoint {int x;int y; };int momentForce(TrianglePoint A, TrianglePoint B, TrianglePoint C) {//AB向量&#xff1a;(B.x-A.x, B.y-A.…

构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据

构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据 概述 本文将指导开发者构建一个MCP(Model Control Protocol)天气服务器,通过暴露get-alerts和get-forecast工具,为Claude for Desktop等客户端提供实时天气数据支持。该方案解决了传统LLM无法直接获取天气…

Web安全策略CSP详解与实践

引言 &#xff1a;在黑客攻击频发的今天&#xff0c;你的网站是否像“裸奔”一样毫无防护&#xff1f;跨站脚本&#xff08;XSS&#xff09;、数据注入等攻击随时可能让用户数据泄露。今天我们将揭秘一个网站的隐形保镖——内容安全策略&#xff08;CSP&#xff09;&#xff0c…

HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述

这个是上一年的项目&#xff0c;之前弄得不怎么完整&#xff0c;只有一个openmv的&#xff0c;所以openmv自己去我主页找&#xff0c;这篇主要讲蓝牙 这个是我在使用openmv连接单片机1然后单片机1与单片机2通过蓝牙进行通信 最终实现的效果是&#xff1a;openmv识别到图形和数…

点云分割方法

点云分割 通过判断三维距离&#xff0c;实现对创建3团点云的分割 通过判断三维距离&#xff0c;实现对创建3团点云的分割 * 点云1 gen_object_model_3d_from_points (rand(100), rand(100),rand(100), Points1)* 点云2 gen_object_model_3d_from_points (rand(100), 2rand(100…

SpringBoot3使用CompletableFuture时java.util.ConcurrentModificationException异常解决方案

问题描述 在Spring Boot 3项目中&#xff0c;使用CompletableFuture进行异步编程时&#xff0c;偶发{"code":500,"msg":"java.util.ConcurrentModificationException"}异常&#xff0c;但代码中并未直接操作List或CopyOnWriteArrayList等集合类…

细说卫星导航:测距定位原理

测距定位原理 1. 伪距测量技术 核心原理&#xff1a;卫星发射信号&#xff0c;用户接收并记录传播时间&#xff0c;乘以光速得到距离&#xff08;伪距&#xff09;。 技术细节&#xff1a; 信号传播路径分析 信号结构&#xff1a; 卫星信号包含三部分&#xff1a; 载波&…

Linux系统管理与编程09:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 5 …

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…

RK3568 I2C底层驱动详解

前提须知&#xff1a;I2C协议不懂的话就去看之前的内容吧&#xff0c;这个文章需要读者一定的基础。 RK3568 I2C 简介 RK3568 支持 6 个独立 I2C: I2C0、I2C1、I2C2、I2C3、I2C4、I2C5。I2C 控制器支持以下特性: ① 兼容 i2c 总线 ② AMBA APB 从接口 ③ 支持 I2C 总线主模式…

UNIX网络编程笔记:基本TCP套接字编程

一、socket函数 一、socket函数核心参数与协议组合 函数原型与基本功能 #include <sys/socket.h> int socket(int family, int type, int protocol);• 功能&#xff1a;创建通信端点&#xff08;套接字&#xff09;&#xff0c;返回描述符供后续操作。 • 返回值&#…

JSON在AutoCAD二次开发中应用场景及具体案例

配置文件的读取 在AutoCAD插件开发中&#xff0c;可能需要生成、修改、读取配置文件中一些参数或设置。JSON格式的配置文件易于编写和修改&#xff0c;且可以方便地反序列化为对象进行使用。 运行后效果如下 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.Au…

自由学习记录(46)

CG语法的数据类型 // uint : 无符号整数&#xff08;32位&#xff09; // int : 有符号整数&#xff08;32位&#xff09; // float : 单精度浮点数&#xff08;32位&#xff09;&#xff0c;通常带后缀 f&#xff08;如 1.0f&#xff09; // half : 半精度浮…

解决Selenium滑动页面到指定元素,点击失效的问题

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:君失臣兮龙为鱼&#xff0c;权归臣兮鼠变虎&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

Vue基础

目录 -Vue基础- 1、插值表达式 {{}} 2、Vue核心特性&#xff1a;响应式 3、开发者工具Vue Devtools(极简插件下载) 4、Vue指令 v-text v-html v-bind v-on v-if v-show v-for v-model 5、Vue指令修饰符 .stop .prevent .capture .self .once .enter、.tab、…

收数据花式画图plt实战

目录 Python plt想把纵坐标化成对数形式代码 子图ax. 我又有ax scatter&#xff0c;又有ax plot&#xff0c;都要去对数 数字接近0&#xff0c;取对数没有定义&#xff0c;怎么办 创建数据 添加一个小的常数以避免对数未定义的问题 创建一个figure和一个子图ax 在子图a…

二项式分布(Binomial Distribution)

二项式分布&#xff08;Binomial Distribution&#xff09; 定义 让我们来看看玩板球这个例子。假设你今天赢了一场比赛&#xff0c;这表示一个成功的事件。你再比了一场&#xff0c;但你输了。如果你今天赢了一场比赛&#xff0c;但这并不表示你明天肯定会赢。我们来分配一个…

【算法工程】大模型开发之windows环境的各种安装

1. 背景 最近由于研究需要&#xff0c;我购置了两块3090显卡&#xff0c;以便在家中进行一些小规模的实验。为此&#xff0c;还更换了主机。当然&#xff0c;新系统上少不了要安装各种开发环境。从开发体验来看&#xff0c;macOS无疑更为流畅&#xff0c;但为了确保所有环境都能…

论文阅读笔记:Denoising Diffusion Probabilistic Models (2)

接论文阅读笔记&#xff1a;Denoising Diffusion Probabilistic Models (1) 3、论文推理过程 扩散模型的流程如下图所示&#xff0c;可以看出 q ( x 0 , 1 , 2 ⋯ , T − 1 , T ) q(x^{0,1,2\cdots ,T-1, T}) q(x0,1,2⋯,T−1,T)为正向加噪音过程&#xff0c; p ( x 0 , 1 , …