跳到内容

用于分类的微调

完全微调

Ludwig 支持使用 Huggingface 上的任何 LLM 进行完全微调。

input_features:
- name: title
  type: text
  encoder:
    type: auto_transformer
    pretrained_model_name_or_path: bigscience/bloom-3b
    trainable: true
output_features:
- name: class
  type: category
trainer:
  learning_rate: 1.0e-05
  epochs: 3
backend:
  type: ray
  trainer:
    strategy: fsdp

使用 Ludwig Python API 查看演示: 在 Ludwig 上使用 LLM 进行文本分类

仅解码器微调,使用缓存的编码器嵌入

Ludwig 目前支持两种编码器微调变体,通过 trainable 编码器参数进行配置

  1. 修改预训练编码器的权重以使其适应下游任务 (trainable=true)。
  2. 保持预训练编码器权重固定,并训练作为组合器和解码器模块的下游密集层堆栈 (trainable=false)。这有时也被区分为迁移学习。

trainable=false 时,配合以下额外配置调整,训练速度可提高 50 倍以上

  • 自动混合精度 (AMP) 训练,在 trainable=truetrainable=false 时均可用。
  • 缓存编码器嵌入,仅在 trainable=false 时可用。
  • 近似训练集评估 (evaluate_training_set=false),它在每个 epoch 结束时计算报告的训练集指标,这些指标是训练期间指标的累积聚合,而不是在每个训练 epoch 结束时对训练集进行单独的遍历。虽然这使得训练指标在早期 epoch 看起来“嘈杂”,但通常会带来 33% 的训练时间加速。
input_features:
 - name: review
   type: text
   encoder:
     type: auto_transformer
     pretrained_model_name_or_path: bert-base-uncased
     trainable: false
   preprocessing:
     cache_encoder_embeddings: true

output_features:
 - name: sentiment
   type: category

基于 Adapter 的微调

LLM 高效微调的最大障碍之一是在每个训练步骤中需要更新数十亿个参数。参数高效微调 (PEFT) 描述了一系列技术,这些技术在微调期间减少可训练参数的数量,以加快训练速度,并减少训练大型语言模型所需的内存和磁盘空间。

PEFT 是 HuggingFace 的一个流行库,它实现了许多流行的参数高效微调策略,现在在 Ludwig v0.8 中,我们提供了与 PEFT 的原生集成,允许您通过更改配置中的一个参数,利用任何数量的技术更有效地微调 LLM。

最常用的 PEFT adapter 之一是低秩适应 (LoRA),现在可以通过配置“adapter”参数在 Ludwig 中为任何大型语言模型启用它

adapter: lora

此外,任何 LoRA 超参数都可以显式配置以覆盖 Ludwig 的默认设置

adapter:
 type: lora
 r: 16
 alpha: 32
 dropout: 0.1

可以将 Adapter 添加到任何 LLM 模型类型,或 Ludwig 中任何预训练的 auto_transformer 文本编码器,使用相同的参数选项。

在 Ludwig v0.8 中,我们添加了对以下 PEFT 技术的原生支持,未来还将支持更多。在此处阅读有关 Ludwig 中 PEFT 的更多信息 此处

  • LoRA
  • AdaLoRA
  • Adaptation Prompt (也称为 LLaMA Adapter)

在大多数框架中,将一个生成文本的 LLM 改编用于分类或回归任务需要大量工作,但在 Ludwig 中,只需修改 YAML 配置中的几行即可实现

input_features:
 - name: review
   type: text
   encoder:
     type: auto_transformer
     pretrained_model_name_or_path: meta-llama/Llama-2-7b-hf
     trainable: true
     adapter: lora


output_features:
 - name: sentiment
   type: category