使用环境
- 软件环境: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 下终止进程
- 找到占用端口的进程 ID(PID)。
- 运行以下命令终止进程:
其中taskkill /PID 12345 /F
12345
是进程 ID。
Linux/macOS 下终止进程
- 找到占用端口的进程 ID(PID)。
- 运行以下命令终止进程:
其中sudo kill -9 172
12345
是进程 ID。
方法二
是因为没有配置环境变量
1. 配置环境变量
- 打开默认建立的ollama.service文件
sudo vim /etc/systemd/system/ollama.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"
[Install]
WantedBy=default.target
- 在 [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
- 按esc,输入“:wq”,退出文件编辑
2. 重新加载systemd配置并重启服务
- 重新加载systemd
sudo systemctl daemon-reload
- 启动服务
sudo systemctl start ollama
- 查看状态
sudo systemctl status ollama
- 若想停止服务
sudo systemctl stop ollama
- 设置开机自启动
sudo systemctl enable ollama
- 若想停止开机自启动
sudo systemctl disable ollama
最后重新执行ollama serve
命令就成功解决。
更多实用文章和AI大模型应用开发文章欢迎到我个人博客来观看:墨宇Logic