Llama_Factory
Llama_Factory是一个支持多种模型,覆盖预训练、训练后优化(SFT、DPO等),更支持Lora、QLora等,是个值得学习了解的工具。本教程从Llama_Factory的安装开始一步一步完成SFT。
Llama_Factory安装
LLaMA-Factory支持两种安装方式:源码安装和docker镜像安装
- 源码安装(可能需要科学上网)
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]" --no-build-isolation
- docker镜像安装(适合已经安装了docker环境)
docker run -it --rm --gpus=all --ipc=host hiyouga/llamafactory:latest
支持的数据格式
支持alpaca格式(适合单轮对话)和shareGPT格式(适合多轮对话)
- alpaca格式
{
"instruction": "介绍一下你自己",
"input": "",
"output": "我是 Ops Copilot,一个面向运维领域的智能助手,可以帮助你解决各种运维相关的问题。"
}
- sharegpt格式
{
"conversations": [
{
"from": "system",
"value": "你是一个专业的Python编程助手,请提供清晰、准确的代码示例。"
},
{
"from": "human",
"value": "如何用Python读取CSV文件?"
},
{
"from": "gpt",
"value": "可以使用pandas库来读取CSV文件:\n\n```python\nimport pandas as pd\ndf = pd.read_csv('file.csv')\nprint(df.head())\n```\n\n这样就能轻松加载和查看CSV数据了。"
}
]
}
准备数据
心理学中文对话数据集-Alpaca · 数据集
psychology-10k-zh是单轮对话的数据集。
数据集的注册
在Llama_Factory下有个data目录,里面包含了一些数据集,如果想将下载的数据集文件放到这里,需要注册下(在data/dataset_info.json文件中写入对应的数据集信息)。如果要放到其他目录,也需要一个dataset_info.json文件来记录对应的数据集信息。
如果在头部插入数据集信息,则可参考下列代码(...表示文件原有的其他数据集信息):
{
"dataset_name":{
"file_name":"file_path"
},
...
}
准备模型参数
由于墙的存在,无法直接从huggingface网站下载模型参数和数据集,因此需要替代的镜像网站。
这里使用hf-mirror网站 中提到的其中1种方法,其他方法自行查阅。
huggingface-cli 是 Hugging Face 官方提供的命令行工具,自带完善的下载功能。
#安装huggingface_hub
pip install -U huggingface_hub
#设置环境变量(替代原来的huggingface网站地址)
# Linux
export HF_ENDPOINT=https://hf-mirror.com
# Windows
# $env:HF_ENDPOINT = "https://hf-mirror.com"
# 下载Qwen/Qwen3-4B-Instruct-2507模型参数到当前的models/Qwen/Qwen3-4B-Instruct-2507目录下
huggingface-cli download --resume-download Qwen/Qwen3-4B-Instruct-2507 --local-dir models/Qwen/Qwen3-4B-Instruct-2507
# 下载wikitext数据集到当前的wikitext目录下
huggingface-cli download --repo-type dataset --resume-download wikitext --local-dir wikitext
lora_sft(终端运行)
llamafactory-cli train \
--do_train \
--stage sft \
--model_name_or_path /LLaMA-Factory/models/Qwen/Qwen3-4B-Instruct-2507 \
--dataset psychology_10k_zh \
--template qwen3 \
--finetuning_type lora \
--output_dir /LLaMA-Factory/models/Qwen/Qwen3-4B-Instruct-2507-lora-sft \
--per_device_train_batch_size 1 \
--max_steps 5000 \
--learning_rate 1e-4 \
--logging_steps 1 \
--save_steps 10 \
--save_total_limit 1 \
--overwrite_output_dir \
--warmup_ratio 0
其中的模型路径、数据集名称等需要自行修改。
如果数据放在Llama_Factory目录下的data目录中且已经注册,则只需在dataset项指定数据集名称即可;如果放在其他目录,需要再指定dataset_dir项。
训练完成后,训练后的模型参数会保留至output_dir中指定的目录。
可视化微调(网页访问)
运行llamafactory可视乎后端程序:
llamafactory-cli webui
远程端口映射
为了在本地打开llamafactory微调⻚⾯,需要打开本地终端,运⾏以下命令:
⾸先查看autodl ssh和密码
以以下ssh和密码为例
ssh:ssh -p 44146 root@connect.nmb1.seetacloud.com
密码:IoiGFqiIuZkh
则本地运⾏命令为:
ssh -CNgv -L 7860:127.0.0.1:7860 root@connect.nmb1.seetacloud.com -p 44146
运⾏成功后在浏览器地址栏输⼊:
http://127.0.0.1:7860/
模型加载
填入模型路径和模型属性等
在chat页面处选择加载和卸载模型
在train页面设置训练参数
数据准备和加载
同样需要在llamafactory目录下的data目录下的dataset_info.json中进行编辑,增加对应的数据集,即注册。
需要注意花括号等是否完整、匹配。
"qwen_law": {
"formatting":"sharegpt",
"file_name": "train_data_law.json",
"columns": {
"messages": "conversations",
"system": "system",
"tools": "tools"
},
"tags": {
"role_tag": "from",
"content_tag": "value",
"user_tag": "human",
"assistant_tag": "gpt"
}
}
然后再在train页面设置训练用的数据集,(如果你的json文件格式正确的话)会根据json文件自动补齐你输入的数据集名称,你也可以下拉选择数据集。
模型导出
在export页面导出模型
训练结果
由于时间问题,只训练了0.3个epoch。
合并Lora模型
export CUDA_VISIBLE_DEVICES=0
llamafactory-cli export \
--model_name_or_path /LLaMA-Factory/models/Qwen/Qwen3-4B-Instruct-2507 \
--adapter_name_or_path /LLaMA-Factory/models/Qwen/Qwen3-4B-Instruct-2507-lora-sft \
--export_dir //LLaMA-Factory/models/Qwen/Qwen3-4B-Instruct-2507-lora-sft-merged \
--template qwen3 \
--export_size 2 \
--finetuning_type lora