【微调大模型】使用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

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

相关推荐
Francek Chen17 分钟前
【深度学习优化算法】02:凸性
人工智能·pytorch·深度学习·优化算法·凸函数
寻丶幽风22 分钟前
论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers
论文阅读·pytorch·笔记·深度学习·网络安全·语言模型
Eastmount29 分钟前
[论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)
论文阅读·人工智能·大模型·知识图谱·威胁情报
智源研究院官方账号33 分钟前
更强劲,更高效:智源研究院开源轻量级超长视频理解模型Video-XL-2
人工智能·开源
要努力啊啊啊1 小时前
GQA(Grouped Query Attention):分组注意力机制的原理与实践《一》
论文阅读·人工智能·深度学习·语言模型·自然语言处理
m0_748245171 小时前
KrillinAI:视频跨语言传播的一站式AI解决方案
人工智能·音视频
原味奶茶_三分甜1 小时前
Qwen3高效微调
深度学习
说私域1 小时前
定制开发开源AI智能名片S2B2C商城小程序在无界零售中的应用与行业智能升级示范研究
人工智能·小程序·开源·零售
蹦蹦跳跳真可爱5891 小时前
计算机视觉处理----OpenCV(从摄像头采集视频、视频处理与视频录制)
人工智能·python·opencv·计算机视觉·音视频
Icoolkj1 小时前
微软推出 Bing Video Creator,免费助力用户轻松创作 AI 视频
人工智能·microsoft·音视频