嘘~ 正在从服务器偷取页面 . . .

【AI大模型应用学习笔记】基于llama.cpp的模型转换为GGUF格式+本地ollama部署和open-webui部署


使用环境

  • 软件环境:Windows11 + WSL2-Linux-Ubuntu22.04子系统
  • 硬件环境:GeForce RTX 4060 Ti 16GB

一、将 huggingface 转换为 GGUF 模型

1.1 创建虚拟环境

我们新建一个名叫llama.cpp的python虚拟环境

# 创建虚拟环境
conda create -n llama.cpp python=3.10

# 切换环境
conda activate llama.cpp

1.2 下载 llama. cpp仓库

在llama.cpp虚拟环境下

# 克隆仓库到本地
git clone https://github.com/ggerganov/llama.cpp.git

# 安装依赖
pip install -r llama.cpp/requirements.txt

1.3 转换模型

执行下列命令,其中/home/moyuai/moyuai/llm/Qwen/Qwen1-5-4B-Chat-train为自己本地的模型路径,Qwen1-5-4B-Chat-train-gguf.gguf是我们转换后设置的模型名字。

# 不进行模型量化,保留模型效果
python llama.cpp/convert_hf_to_gguf.py /home/moyuai/moyuai/llm/Qwen/Qwen1-5-4B-Chat-train --outtype auto --verbose --outfile Qwen1-5-4B-Ch
at-train.gguf

# 需要量化(加速模型但有损失效果),执行下面脚本
python llama.cpp/convert_hf_to_gguf.py /home/moyuai/moyuai/llm/Qwen/Qwen1-5-4B-Chat-train --outtype q8_0 --verbose --outfile /home/moyuai/moyuai/llm/GGUF/Qwen1-5-4B-Chat-train-q8.gguf

脚本参数说明:
这里--outtype是输出类型,代表含义:

  • q2_k:特定张量(Tensor)采用较高的精度设置,而其他的则保持基础级别。
  • q3_k_l、q3_k_m、q3_k_s:这些变体在不同张量上使用不同级别的精度,从而达到性能和效率的平衡。
  • q4_0:这是最初的量化方案,使用 4 位精度。
  • q4_1 和 q4_k_m、q4_k_s:这些提供了不同程度的准确性和推理速度,适合需要平衡资源使用的场景。
  • q5_0、q5_1、q5_k_m、q5_k_s:这些版本在保证更高准确度的同时,会使用更多的资源并且推理速度较 慢。
  • q6_k 和 q8_0:这些提供了最高的精度,但是因为高资源消耗和慢速度,可能不适合所有用户。
  • fp16 和 f32: 不量化,保留原始精度。

这里--outfile是输出文件名字和路径。

二、ollama本地部署调用模型

2.1 安装ollama

执行命令:

curl -fsSL https://ollama.com/install.sh | sh

2.2 启动ollama服务

执行命令:

ollama serve

2.3 创建ModelFile

复制模型路径,创建名为“ModelFile”的meta文件,内容如下:

#GGUF文件路径 
FROM /home/moyuai/moyuai/llm/ollama-models/Qwen1-5-4B-Chat-train.gguf

2.4 创建自定义模型

使用ollama create命令创建自定义模型,Qwen1-5-4B-Chat-train是我们命名的ollama模型名字,--file后面跟的是我们创建的ModeIFile文件路径。

ollama create Qwen1-5-4B-Chat-train --file /home/moyuai/moyuai/ModeIFile

2.5 运行模型

ollama run Qwen1-5-4B-Chat-train

其实这里运行后,我有测试过模型效果,发现非常差,所以就没放效果图。

三、使用 Open WebUI 部署模型

Open WebUI 是一个可扩展的、自托管的 AI 界面,可以适应您的工作流程,同时完全离线操作。
Open WebUI仓库: https://github.com/open-webui/open-webui
Open WebUI文档: https://docs.openwebui.com/

3.1 创建虚拟环境

我们在选择虚拟环境时,必须选用python3.11 版本,因为openwebui有要求。

conda create -n open-webui python=3.11

3.2 安装所需依赖

conda activate open-webui 
pip install -U open-webui torch transformers

3.3 运行ollama

ollama运行后会在本地端口暴露一个 openai API 服务,我们后面使用 open-webui 来连接就可以了。

ollama serve

3.4 启动open-webui

运行 open-webui 由于 ollama 的运行导致原终端阻塞,因此要另外开一个新终端 。

conda activate open-webui 
export HF_ENDPOINT=https://hf-mirror.com  # Hugging Face 镜像网站
export ENABLE_OLLAMA_API=True             # 访问ollama端口
export OPENAI_API_BASE_URL=http://127.0.0.1:11434/v1 # 导出ollama服务端口
export DEFAULT_MODELS="/home/moyuai/moyuai/llm/Qwen/Qwen1___5-4B-Chat"  # 加载默认模型
open-webui serve  # 启动服务

启动open-webui后,就可以在浏览器弹出的界面中使用我们训练的大模型了。

问题记录

1.执行 python llama.cpp/convert_hf_to_gguf.py 脚本时报错

报错信息如下:

# 完整命令
python llama.cpp/convert_hf_to_gguf.py /home/moyuai/moyuai/llm/Qwen/Qwen1-5-4B-Chat-train  --outtype f16 --verbose --outfile Qwen1-5-4B-C
hat-train-gguf.gguf

# 报错信息
usage: convert_hf_to_gguf.py [-h] [--vocab-only] [--outfile OUTFILE]
                             [--outtype {f32,f16,bf16,q8_0,tq1_0,tq2_0,auto}]
                             [--bigendian] [--use-temp-file] [--no-lazy]
                             [--model-name MODEL_NAME] [--verbose]
                             [--split-max-tensors SPLIT_MAX_TENSORS]
                             [--split-max-size SPLIT_MAX_SIZE] [--dry-run]
                             [--no-tensor-first-split] [--metadata METADATA]
                             [--print-supported-models] [--remote] [--mmproj]
                             [model]
convert_hf_to_gguf.py: error: unrecognized arguments:  --outtype f16

解决方法:是由于命令中–outtype命令前多了一个空格导致的


2. ollama serve启动报错

# 执行命令
ollama serve

# 报错信息
Error: listen tcp 127.0.0.1:11434: bind: address already in use

这个错误表明 Ollama 尝试在 127.0.0.1:11434 上启动服务时,发现该端口已经被占用。网上查找有两个解决方法,我是用的原因二解决的:

方法一

1. 检查端口占用

首先,确认 11434 端口是否被其他进程占用。

Windows下检查端口占用

打开命令提示符(CMD)或 PowerShell,运行以下命令:

netstat -ano | findstr :11434
  • 如果端口被占用,会显示类似以下内容:
    TCP    127.0.0.1:11434    0.0.0.0:0    LISTENING   12345
    其中 12345 是占用该端口的进程 ID(PID)。
Linux/macOS 下检查端口占用

运行以下命令:

sudo lsof -i :11434
  • 如果端口被占用,会显示类似以下内容:
    COMMAND PID  USER    FD   TYPE  DEVICE   SIZE/OFF NODE NAME
    ollama  172  ollama  3u   IPv4  4919680  0t0      TCP  localhost:11434 (LISTEN)

2. 终止占用端口的进程

如果发现端口被占用,可以终止占用该端口的进程。

Windows 下终止进程
  1. 找到占用端口的进程 ID(PID)。
  2. 运行以下命令终止进程:
    taskkill /PID 12345 /F
    其中 12345 是进程 ID。
Linux/macOS 下终止进程
  1. 找到占用端口的进程 ID(PID)。
  2. 运行以下命令终止进程:
    sudo kill -9 172
    其中 12345 是进程 ID。

方法二

是因为没有配置环境变量

1. 配置环境变量
  1. 打开默认建立的ollama.service文件
sudo vim /etc/systemd/system/ollama.service
  1. 看到默认的一些设置
[Unit]
Description=Ollama Service
After=network-online.target
 
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/data/1-software/1-setup/1-miniconda/bin:/data/1-software/1-setup/1-miniconda/condabin:/data/1-software/1-setup/1-miniconda/bin:/usr/bin:/usr/local/bin:/usr/local/cuda/bin:/usr/bin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
 
 
[Install]
WantedBy=default.target
  1. 在 [Service]下面增加环境配置参数
[Unit]
Description=Ollama Service
After=network-online.target
 
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/data/1-software/1-setup/1-miniconda/bin:/data/1-software/1-setup/1-miniconda/condabin:/data/1-software/1-setup/1-miniconda/bin:/usr/bin:/usr/local/bin:/usr/local/cuda/bin:/usr/bin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
 
 
Environment="OLLAMA_MODELS=/home/moyuai/moyuai/llm/ollama-models"
Environment="OLLAMA_HOST=0.0.0.0:11435"
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_NUM_PARALLEL=100"
Environment="OLLAMA_MAX_LOADED_MODELS=4"
Environment="OLLAMA_SCHED_SPREAD=1"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_DEBUG=1"
Environment="OLLAMA_ACCELERATE=1"
 
[Install]
WantedBy=default.target
  1. 按esc,输入“:wq”,退出文件编辑
2. 重新加载systemd配置并重启服务
  1. 重新加载systemd
sudo systemctl daemon-reload
  1. 启动服务
sudo systemctl start ollama
  1. 查看状态
sudo systemctl status ollama
  1. 若想停止服务
sudo systemctl stop ollama
  1. 设置开机自启动
sudo systemctl enable ollama
  1. 若想停止开机自启动
sudo systemctl disable ollama

最后重新执行ollama serve命令就成功解决。


更多实用文章和AI大模型应用开发文章欢迎到我个人博客来观看:墨宇Logic


文章作者: 墨宇Logic
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 墨宇Logic !
 上一篇
下一篇 
【AI大模型应用学习笔记】基于LLaMA-Factory的LlaMa3.2-1b模型微调弱智吧数据集全流程 【AI大模型应用学习笔记】基于LLaMA-Factory的LlaMa3.2-1b模型微调弱智吧数据集全流程
基于LLaMA-Factory模型微调框架,使用Unichat-llama3.2-Chinese-1B 和 弱智吧数据集 来进行模型微调训练、评估、量化、导出实现全过程
  目录