HuggingFace peft LoRA 微调 LLaMA

1. 安装必要库

复制代码
pip install transformers peft accelerate

2. 加载 LLaMA 模型和分词器

Hugging Face Transformers 加载预训练的 LLaMA 模型和分词器。

python 复制代码
from transformers import AutoModelForCausalLM, AutoTokenizer

# 加载 LLaMA 模型和分词器
model_name = "meta-llama/Llama-2-7b-hf"  # 替换为适合的模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", load_in_8bit=True)

# 设置 pad_token 为 eos_token(如果模型没有 pad_token)
tokenizer.pad_token = tokenizer.eos_token
model.resize_token_embeddings(len(tokenizer))  # 调整词汇表大小

3. 配置 LoRA 微调

使用 PEFT 配置 LoRA 参数。

python 复制代码
from peft import get_peft_model, LoraConfig, TaskType

# 定义 LoRA 配置
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,  # 因果语言模型任务
    inference_mode=False,
    r=8,  # LoRA 的秩
    lora_alpha=16,
    lora_dropout=0.05
)

# 将 LoRA 应用于模型
model = get_peft_model(model, lora_config)

# 检查模型被正确标记为 trainable
print(model)

4. 定义数据集加载器

使用自定义数据集加载器和 Hugging Face 提供的 DataCollator 进行批量处理。

数据集预处理流程及其代码如下链接:训练数据格式为<input,output>,为什么微调大模型时,模型所需的输入数据input_ids有时仅包含了input,而有时包含了input和output呢?-CSDN博客

python 复制代码
from torch.utils.data import DataLoader
from transformers import DataCollatorForSeq2Seq

# 自定义数据集(之前定义的 FineTuneDataset)
dataset = FineTuneDataset(data_path="./train.jsonl", tokenizer=tokenizer, max_length=1024)

# 定义数据批处理器
data_collator = DataCollatorForSeq2Seq(tokenizer, padding=True)

5. 配置 TrainingArguments

设置训练超参数,包括学习率、批次大小、保存频率等。

python 复制代码
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./llama_lora_finetuned",   # 输出模型路径
    evaluation_strategy="steps",          # 每隔多少步进行验证
    save_strategy="steps",                # 保存检查点的策略
    logging_dir="./logs",                 # 日志文件路径
    per_device_train_batch_size=8,        # 每个设备的训练批次大小
    gradient_accumulation_steps=4,        # 梯度累积
    learning_rate=2e-4,                   # 学习率
    num_train_epochs=3,                   # 训练轮数
    save_steps=500,                       # 每隔多少步保存模型
    logging_steps=100,                    # 日志记录频率
    fp16=True,                            # 使用混合精度训练
    push_to_hub=False                     # 如果需要保存到 Hugging Face Hub
)

6. 定义模型和 Trainer

python 复制代码
from transformers import Trainer

# 定义 Trainer
trainer = Trainer(
    model=model,                          # 微调的模型
    args=training_args,                   # 训练参数
    train_dataset=dataset,                # 训练数据集
    data_collator=data_collator,          # 数据批处理器
)

7. 启动训练

python 复制代码
trainer.train()
trainer.save_model("./llama_lora_finetuned")
tokenizer.save_pretrained("./llama_lora_finetuned")
相关推荐
仙人掌_lz4 小时前
详解如何复现LLaMA 4:从零开始利用Python构建
人工智能·python·ai·llama·智能体·ai agents
AI大模型团团6 小时前
从基础概念到前沿应用了解机器学习
人工智能·python·随机森林·机器学习·ai·线性回归·llama
Panesle2 天前
英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况
人工智能·语言模型·llama·nvidia
JovaZou4 天前
n8n 本地部署及实践应用,实现零成本自动化运营 Telegram 频道(保证好使)
运维·人工智能·docker·ai·自然语言处理·自动化·llama
openownworld4 天前
LLaMA-Factory双卡4090微调DeepSeek-R1-Distill-Qwen-14B医学领域
llama
Panesle4 天前
英伟达Llama-3.1-Nemotron-Ultra-253B-v1语言模型论文快读:FFN Fusion
人工智能·语言模型·llama·nvidia
福大大架构师每日一题4 天前
transformers v4.51.1正式发布!Llama 4多项关键修复,深度学习玩家速更!
人工智能·深度学习·llama
OpenBayes5 天前
OpenBayes 一周速览|1分钟生成完整音乐,DiffRhythm人声伴奏一键搞定; Stable Virtual Camera重塑3D视频创作
人工智能·深度学习·数据集·llama·视频生成·推理·蛋白质突变
x-cmd6 天前
[250411] Meta 发布 Llama 4 系列 AI 模型 | Rust 1.86 引入重大语言特性
人工智能·rust·llama
m0_540507786 天前
Meta LLaMA 4:对抗 GPT-4o 与 Claude 的开源王牌
llama