Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Llama-factory LoRA 微调

简介

LLaMA-Factory 是一个开源的、简单易用且高效的大型语言模型(LLM)训练与微调框架,旨在帮助用户以低代码或无代码的方式对超过 100 种预训练模型进行高效微调。它支持多种模型(如 LLaMA、Mistral、Qwen、Gemma、Phi 等)以及多种训练任务,包括预训练、监督微调(SFT)、奖励模型训练、PPO、DPO、KTO、ORPO 等。

核心特点

  1. 广泛的模型支持:支持 LLaMA、LLaVA、Mistral、Qwen、Gemma、ChatGLM 等 100+ 种语言模型和视觉-语言模型(VLMs)。
  2. 高效微调技术:
    • 支持全参数微调、冻结微调、LoRA(低秩适配)和 QLoRA(量化 LoRA,2/3/4/5/6/8 位)。
    • 集成优化算法,如 GaLore、BAdam、DoRA、LongLoRA、LoRA+、PiSSA 等。
    • 使用加速技术,如 FlashAttention-2、Unsloth 和 Liger Kernel,显著提升训练速度和降低 GPU 内存占用(相比 ChatGLM 的 P-Tuning,LoRA 微调速度快 3.7 倍)。
  3. 用户友好界面:
    • 提供 LlamaBoard WebUI,允许通过图形界面调整模型、数据集和超参数,无需编码。
    • 支持命令行接口(CLI)用于更灵活的配置。
  4. 多样化的数据集支持:
    • 内置多种数据集(如 Alpaca、ShareGPT 格式),并支持自定义数据集(JSON 格式)。
    • 可从 Hugging Face、ModelScope 或本地加载数据集。
  5. 灵活的部署与推理:
    • 支持 vLLM、SGLang 等推理后端,加速推理过程。
    • 可将微调模型导出到 Hugging Face 或以 GGUF 格式用于本地部署。
  6. 实验监控:集成 LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等工具,实时监控训练进度和损失曲线。
  7. 多设备兼容:支持 GPU(CUDA)、NPU(Ascend)等计算设备,兼容多节点分布式训练。

[!NOTE]

文档地址:https://llamafactory.readthedocs.io/zh-cn/latest/

Nvidia 环境

构建镜像

编辑Dockerfile文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FROM ljxha471758/llama-factory

# 设置工作目录
WORKDIR /app

# 安装必要的软件包
RUN apt-get update && apt-get install -y \
git \
vim \
libaio-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

# 克隆 LLaMA-Factory 项目,深度为 1 以减少克隆大小
RUN git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

# 进入 LLaMA-Factory 目录
WORKDIR /app/LLaMA-Factory

# 安装 Python 依赖
RUN pip install --upgrade pip && \
pip install -e ".[torch,metrics]"

# 设置默认的启动命令(可选)
CMD ["/bin/bash"]

构建镜像:

1
docker build --platform linux/amd64 -t llama-factory-image -f Dockerfile .

启动镜像

1
sudo docker run -it --privileged --gpus all --shm-size=50g -v /mnt/data/model/Qwen2.5-0.5B-Instruct:/app/models/Qwen2.5-0.5B-Instruct llama-factory 

**--privileged**:以特权模式运行容器,允许容器访问主机的所有设备。

**--gpus all**:启用容器对所有可用 GPU 的访问。通常用于深度学习的训练或推理任务,使得容器中的应用可以使用主机的 GPU 资源。

**--shm-size=50g**:将共享内存(/dev/shm)大小设置为 50 GB。

  • 许多深度学习框架在处理大批量数据时需要较大的共享内存。
  • 增加共享内存的大小可以减少因内存不足导致的错误,特别是使用大模型或大数据集时。

**-v /mnt/data/model/Qwen2.5-0.5B-Instruct:/app/models/Qwen2.5-0.5B-Instruct**:将主机的 /mnt/data/model/Qwen2.5-0.5B-Instruct 目录挂载到容器内的 /app/models/Qwen2.5-0.5B-Instruct 目录下。

执行命令

微调
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=0,1,3,4 llamafactory-cli train \
--stage sft \
--do_train \
--model_name_or_path /app/models/Qwen2.5-0.5B-Instruct \
--dataset alpaca_zh_demo \
--dataset_dir ./data \
--template qwen \
--finetuning_type lora \
--output_dir ./saves/qwen/lora/sft \
--overwrite_cache \
--overwrite_output_dir \
--cutoff_len 1024 \
--preprocessing_num_workers 16 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 50 \
--warmup_steps 20 \
--save_steps 100 \
--eval_steps 50 \
--evaluation_strategy steps \
--load_best_model_at_end \
--learning_rate 5e-5 \
--num_train_epochs 5.0 \
--max_samples 1000 \
--val_size 0.1 \
--plot_loss \
--fp16
合并
1
2
3
4
5
6
7
8
9
llamafactory-cli export \
--model_name_or_path /app/models/Qwen2.5-0.5B-Instruct \
--adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
--template qwen \
--finetuning_type lora \
--export_dir models/llama3_lora_sft \
--export_size 2 \
--export_device cpu \
--export_legacy_format false

华为 NPU 环境

构建镜像

使用官方文件构建镜像:https://github.com/hiyouga/LLaMA-Factory/tree/main/docker

使用NPU版本的文件构建镜像。

容器启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker run -it --rm \
--privileged \
-v /root/llama/hf_cache:/root/.cache/huggingface \
-v /root/llama/ms_cache:/root/.cache/modelscope \
-v /root/llama/output:/app/output \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /data/model/Qwen2.5-0.5B-Instruct:/app/models/Qwen2.5-0.5B-Instruct \
-v /data/model/data:/app/data \
-p 7860:7860 \
-p 8000:8000 \
--device /dev/davinci2 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
--shm-size 50g \
--name llamafactory1 \
llama-factory-npu:v1 /bin/bash

需要将主机的相关显卡的插件挂在到容器中。

执行命令

微调
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
FORCE_TORCHRUN=1 ASCEND_RT_VISIBLE_DEVICES=1 llamafactory-cli train \
--stage sft \
--do_train \
--model_name_or_path /app/models/Qwen2.5-0.5B-Instruct \
--dataset alpaca_zh_demo \
--dataset_dir ./data \
--template qwen \
--finetuning_type lora \
--output_dir ./saves/qwen/lora/sft \
--overwrite_cache \
--overwrite_output_dir \
--cutoff_len 1024 \
--preprocessing_num_workers 16 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 50 \
--warmup_steps 20 \
--save_steps 100 \
--eval_steps 50 \
--learning_rate 5e-5 \
--num_train_epochs 5.0 \
--max_samples 1000 \
--val_size 0.1 \
--plot_loss \
--fp16
合并
1
2
3
4
5
6
7
8
9
llamafactory-cli export \
--model_name_or_path /app/models/Qwen2.5-0.5B-Instruct \
--adapter_name_or_path ./saves/qwen/lora/sft \
--template qwen \
--finetuning_type lora \
--export_dir models/Qwen2.5 \
--export_size 2 \
--export_device cpu \
--export_legacy_format false
1
docker cp d2448a59c136b3f04:/app/saves/qwen/lora/sft ./saves/qwen/lora/sft

评论