Целевые модули для применения 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 .