简介:本文详细介绍了如何使用LLaMA Factory在单机环境下进行大语言模型的微调,包括环境准备、数据预处理、训练配置、模型评估和性能优化等关键步骤,并提供实用技巧和常见问题解决方案。
LLaMA Factory是一个高效的大语言模型(Large Language Model)微调框架,专门为研究人员和开发者设计,支持在单机环境下对LLaMA系列模型进行全参数微调或高效参数微调(如LoRA)。相较于传统微调方式,LLaMA Factory具有三大核心优势:
# 基础环境conda create -n llama_factory python=3.10conda activate llama_factory# 核心依赖pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118pip install llama-factory==0.4.2 transformers==4.33.3 datasets==2.14.5# 可选组件(用于LoRA微调)pip install peft==0.5.0 bitsandbytes==0.41.1
建议使用huggingface官方模型或镜像源:
from transformers import AutoModelForCausalLMmodel = AutoModelForCausalLM.from_pretrained("decapoda-research/llama-7b-hf")
LLaMA Factory支持两种标准格式:
对话格式
{"conversations": [{"role": "user", "content": "如何解释机器学习?"},{"role": "assistant", "content": "机器学习是..."}]}
指令格式
{"instruction": "解释机器学习","input": "","output": "机器学习是..."}
from llama_factory.data import preprocess_datadata = preprocess_data(data_path="data/raw.json",output_dir="data/processed",max_length=2048,overwrite_cache=True)
{"model_name_or_path": "llama-7b-hf","data_path": "data/processed","output_dir": "output/finetuned","fp16": true,"per_device_train_batch_size": 4,"gradient_accumulation_steps": 8,"learning_rate": 2e-5,"num_train_epochs": 3,"logging_steps": 50,"save_steps": 500}
python src/train_bash.py \--stage sft \--do_train \--model_name_or_path llama-7b-hf \--dataset_dir data/processed \--finetuning_type full \--output_dir output/finetuned \--overwrite_cache \--per_device_train_batch_size 4 \--gradient_accumulation_steps 8 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 2e-5 \--num_train_epochs 3 \--fp16
python src/train_bash.py \--stage sft \--do_train \--model_name_or_path llama-7b-hf \--dataset_dir data/processed \--finetuning_type lora \--lora_target q_proj,v_proj \--output_dir output/lora \--per_device_train_batch_size 8 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 1e-4 \--num_train_epochs 5 \--fp16
python src/eval_bash.py \--model_name_or_path output/finetuned \--eval_file data/eval.json \--metrics rouge,bleu \--output_dir output/eval_results
from transformers import pipelinepipe = pipeline("text-generation",model="output/finetuned",device="cuda:0")print(pipe("请用中文解释深度学习")[0]['generated_text'])
--gradient_checkpointing可减少30%显存占用bitsandbytes使用--load_in_8bit
from llama_factory.utils import auto_find_batch_sizebatch_size = auto_find_batch_size(model,max_batch_size=16,starting_batch_size=2)
Q1: 出现CUDA out of memory错误
A: 尝试以下方案组合:
Q2: 微调后模型失去基础能力
A: 建议:
task_type参数指定不同任务类型通过本教程的系统实践,开发者可以在单机环境下高效完成LLaMA系列模型的定制化微调,为特定场景构建高质量的领域大模型。建议首次使用者从7B模型+LoRA配置开始,逐步扩展到更复杂的微调场景。