LLaMA-Factory本地微调:入门级教程

发布于:2025-05-01 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、安装依赖

用WindTerm在远程服务器上创建并激活虚拟环境(以下为示例):

python3 -m venv llama
source llama/bin/activate

如果是用其他方法:

#cmd
python -m venv llama
.\llama\Scripts\activate

#anaconda prompt
conda create -n llama
conda activate llama
conda install -c conda-forge transformers datasets accelerate peft trl tokenizers gradio scipy einops sentencepiece

如果是第二次激活虚拟环境:

cd /root/llama
source bin/activate

在本地用Git下载llama factory项目源码: 

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

然后上传源码文件到远程服务器,再安装llama factory依赖:

(ps:以下命令要在虚拟环境中进行)

cd /root/LLaMA-Factory/
pip install -r requirements.txt
pip install -e .[metrics] #下载llama factory命令

二、下载模型

下载modelscope(魔塔社区——该平台有许多大模型的源码和数据集)的python库,以方便下载各种文件:(当然也可以去hugging face下载,这一步可选)

pip install modelscope -U 

比如我想下载deepseek-r1-distill-qwen-7b模型,就可以在命令行输入:

modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

 具体的下载命令去modelscope官网找就可以了,每个模型的详情页面都会提供。

三、准备数据集

有以下几点需要注意:

1.llama factory仅支持alpaca和sharegpt格式,要确保你的数据集是以上两种格式之一。

如下是alpaca格式:

[
  {
    "instruction": "用户指令(必填)",
    "input": "用户输入(选填)",
    "output": "模型回答(必填)",
    "system": "系统提示词(选填)",
    "history": [
      ["第一轮指令(选填)", "第一轮回答(选填)"],
      ["第二轮指令(选填)", "第二轮回答(选填)"]
    ]
  }
]

 2.准备好数据集之后,还需要创建一个 dataset_info.json 文件,并将其放在数据集目录中。该文件应包含数据集的相关信息,例如数据集的名称、路径、语言、格式等。

文件结构

假设你的数据集文件是 data.json,并且存储在 my_dataset 文件夹中,目录结构应如下所示:

my_dataset/
├── data.json
└── dataset_info.json

示例 dataset_info.json

以下是一个示例 dataset_info.json 文件的内容:

{
  "my_custom_dataset": {
    "file_name": "data.json",
    "columns": {
      "prompt": "instruction",
      "query": "input",
      "response": "output",
      "system": "system",
      "history": []
    }
  }
}

字段解释

  • my_custom_dataset: 是你为这个数据集指定的名称。在微调命令中,你需要用这个名称来指定数据集。

  • file_name["data.json"] 是数据集目录中实际的数据文件名。

四、开始微调

首先需要确认电脑是否有足够的显存、内存来进行模型微调:

通过上面这张图,我们可以根据自身显存的情况来选择合适的微调方法。 

方法1:启动WebUI

在/LLaMA-Factory的项目路径下,启动llama factory的前端微调界面:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

#或者
cd src
python webui.py

会显示以下内容: 

这就说明远程服务器已经启动了WebUI。

然后,在你的本地浏览器中,输入以下 URL:

http://0.0.0.0:7860 #把0.0.0.0替换为远程服务器的实际 IP 地址

就可以在本地运行WebUI了。

方法2:命令行微调

我们也可以不使用WebUI,而是直接用命令行进行微调。以下为示例:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
--model_name_or_path /path/to/DeepSeek-R1-Distill-Qwen-7B \ #这里替换为你的模型文件路径
--dataset my_custom_dataset \
--dataset_dir ./my_dataset \ #这里替换为你的数据文件夹路径(包含数据集和dataset_info)
--template alpaca \
--finetuning_type lora \
--output_dir ./results \
--per_device_train_batch_size 4 \
--num_train_epochs 3 \
--learning_rate 2e-5 \
--stage sft \
--do_train \
--fp16 \
--quantization_method bnb
 逐行解释:
  1. CUDA_VISIBLE_DEVICES=0:指定使用第 0 块 GPU。

  2. --model_name_or_path:指定模型的路径。

  3. --dataset:指定数据集的名称,必须与 dataset_info.json 中的 dataset_name 一致。

  4. --dataset_dir:指定数据集目录,必须包含 dataset_info.json 文件。

  5. --template:指定数据集的模板格式,这里使用 alpaca

  6. --finetuning_type:指定微调类型,如 lora

  7. --output_dir:指定微调结果的输出目录。这里就是会保存在results文件夹。

  8. --per_device_train_batch_size:每个设备的训练批量大小。

  9. --num_train_epochs:训练的轮数。

  10. --learning_rate:学习率。

  11. --stage:指定训练阶段,如 sft(Supervised Fine-Tuning)。

  12. --do_train:启用训练模式。

  13. --fp16:启用混合精度训练,可以减少显存使用。

  14. --quantization_method bnb: 使用 QLoRA,这里 bnb 表示使用 bitsandbytes 进行 8 比特或 4 比特量化。

确保安装了 bitsandbytes 库:

pip install bitsandbytes

如果你的命令行支持自动补全功能,输入时可以利用 Tab 键快速补全参数。


    网站公告

    今日签到

    点亮在社区的每一天
    去签到