【微调大模型】使用LLaMA-Factory进行监督微调 Qwen2.5

本文使用LLaMA-Factory进行监督微调 Qwen2.5。

监督微调(SFT) 脚本具有以下特点:

  • 支持单GPU和多GPU训练
  • 支持全参数调优,LoRA,Q-LoRA,Dora

下面详细介绍一下该脚本的使用方法。

目录

安装

数据准备

训练

[合并 LoRA](#合并 LoRA)

结论



安装

开始之前,请确保已安装以下软件包:

按照LLaMA-Factory的说明 ,构建环境。安装这些软件包(可选):

复制代码
pip install deepspeed

pip install flash-attn --no-build-isolation

如果想使用 FlashAttention-2,请确保 CUDA 是 11.6 及以上版本。

数据准备

LLaMA-Factory 在文件夹中提供了几个训练数据集data,可以直接使用。如果使用自定义数据集,请按如下方式准备数据集。

1将数据组织到json 文件中,并将数据放入data 文件夹中。LLaMA-Factory 支持alpaca或sharegpt 格式的数据集。

alpaca格式的数据集应遵循以下格式:

复制代码
[
  {
    "instruction": "user instruction (required)",
    "input": "user input (optional)",
    "output": "model response (required)",
    "system": "system prompt (optional)",
    "history": [
      ["user instruction in the first round (optional)", "model response in the first round (optional)"],
      ["user instruction in the second round (optional)", "model response in the second round (optional)"]
    ]
  }
]

sharegpt格式的数据集应遵循以下格式:

复制代码
[
  {
    "conversations": [
      {
        "from": "human",
        "value": "user instruction"
      },
      {
        "from": "gpt",
        "value": "model response"
      }
    ],
    "system": "system prompt (optional)",
    "tools": "tool description (optional)"
  }
]

2 data/dataset_info.json按以下格式提供数据集定义。

对于alpaca格式数据集,dataset_info.json 应该是:

复制代码
"dataset_name": {
  "file_name": "dataset_name.json",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "system": "system",
    "history": "history"
  }
}

对于sharegpt格式数据集,dataset_info.json 应该是:

复制代码
"dataset_name": {
    "file_name": "dataset_name.json",
    "formatting": "sharegpt",
    "columns": {
      "messages": "conversations",
      "system": "system",
      "tools": "tools"
    },
    "tags": {
      "role_tag": "from",
      "content_tag": "value",
      "user_tag": "user",
      "assistant_tag": "assistant"
    }
  }

训练

执行以下训练命令:

复制代码
DISTRIBUTED_ARGS="
    --nproc_per_node $NPROC_PER_NODE \
    --nnodes $NNODES \
    --node_rank $NODE_RANK \
    --master_addr $MASTER_ADDR \
    --master_port $MASTER_PORT
  "

torchrun $DISTRIBUTED_ARGS src/train.py \
    --deepspeed $DS_CONFIG_PATH \
    --stage sft \
    --do_train \
    --use_fast_tokenizer \
    --flash_attn \
    --model_name_or_path $MODEL_PATH \
    --dataset your_dataset \
    --template qwen \
    --finetuning_type lora \
    --lora_target q_proj,v_proj\
    --output_dir $OUTPUT_PATH \
    --overwrite_cache \
    --overwrite_output_dir \
    --warmup_steps 100 \
    --weight_decay 0.1 \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 4 \
    --ddp_timeout 9000 \
    --learning_rate 5e-6 \
    --lr_scheduler_type cosine \
    --logging_steps 1 \
    --cutoff_len 4096 \
    --save_steps 1000 \
    --plot_loss \
    --num_train_epochs 3 \
    --bf16

要更改训练,可以修改训练命令中的参数来调整超参数。需要注意的一个参数是cutoff_len,这是训练数据的最大长度。控制此参数以避免 OOM 错误。

合并 LoRA

如果使用 LoRA 训练模型,则可能需要将适配器参数合并到主分支。运行以下命令执行 LoRA 适配器的合并。

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \
    --model_name_or_path path_to_base_model \
    --adapter_name_or_path path_to_adapter \
    --template qwen \
    --finetuning_type lora \
    --export_dir path_to_export \
    --export_size 2 \
    --export_legacy_format False

结论

以上内容是使用 LLaMA-Factory 训练 Qwen 的最简单方法。

Quickstart - Qwen

至此,本文的内容就结束了。

相关推荐
东皇太星8 分钟前
ResNet (2015)(卷积神经网络)
人工智能·神经网络·cnn
aircrushin19 分钟前
TRAE SOLO 中国版,正式发布!AI 编程的 "Solo" 时代来了?
前端·人工智能
Java中文社群27 分钟前
保姆级教程:3分钟带你轻松搭建N8N自动化平台!(内附视频)
人工智能·工作流引擎
是Yu欸40 分钟前
DevUI MateChat 技术演进:UI 与逻辑解耦的声明式 AI 交互架构
前端·人工智能·ui·ai·前端框架·devui·metachat
我不是QI1 小时前
周志华《机器学习---西瓜书》 一
人工智能·python·机器学习·ai
H***99761 小时前
月之暗面公开强化学习训练加速方法:训练速度暴涨97%,长尾延迟狂降93%
人工智能·深度学习·机器学习
二川bro1 小时前
Python在AI领域应用全景:2025趋势与案例
开发语言·人工智能·python
AI-智能1 小时前
RAG 系统架构设计模式介绍
人工智能·langchain·llm·agent·知识库·rag·大模型应用
长桥夜波1 小时前
机器学习日报20
人工智能·机器学习
字节跳动视频云技术团队2 小时前
火山引擎多媒体实验室AIGC视频画质理解大模型VQ-Insight入选AAAI 2025 Oral
人工智能