Llama-factory LoRA 微调
简介
LLaMA-Factory 是一个开源的、简单易用且高效的大型语言模型(LLM)训练与微调框架,旨在帮助用户以低代码或无代码的方式对超过 100 种预训练模型进行高效微调。它支持多种模型(如 LLaMA、Mistral、Qwen、Gemma、Phi 等)以及多种训练任务,包括预训练、监督微调(SFT)、奖励模型训练、PPO、DPO、KTO、ORPO 等。
核心特点
- 广泛的模型支持:支持 LLaMA、LLaVA、Mistral、Qwen、Gemma、ChatGLM 等 100+ 种语言模型和视觉-语言模型(VLMs)。
- 高效微调技术:
- 支持全参数微调、冻结微调、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 倍)。
- 用户友好界面:
- 提供 LlamaBoard WebUI,允许通过图形界面调整模型、数据集和超参数,无需编码。
- 支持命令行接口(CLI)用于更灵活的配置。
- 多样化的数据集支持:
- 内置多种数据集(如 Alpaca、ShareGPT 格式),并支持自定义数据集(JSON 格式)。
- 可从 Hugging Face、ModelScope 或本地加载数据集。
- 灵活的部署与推理:
- 支持 vLLM、SGLang 等推理后端,加速推理过程。
- 可将微调模型导出到 Hugging Face 或以 GGUF 格式用于本地部署。
- 实验监控:集成 LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等工具,实时监控训练进度和损失曲线。
- 多设备兼容:支持 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/*
RUN git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
WORKDIR /app/LLaMA-Factory
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
|