本篇记录学习使用llama factory微调模型的过程,使用ollama运行微调好的模型,使用open webui前端调用ollama的模型;
测试机信息:
系统:Ubuntu 24.04.2 LTS(桌面版)
cpu:i9-14900KF
内存:128G
显卡:RTX 4090 x 2
LLaMA Factory
安装llama factory
llama factory的git地址:LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory · GitHub
使用git下载,使用python安装,所以要先安装git和python;(系统安装的时候已经装了Python 3.12.3了)
先建立个python的虚拟环境:python3 -m venv llama-pyenv
会在当前目录下建立一个llama-pyenv的文件夹,激活虚拟环境:source ./llama-pyenv/bin/activate
然后根据官网说明,执行安装命令:
从git下载llama-facotry,并使用pip安装;
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
去魔搭社区下载模型需要安装:pip install modelscope (git网站:modelscope/README_zh.md at master · modelscope/modelscope · GitHub)
使用量化还需要安装:pip install bitsandbytes
进入llama-facotry目录(使相对路径在该文件夹下),cd LLaMA-Factory/
打开微调页面,执行:llamafactory-cli webui,至此就安装好了;
下载模型
模型库:模型库首页 · 魔搭社区
找到你需要的模型,例如DeepSeek-r1 14b这个:
点开,复制模型名:
使用命令下载:modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-14B,然后等待下载完成;
默认下载的模型目录:用户目录下的.cache/modelscope/hub/models/(cache前有个点)
进入llama-facotry新建个models目录:
cd ~/LLaMA-Factory/
mkdir models/
为了方便,把下载的模型复制过去:cp -r ~/.cache/modelscope/hub/models/ ~/LLaMA-Factory/models/
使用llama-facotry微调模型
打开llama-facotry的本地页面http://localhost:7860/,先选中文:
设置模型名称,并指定刚下载的模型路径,先测试一下对话,查看模型有没有问题:(训练完记得卸载模型,减少显存占用)
成功加载后,测试一下:
准备微调数据集,数据都在~/LLaMA-Factory/data目录里,目录下的README_zh.md为说明文件,dataset_info.json为配置数据集文件,其他的json是官方预先定义好的测试数据集;
修改自我认知,先复制一份官方的identity.json,cp identity.json my_identity.json
将my_identity.json里的{{name}}替换为ai自认为自己的名字,{{author}}替换为制作者名字:vi my_identity.json
将两个替换:
:%s/{{name}}/小白/g
:%s/{{author}}/上帝/g
将自己的数据配置到dataset_info.json里:vi dataset_info.json
添加自己的数据,修改完保存并退出:
然后去页面选择数据集并微调:
等待微调结束:
微调完毕右上角会弹窗,下面日志也会显示完成:
训练完的都在~/LLaMA-Factory/saves/目录下:
加载训练结果测试效果:
训练的认知已经改变了:
导出模型
导出微调的模型,设置检查点路径,分块大小和导出目录:
导出完成后,在~/LLaMA-Factory/out_models/目录下就能看到导出的模型了:
可以重新加载导出的模型聊天测试:
ollama
安装ollama
ollama安装说明:ollama/docs/linux.md at main · ollama/ollama · GitHub
直接命令行安装:curl -fsSL https://ollama.com/install.sh | sh
安装好后查看版本:ollama -v
查看帮助:ollama -h
启动ollama:ollama serve
ollama的配置文件是在/etc/systemd/system/目录下的ollama.service文件,编辑修改配置,添加:
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_KEEP_ALIVE=1h"
Environment="OLLAMA_MAX_LOADED_MODELS=2"
Environment="OLLAMA_NUM_PARALLEL=5"
Environment="OLLAMA_ORIGINS=192.168.1.*"
修改完后,执行:systemctl daemon-reload
并重启ollama:systemctl restart ollama
加载导出模型
之前看网上说导出的模型要先用llama.cpp转成gguf才能给ollama加载,后来我发现llama-factory导出时已经生成给ollama使用的Modelfile了,可以直接加载不用转换;
第一种方法,先说使用llama.cpp转换的方法:(繁琐不推荐)
去网站下载GitHub - ggml-org/llama.cpp: LLM inference in C/C++
解压zip后,使用里面的convert_hf_to_gguf.py转换,依旧使用llama-factory的py虚拟环境就可以;(source ~/llama-pyenv/bin/activate)
进行转换:python convert_hf_to_gguf.py ~/LLaMA-Factory/out_models/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B_myidentity/ --outfile ~/out_ollama_models/my_ds_14b.gguf
等待转换完成:
这个my_ds_14b.gguf就是转换完成的模型:
新建一个Modelfile文档,在里面输入“FROM 你的模型目录/模型名.gguf”,像这样:
然后命令使用ollama行加载模型:ollama create myds14b -f Modelfile,等待加载
查看加载的ollama的模型:ollama list
运行我们的模型:ollama run myds14b
查看ollama运行的模型:ollama ps
第二种方法,直接使用llama-factory导出时提供的Modelfile:
cd ~/LLaMA-Factory/out_models/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B_myidentity
ollama create myds14b_2 -f Modelfile
这个要多等待转换一会,然后:ollama list
也是可以的;
open webui
为了防止包冲突,也建一个python的虚拟环境,并激活:
python3 -m venv pyenv
source ~/pyenv/bin/activate
直接命令行安装open webui:pip install open-webui
启动:open-webui serve(可以使用--host和--port指定ip和端口)
打开open-webui:http://localhost:8080
设置管理员账号并登录;
左下角点击用户,打开管理员面板设置:
配置ollama:
对模型进行管理:
可以对单个模型进行一些设置:
选择模型,进行对话:
测试结果: