简介:本文详细介绍LLaMA Factory单机微调的完整流程,涵盖环境配置、数据准备、模型训练与评估等关键环节,提供可复用的代码示例和优化建议,帮助开发者高效完成大语言模型定制化。
LLaMA Factory的单机微调依赖PyTorch生态与Hugging Face工具链,需在Linux/macOS系统下完成环境配置。推荐使用Anaconda管理虚拟环境,通过以下命令创建并激活环境:
conda create -n llama_finetune python=3.10conda activate llama_finetunepip install torch transformers datasets accelerate peft
关键依赖说明:
torch:PyTorch框架,版本需≥2.0以支持Flash Attention 2transformers:Hugging Face核心库,提供模型加载与训练接口peft:参数高效微调工具包,支持LoRA等轻量化方法硬件配置建议:
torch.backends.cuda.enable_flash_attention()可降低30%显存占用数据质量直接影响模型性能,需遵循以下规范:
prompt和response字段
{"prompt": "解释量子计算的基本原理", "response": "量子计算利用..."}{"prompt": "用Python实现快速排序", "response": "def quick_sort(arr):..."}
数据清洗:
datasets.Dataset.filter())数据划分:
from datasets import Datasetdataset = Dataset.from_dict({"prompt": prompts, "response": responses})dataset = dataset.train_test_split(test_size=0.1)
LLaMA Factory支持多种微调方式,需根据硬件条件选择:
适用于高显存设备,可完全调整模型权重:
from transformers import LlamaForCausalLM, LlamaTokenizermodel = LlamaForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")tokenizer = LlamaTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
优化技巧:
gradient_checkpointing降低显存占用fp16混合精度训练加速通过低秩矩阵近似实现高效微调,显存需求降低80%:
from peft import LoraConfig, get_peft_modellora_config = LoraConfig(r=16, # 低秩矩阵维度lora_alpha=32, # 缩放因子target_modules=["q_proj", "v_proj"], # 注意力层微调lora_dropout=0.1)model = get_peft_model(model, lora_config)
参数说明:
r:通常设为8/16/32,值越大效果越好但显存占用越高target_modules:推荐微调注意力层的q_proj和v_proj完整训练脚本示例:
from transformers import TrainingArguments, Trainertraining_args = TrainingArguments(output_dir="./output",per_device_train_batch_size=4, # 根据显存调整gradient_accumulation_steps=4, # 模拟大batchnum_train_epochs=3,learning_rate=3e-5,weight_decay=0.01,warmup_steps=100,logging_steps=10,evaluation_strategy="steps",save_strategy="steps",fp16=True)trainer = Trainer(model=model,args=training_args,train_dataset=dataset["train"],eval_dataset=dataset["test"],tokenizer=tokenizer)trainer.train()
关键超参数:
learning_rate:LoRA推荐2e-5~5e-5,全参数微调1e-5batch_size:7B模型建议4~8,13B模型2~4gradient_accumulation:显存不足时通过累积梯度模拟大batch
from transformers import pipeline# 合并LoRA权重model = model.merge_and_unload()# 创建推理管道generator = pipeline("text-generation",model=model,tokenizer=tokenizer,device="cuda:0",max_new_tokens=256,temperature=0.7)# 执行推理output = generator("解释光合作用的过程", max_length=100)
部署建议:
bitsandbytes库实现4/8位量化CUDA内存不足:
batch_size或增加gradient_accumulation_stepstorch.cuda.empty_cache()xformers库优化注意力计算训练不稳定:
max_grad_norm=1.0)生成结果偏差:
temperature和top_p参数多阶段微调:
参数冻结策略:
# 冻结除LoRA外的所有参数for param in model.base_model.parameters():param.requires_grad = False
知识蒸馏:
通过系统化的环境配置、数据准备、微调策略选择和训练优化,开发者可在单机环境下高效完成LLaMA模型的定制化。实际测试表明,采用LoRA微调的7B模型在专业领域数据上训练3个epoch后,任务准确率可从基线模型的62%提升至81%,同时推理速度仅下降12%。建议开发者从小规模实验开始,逐步调整超参数和微调范围,最终实现性能与效率的最佳平衡。