首页 > 教程攻略 > ai资讯 >LLaMA-Factory | 让LLM Fine-Tuning变得简单

LLaMA-Factory | 让LLM Fine-Tuning变得简单

来源:互联网 时间:2026-08-13 14:09:27

如果只需要自备一份任务相关的数据,就能通过图形界面轻松完成微调——是不是比想象中要省心得多?

在今年的ACL2024上,来自北航和北大的一篇论文《LLAMAFACTORY: Unified Efficient Fine-Tuning of 100+ Language Models》就给出了这个答案。LLaMA-Factory集成了一套高效训练方法,允许用户灵活自定义100多个大模型的微调,而不用写一行代码。论文被接收前,项目在GitHub上就已经收获了13000颗星和1600个fork,影响力可见一斑。

论文链接:

https://arxiv.org/pdf/2403.13372

GitHub:

https://github.com/hiyouga/LLaMA-Factory

先看看长啥样

微调界面(LLaMA Board)

通过webui方式启动后,你会看到一个LLaMA Board。在上面选择数据、调整参数,然后通过“预览命令-保存训练参数-载入训练参数-开始”几步操作,就能开始高效训练。而且,在界面中可以实时观察训练损失的变化,方便随时调整策略。

LLaMA-Factory

怎么使用

一、安装环境(以conda环境为例)

第1步 clone LLaMA-Factory:git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
第2步 进入目录:cd LLaMA-Factory
第3步 创建基础环境:conda create -n <你的环境名称> python=3.10
第4步 进入conda环境:conda activate <你的环境名称>
第5步 安装依赖:pip install -e .[metrics] -i https://pypi.tuna.tsinghua.edu.cn/simple

【上面走完即可,下面看你需要】
如果你需要deepspeed加速,再安装一个包:pip install deepspeed==0.14.3

二、数据构造

假设数据格式是这样的(一份user和assistant的对话数据)。

[
    {
        "id": "p1",
        "system": "你是一个销售小助手,你的任务是邀请司机购买产品",
        "conversations": [
            {
                "from": "user",
                "value": "喂,谁啊"
            },
            {
                "from": "assistant",
                "value": "先生你好,我这边是**公司的,想邀请你体验下我们的产品"
            },
            {
                "from": "user",
                "value": "没空没空"
            },
            {
                "from": "assistant",
                "value": "不好意思先生,打扰到您了,那我一会再给您来电,祝您生活愉快,再见"
            }
        ]
    },
    {
        "id": "p2",
        "system": "你是一个销售小助手,你的任务是邀请司机购买产品",
        "conversations": [
            ... ...
        ]
    },
    ... ...
]

第1步 进入目录,找到dataset_info.json

cd LLaMa-Factory/data/dataset_info.json

第2步 在dict中添加自己的数据信息

"my_task": {
    "file_name": finetune_data.json  # 你自己数据的路径,这里直接存放在LLaMa-Factory/data/finetune_data.json目录下,所以直接写数据名
    "formatting": sharegpt
    "columns": {
        "messages": "conversations",
        "tools": "id"
    },
    "tags": {
        "role_tag": "from",
        "content_tag": "value",
        "user_tag": "user",
        "assistant_tag": "assistant"
    }
}

【至此】完成了数据配置,但还是有必要提醒以下一些细节

每种数据的构造形式都有差异,具体取决于你是做微调还是DPO等。建议仔细阅读下面这个文档,里面有各种任务对应的数据格式和配置方法:

https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md

另外,如果你用的是上面提到的微调数据,请务必注意:conversations里user对应的内容永远应该在奇数位置,否则训练后模型可能会输出一堆不合格式的提醒。同时,训练过程只会筛选符合要求的数据,这会导致实际训练的有效数据量减少。

三、启动训练(这里介绍2种方式)

第一种:CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli webui

这种方式会启动LLaMA Board,通过前端界面选参训练,操作友好、体验感好。

第二种:export CUDA_VISIBLE_DEVICES=0,1,2,3
llamafactory-cli train ./sft_yaml/my_finetune.yaml (启动目录在LLaMa-Factory下)

这种方式是纯后台运行。

my_finetune.yaml的设置示例:

### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct

### method
stage: sft
do_train: true
finetuning_type: full
deepspeed: examples/deepspeed/ds_z3_config.json (当显存不够时,可使用ds_z3_offload_config.json)

### dataset
dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 1024 (最长截断,数据长度超过的部分不会参与训练)
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: sa ves/llama3-8b/full/sft
logging_steps: 10
sa ve_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 2
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

四、查看训练日志

训练结束后,到保存的output_dir中就可以查看训练日志,包括训练损失和验证损失。

五、chat

更新适配器,选择模型即可。如果不使用这种方式,训练好的模型与其他大模型的调用方式是一样的。