Целевые модули для применения PEFT/LoRA на разных моделях

Я рассматриваю несколько различных примеров использования PEFT на разных моделях. LoraConfigобъект содержитtarget_modulesмножество. В некоторых примерах целевыми модулями являются["query_key_value"], иногда это так["q", "v"], иногда что-то еще.

Я не совсем понимаю, откуда берутся значения целевых модулей. Где на странице модели мне следует посмотреть, что такое адаптируемые модули LoRA?

Один пример (для модели Falcon 7B):

      peft_config = LoraConfig(
    lora_alpha=lora_alpha,
    lora_dropout=lora_dropout,
    r=lora_r,
    bias="none",
    task_type="CAUSAL_LM",
    target_modules=[
        "query_key_value",
        "dense",
        "dense_h_to_4h",
        "dense_4h_to_h",
    ]

Другой пример (для модели Опт-6.7Б):

      config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

И еще (для модели Flan-T5-xxl):

      lora_config = LoraConfig(
 r=16,
 lora_alpha=32,
 target_modules=["q", "v"],
 lora_dropout=0.05,
 bias="none",
 task_type=TaskType.SEQ_2_SEQ_LM
)

1 ответ

Допустим, вы загружаете какую-то модель по вашему выбору:

model = AutoModelForCausalLM.from_pretrained("some-model-checkpoint")

Затем вы можете увидеть доступные модули, распечатав эту модель:

print(model)

Вы получите что-то вроде этого (SalesForce/CodeGen25):

      LlamaForCausalLM(
  (model): LlamaModel(
    (embed_tokens): Embedding(51200, 4096, padding_idx=0)
    (layers): ModuleList(
      (0-31): 32 x LlamaDecoderLayer(
        (self_attn): LlamaAttention(
          (q_proj): Linear(in_features=4096, out_features=4096, bias=False)
          (k_proj): Linear(in_features=4096, out_features=4096, bias=False)
          (v_proj): Linear(in_features=4096, out_features=4096, bias=False)
          (o_proj): Linear(in_features=4096, out_features=4096, bias=False)
          (rotary_emb): LlamaRotaryEmbedding()
        )
        (mlp): LlamaMLP(
          (gate_proj): Linear(in_features=4096, out_features=11008, bias=False)
          (down_proj): Linear(in_features=11008, out_features=4096, bias=False)
          (up_proj): Linear(in_features=4096, out_features=11008, bias=False)
          (act_fn): SiLUActivation()
        )
        (input_layernorm): LlamaRMSNorm()
        (post_attention_layernorm): LlamaRMSNorm()
      )
    )
    (norm): LlamaRMSNorm()
  )
  (lm_head): Linear(in_features=4096, out_features=51200, bias=False)
)

В моем случае вы можете найти модуль LLamaAttention, содержащий q_proj, k_proj, v_proj и o_proj. А это некоторые модули, доступные для LoRA.

Предлагаю вам почитать подробнее о том, какие модули использовать в документе LoRA .

Другие вопросы по тегам