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

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

相关推荐
乌恩大侠2 小时前
自动驾驶的未来:多模态传感器钻机
人工智能·机器学习·自动驾驶
光锥智能3 小时前
AI办公的效率革命,金山办公从未被颠覆
人工智能
GetcharZp3 小时前
爆肝整理!带你快速上手LangChain,轻松集成DeepSeek,打造自己的AI应用
人工智能·llm·deepseek
猫头虎4 小时前
新手小白如何快速检测IP 的好坏?
网络·人工智能·网络协议·tcp/ip·开源·github·php
GeeJoe4 小时前
凡人炼丹传之 · 我让 AI 帮我训练了一个 AI
人工智能·机器学习·llm
小和尚同志4 小时前
Dify29. 为你的 Dify API 穿层衣服吧
人工智能·aigc
不会学习的小白O^O4 小时前
神经网络----卷积层(Conv2D)
人工智能·深度学习·神经网络
bastgia4 小时前
Transformer终结者?Google DeepMind新架构实现2倍推理速度和一半内存占用
人工智能·llm
努力一点9484 小时前
ubuntu22.04系统入门 linux入门(二) 简单命令 多实践以及相关文件管理命令
linux·运维·服务器·人工智能·gpu算力