PEFT:参数高效微调(PEFT)框架介绍

630 阅读3分钟
概述

🤗 PEFT(Parameter-Efficient Fine-Tuning)是一个先进的参数高效微调框架,旨在解决大规模预训练模型微调成本高昂的问题。通过仅微调模型中的一小部分额外参数,PEFT显著降低了计算和存储成本,同时保持了与全模型微调相当的性能。

核心优势
  1. 高效计算和存储:PEFT方法通过微调少量参数,显著减少了计算和存储开销。例如,使用LoRA(Low-Rank Adaptation)技术,可以在不显著降低性能的情况下,大幅减少微调所需的资源。

  2. 高性能:最新的PEFT技术在各种下游任务中表现出色,性能可与全模型微调相媲美。例如,使用LoRA微调的3B参数模型在某些任务上的表现接近全模型微调。

  3. 广泛集成:PEFT与Transformers、Diffusers和Accelerate等框架无缝集成,支持分布式训练和推理,适用于各种硬件环境。

主要功能
  1. LoRA微调:通过引入低秩矩阵,LoRA技术显著减少了微调所需的参数数量。例如,使用LoRA微调bigscience/mt0-large模型时,仅需训练0.19%的参数。

  2. 量化技术:结合量化技术,进一步减少模型的内存需求。例如,使用QLoRA技术可以在16GB GPU上微调meta-llama/Llama-2-7b-hf模型。

  3. 多任务学习:支持多任务学习,通过共享低秩矩阵,在多个任务之间共享参数,提高模型的泛化能力。

  4. 分布式训练:与Accelerate框架集成,支持大规模模型的分布式训练和推理,适用于各种硬件环境。

快速入门
  1. 安装PEFT

    pip install peft
    
  2. 准备模型进行训练

    from transformers import AutoModelForSeq2SeqLM
    from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
    
    model_name_or_path = "bigscience/mt0-large"
    tokenizer_name_or_path = "bigscience/mt0-large"
    
    peft_config = LoraConfig(
        task_type=TaskType.SEQ_2_SEQ_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1
    )
    
    model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
    model = get_peft_model(model, peft_config)
    model.print_trainable_parameters()
    
  3. 加载PEFT模型进行推理

    from peft import AutoPeftModelForCausalLM
    from transformers import AutoTokenizer
    import torch
    
    model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora").to("cuda")
    tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
    
    model.eval()
    inputs = tokenizer("Preheat the oven to 350 degrees and place the cookie dough", return_tensors="pt")
    
    outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
    print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
    
应用场景
  1. 自然语言处理:在NLP任务中,PEFT可以显著减少微调成本,适用于各种下游任务,如文本分类、机器翻译等。

  2. 图像生成:在Diffusers框架中,PEFT可以减少Stable Diffusion等图像生成模型的内存需求,支持在消费级硬件上进行训练和推理。

  3. 强化学习:结合TRL(Transformer Reinforcement Learning)库,PEFT可以应用于强化学习任务,如RLHF(Reinforcement Learning from Human Feedback)。

总结

🤗 PEFT框架通过参数高效微调技术,显著降低了大规模预训练模型的微调成本,同时保持了高性能。其广泛集成和灵活的应用场景使其成为处理各种复杂任务的理想选择。无论是自然语言处理、图像生成还是强化学习,PEFT都能提供高效、便捷的解决方案。