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

在这里插入图片描述


离线安装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

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

结果如下:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.6
GLIBC_2.4
GLIBC_2.3.2

第二步:拷贝 libstdc++.so.6.0.26 库到/usr/local/lib64目录

第三步:备份 libstdc++.so.6

mv  libstdc++.so.6 ./libstdc++.so.6.bak

第四步:建立建立软连接

ln -s libstdc++.so.6.0.26 libstdc++.so.6

第五步:查看软链接libstdc++.so.6
命令:ls -l libstdc++.so.6

结果如下:

lrwxrwxrwx. 1 root root 36 1230 16:01 libstdc++.so.6 -&gt; /usr/local/lib64/libstdc++.so.6.0.26

第六步:再检查运行时看看

strings  libstdc++.so.6 | grep GLIBC

结果如下:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.6
GLIBC_2.4
GLIBC_2.3.2

第七步:运行程序不会报了


小结

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

在这里插入图片描述

### qwen2.5-coder-7b 模型本地部署教程 #### 环境准备 为了成功部署 Qwen2.5-Coder-7B 模型,环境配置至关重要。确保安装了 Python 3.x 版本,并且推荐使用虚拟环境来管理依赖项。 所需的主要软件包及其最低版本如下: - `transformers` 库版本应不低于 4.37.0,这是加载模型所必需的工具[^4]。 - `accelerate` 库有助于提高模型运行效率,在资源有限的情况下尤为重要。 - `gradio` 是构建简单 Web 用户界面的理想选择,方便测试和展示模型功能。 可以通过 pip 安装这些库: ```bash pip install transformers>=4.37.0 accelerate gradio ``` #### 下载并克隆项目仓库 获取官方提供的 Qwen2.5-Coder-7B-Instruct Git 存储库,该存储库包含了必要的脚本和支持文件: ```bash git clone https://www.modelscope.cn/qwen/Qwen2.5-Coder-7B-Instruct.git cd Qwen2.5-Coder-7B-Instruct ``` 此命令会创建一个新的目录并将所有必要文件复制到当前工作区中[^1]。 #### 加载预训练模型 利用 Hugging Face 的 Transformers 库加载已预先训练好的 Qwen2.5-Coder-7B 模型实例。这一步骤通常涉及指定正确的权重路径以及设置设备参数(CPU 或 GPU),以便优化性能表现。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_name_or_path = "path_to_downloaded_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 如果有GPU可用,则移动模型至GPU if torch.cuda.is_available(): model.to('cuda') ``` 这段代码片段展示了如何初始化 tokenizer 和 model 对象,同时考虑到了硬件加速的可能性。 #### 创建Web应用程序接口 最后一步是集成 Gradio 来快速搭建一个简易但实用的网页版聊天机器人。Gradio 提供了一个简洁易用的方式让用户输入提示词并通过 API 获取来自 LLM 的响应。 ```python import gradio as gr def generate_response(prompt): inputs = tokenizer(prompt, return_tensors="pt").to(device=model.device) outputs = model.generate(**inputs, max_length=512) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response demo = gr.Interface(fn=generate_response, inputs="text", outputs="text") demo.launch() ``` 上述代码定义了一个函数 `generate_response()` ,它接受用户输入作为参数,并返回由模型生成的回答;接着通过调用 `launch()` 方法启动交互式的 web 页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值