使用 LLaMA-Factory 微调 llama3 模型

使用 LLaMA-Factory 微调 llama3 模型

1. LLaMA-Factory模型介绍

复制代码
https://github.com/hiyouga/LLaMA-Factory

LLaMA-Factory 是一个用于大型语言模型(LLM)微调的工具,它旨在简化大型语言模型的微调过程, 使得用户可以快速地对模型进行训练和优化,以提高模型在特定任务上的性能。

这个工具支持多种预训练的大型语言模型,例如 LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、 Gemma、Baichuan、ChatGLM 和 Phi 等。

LLaMA-Factory 的特点包括:

  1. 支持多种微调方法:它集成了连续预训练、有监督微调(SFT)、偏好对齐(RLHF)等多种微调方 法。
  2. 高效的微调技术:与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 显著的加速比,并且在特定任务上取得了更高的性能分数。
  3. 易用性:LLaMA-Factory 提供了高层次的抽象接口,使得开发者可以开箱即用,快速上手操作。
  4. WebUI 支持:借鉴 Stable Diffusion WebUI,该项目提供了基于 gradio 的网页版工作台,方便初 学者可以迅速上手操作。
  5. 模型导出和推理:支持模型的导出和推理,包括动态合并 LoRA 模型进行推理。
  6. API Server:支持启动 API Server,使得训练好的模型可以通过网络接口被远程访问和调用。
  7. 评测 benchmark:提供了主流评测 benchmark 支持,如 mmlu、cmmlu、ceval 等,用于评估 模型的泛化能力。

LLaMA-Factory 旨在降低大型语言模型微调的门槛,使得更多的研究者和开发者能够利用这些强大的模 型来解决具体的实际问题。

1.1 环境配置

/mnt/workspace路径下执行

复制代码
git clone https://github.com/hiyouga/LLaMA-Factory.git
conda create -n llama_factory python=3.10
conda activate llama_factory
cd LLaMA-Factory
pip install -e .[metrics]

1.2 下载llama3模型

/mnt/workspace路径下执行

复制代码
mkdir models
cd models

/mnt/workspace/models路径下执行

复制代码
pip install modelscope
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git

2 llama3中文增强大模型(lora微调)

使用预训练模型+LoRA适配器的方式, 可以在不重新训练整个模型的情况下, 快速且高效地将模型适应到 新的任务或领域, 如将英文模型适应到中文对话。这是一种常见且实用的微调方法。

2.1 模型训练

修改文件 /mnt/workspace/LLaMA-Factory/examples/train_lora/llama3_lora_sft.yaml

json 复制代码
!上传配置文件
llama3_lora_sft.yaml
yaml 复制代码
### model
model_name_or_path: /mnt/workspace/models/Meta-Llama-3-8B-Instruct

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: alpaca_gpt4_zh
template: llama3
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: /mnt/workspace/models/llama3-lora-zh
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

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

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

yaml文件中的主要参数:

model

  • model_name_or_path: 指定预训练模型的路径或名称, 这里使用的是

    /mnt/workspace/models/Meta-Llama-3-8B-Instruct 路径下的 Meta-Llama 3.8B 模型作为基础模 型。

  • method

    • stage: 表示训练阶段, 这里是 sft(Supervised Fine-Tuning)。
    • do_train: 表示要进行训练。
    • finetuning_type: 微调方法, 这里使用 LoRA(Low-Rank Adaptation)。
    • lora_target: LoRA 作用的对象, 这里是 attention 层的 query 和 value 映射矩阵。
  • dataset

    • dataset: 训练数据集名称,这里用的是 alpaca_gpt4_zh 数据集。(注意:数据集可以选择多个 alpaca_zh,alpaca_gpt4_zh,oaast_sft_zh)
    • template: 数据集的格式模板,这里是 llama3。
    • cutoff_len: 输入序列的最大长度, 超过会截断, 这里设为1024。
    • max_samples: 从数据集中取的最大样本数, 这里取前1000个样本。
    • preprocessing_num_workers: 数据预处理的进程数, 这里用16个进程并行处理。
  • output

    • output_dir: 训练日志和模型的保存路径。
    • logging_steps: 每隔多少步记录一次日志, 这里每100步记录一次。
    • save_steps: 每隔多少步保存一次模型, 这里每500步保存一次。
    • plot_loss: 是否绘制loss曲线图。
  • train

    • per_device_train_batch_size: 每个设备上的训练批大小, 这里设为1。
    • gradient_accumulation_steps: 梯度累积的步数, 这里累积8步才更新一次模型参数。
    • learning_rate: 学习率, 这里设为0.0001。
    • num_train_epochs: 训练的epoch数, 这里训练1个epoch。(还可以指定max_steps 3000 : 训练 3000步。注意:真正项目训练增大总步数;注意:num_train_epochs和max_steps之中选择一 个)
    • lr_scheduler_type: 学习率调度器类型, 这里用cosine, 即先warmup再降温。
    • warmup_steps: 用初始学习率warmup的步数, 这里取总步数的10%。 fp16: 是否使用fp16混合精度训练, 以加速训练并减少显存占用。
  • eval

    • val_size: 从训练集中划分出的验证集比例, 这里取10%作为验证集。
    • per_device_eval_batch_size: 验证时每个设备的批大小,这里为1。
    • evaluation_strategy: 验证策略, 这里根据steps数来验证。
    • eval_steps: 每隔多少步验证一次, 这里每500步验证一次。

以上就是这个yaml配置文件的主要参数解释。这些参数设置了一个使用LoRA对Meta-Llama-3-8BInstruct模型在alpaca_gpt4_zh数据集上进行微调的训练过程。

2.2 克隆数据集

在/mnt/workspace/LLaMA-Factory/data路径下使用下面的命令克隆alpaca_gpt4_zh数据集

复制代码
git clone https://www.modelscope.cn/datasets/llamafactory/alpaca_gpt4_zh.git

然后,修改dataset_info.json文件

复制代码
!上传配置文件
data_info.json

上传alpaca_gpt4_data_zh.json到data目录下

2.3 训练

复制代码
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

1.4 推理

修改examples/inference/llama3_lora_sft.yaml

复制代码
model_name_or_path: /mnt/workspace/models/Meta-Llama-3-8B-Instruct
adapter_name_or_path: /mnt/workspace/models/llama3-lora-zh
template: llama3
finetuning_type: lora
  • --model_name_or_path /mnt/workspace/models/Meta-Llama-3-8B-Instruct : 这个参数指定了 预训练语言模型的名称或路径。在这个例子中, 使用的是位于 /mnt/workspace/models/MetaLlama-3-8B-Instruct 的Meta的Llama-3-8B-Instruct模型。这个模型将作为基础模型,在其上进行 微调。
  • --adapter_name_or_path /mnt/workspace/models/llama3-lora-zh : 这个参数指定了用于微调 的适配器(Adapter)的名称或路径。在这个例子中, 使用的是位 于 /mnt/workspace/models/llama3-lora-zh 的适配器。这个适配器是通过LoRA技术在基础模型 上微调得到的。
  • --template llama3 : 这个参数指定了对话模板的名称。模板定义了对话的格式和风格。在这个例 子中, 使用的是名为 llama3 的模板。
  • --finetuning_type lora : 这个参数指定了微调的类型。在这个例子中, 使用的是LoRA技术进行微 调。

/mnt/workspace/LLaMA-Factory路径下执行

复制代码
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
相关推荐
漠北尘-Gavin10 小时前
【Python3.12.9安装llama-cpp-python遇到编译报错问题解决】
python·llama
爱听歌的周童鞋1 天前
理解llama.cpp如何进行LLM推理
llm·llama·llama.cpp·inference
溯源0061 天前
vscode调试python(transformers库的llama为例)
vscode·python·llama
Flying`2 天前
LLaMA-Factory微调实操记录
llama
张飞飞飞飞飞2 天前
通过Llama-Factory对Deepseek-r1:1.5b进行微调
llama
喜欢吃豆3 天前
LLaMA-Factory使用实战
人工智能·大模型·json·llama
UQI-LIUWJ4 天前
debug 笔记:llama 3.2 部署bug 之cutlassF: no kernel found to launch!
笔记·bug·llama
Amor风信子4 天前
如何使用 LLaMA-Factory 微调 LLaMA3
llama
小杜不吃糖4 天前
llama源码学习·model.py[3]ROPE旋转位置编码(2)旋转角度生成代码
llama