huggingface 笔记:peft

1 介绍

  • PEFT 提供了参数高效的方法来微调大型预训练模型。
  • 传统的范式是为每个下游任务微调模型的所有参数,但由于当前模型的参数数量巨大,这变得极其昂贵且不切实际。
  • 相反,训练较少数量的提示参数或使用诸如低秩适应 (LoRA) 的重新参数化方法来减少可训练参数数量是更有效的

2 训练

2.1 加载并创建 LoraConfig 类

  • 每种 PEFT 方法都由一个 PeftConfig 类定义,该类存储了构建 PeftModel 的所有重要参数
  • eg:使用 LoRA 进行训练,加载并创建一个 LoraConfig 类,并指定以下参数
    • task_type:要训练的任务(在本例中为序列到序列语言建模)
    • inference_mode:是否将模型用于推理
    • r:低秩矩阵的维度
    • lora_alpha:低秩矩阵的缩放因子
    • lora_dropout:LoRA 层的丢弃概率
from peft import LoraConfig, TaskType

peft_config = LoraConfig(
    task_type=TaskType.SEQ_2_SEQ_LM, 
    inference_mode=False, 
    r=8, 
    lora_alpha=32, 
    lora_dropout=0.1)

2.2 创建 PeftModel

  • 一旦设置了 LoraConfig,就可以使用 get_peft_model() 函数创建一个 PeftModel
    • 需要一个基础模型 - 可以从 Transformers 库加载 -
    • 以及包含如何配置 LoRA 模型参数的 LoraConfig

2.2.1 加载需要微调的基础模型

from transformers import AutoModel,AutoTokenizer
import os
import torch

os.environ["HF_TOKEN"] = '*'
#huggingface的私钥

tokenizer=AutoTokenizer.from_pretrained('meta-llama/Meta-Llama-3-8B')
model=AutoModel.from_pretrained('meta-llama/Meta-Llama-3-8B',
                                                torch_dtype=to
### HuggingFace PEFT 和 DeepSeek 的集成方法 #### 背景介绍 Hugging Face 提供了一个名为 **PEFT (Parameter-Efficient Fine-Tuning)** 的库,用于实现参数高效的微调技术。这些技术包括 Adapter、Prefix Tuning 和 LoRA 等[^2]。DeepSeek 是一种基于大语言模型的开源项目,其 R1 版本提供了强大的预训练能力[^1]。 通过将 PEFT 技术应用于 DeepSeek 模型,可以显著减少微调过程中所需的计算资源和时间成本,同时保持较高的性能表现。 --- #### 集成步骤说明 以下是将 PEFT 库与 DeepSeek 结合使用的具体方式: ##### 1. 安装依赖项 为了使用 PEFT 和 DeepSeek 模型,需安装以下 Python 包: ```bash pip install transformers peft accelerate datasets torch deepspeed ``` ##### 2. 加载 DeepSeek 模型 加载 DeepSeek 模型可以通过 `transformers` 库完成。例如,对于 Distilled Llama-8B 模型,代码如下所示: ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) ``` ##### 3. 初始化 PEFT 方法 根据需求选择合适的 PEFT 方法(如 Prefix Tuning 或 LoRA),并初始化配置文件。以下是一个使用 LoRA 的例子: ```python from peft import get_peft_config, PeftModel, TaskType, get_peft_model peft_config = { "lora_r": 8, "lora_alpha": 32, "task_type": TaskType.CAUSAL_LM, } config = get_peft_config(peft_config=peft_config) model = get_peft_model(model, config) ``` 如果希望采用 Prefix Tuning,则可替换为相应的配置选项。 ##### 4. 数据准备与微调过程 利用 Hugging Face 的 `datasets` 库来处理数据集,并定义适合的任务目标函数。下面展示如何设置优化器以及执行实际训练操作的部分代码片段: ```python import torch from torch.optim import AdamW from tqdm.auto import tqdm optimizer = AdamW(model.parameters(), lr=5e-5) data_loader = ... # 自己构建的数据加载器 device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") model.to(device) for epoch in range(epochs): model.train() total_loss = 0 progress_bar = tqdm(data_loader, desc=f"Epoch {epoch}") for batch in progress_bar: optimizer.zero_grad() inputs = tokenizer(batch["text"], return_tensors="pt", padding=True).to(device) outputs = model(**inputs, labels=inputs.input_ids) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() progress_bar.set_postfix({"loss": total_loss / (batch_idx + 1)}) ``` 上述脚本实现了基本的梯度下降更新逻辑。 ##### 5. 测试与保存结果 经过充分迭代后,评估最终效果并将调整后的权重存储下来以便后续部署应用: ```python # Save the fine-tuned model and its corresponding configuration. model.save_pretrained("./deepseek-lora-finetuned") tokenizer.save_pretrained("./deepseek-lora-finetuned") ``` --- ### 注意事项 - 在运行之前确认 GPU 是否可用;否则可能因内存不足而失败。 - 对于大规模语料建议启用混合精度加速功能以提升效率。 - 不同类型的 PEFT 方案各有优劣,请依据场景选取最匹配的一种。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值