PEFT documentation
X-LoRA
X-LoRA
LoRA Uzmanları Karışımı (X-LoRA), yüksek granülerlikte (token, katman, dizi) ölçekleme matrisine dayalı olarak LoRA uzmanlarının seyrek veya yoğun karışımını mümkün kılan bir PEFT yöntemidir. Bu yöntem, dondurulmuş LoRA adaptörlerini ve dondurulmuş bir temel modeli kullanarak, ince ayar gerektiren parametre sayısını önemli ölçüde azaltır.
X-LoRA'nın benzersiz bir özelliği çok yönlülüğüdür: LoRA adaptörleriyle herhangi bir transformers taban modeline uygulanabilir. Bu, uzmanlar karışımı stratejisine rağmen model kodunda herhangi bir değişiklik yapılmasına gerek olmadığı anlamına gelir.
Aşağıdaki grafik, her token için farklı istemlerde ölçeklendirmelerin nasıl değiştiğini göstermektedir. Bu, üretim ilerledikçe ve dizi yeni bir bağlam oluşturdukça farklı adaptörlerin etkinleşmesini vurgular.

Her adım için X-LoRA, temel modelin iki kez çalıştırılmasını gerektirir: birincisi, herhangi bir LoRA adaptörü olmadan gizli durumları (hidden states) almak için; ikincisi ise, gizli durumlar LoRA adaptörlerine uygulanacak ölçeklemeleri hesaplamak için kullanılır ve model ikinci kez çalıştırılır. İkinci çalıştırmanın çıktısı, model adımının sonucudur.
Sonuç olarak X-LoRA, çift ileri geçiş şeması sayesinde modelin bilgi üzerine düşünmesine ve mimariyi dinamik olarak yeniden yapılandırmasına olanak tanır.
Makalenin özeti şudur:
Derin katman bazlı, token seviyesinde bir yaklaşım üzerine kurulu, düşük rütbeli adaptasyon (LoRA) tabanlı ince ayarlanmış büyük dil modelleri oluşturmak için uzman karışımı stratejisi sunuyoruz. Ön eğitilmiş bir LoRA adaptörleri setinden başlayarak, kapı stratejimiz gizli durumları kullanarak adapte edilmiş katmanları dinamik olarak karıştırır; bu da ortaya çıkan X-LoRA modelinin farklı yeteneklerden yararlanmasına ve görevleri çözmek için daha önce hiç kullanılmamış derin katman bazlı kombinasyonlar oluşturmasına olanak tanır. Tasarım, sinir ağı yapı taşlarının farklı hiyerarşik tezahürlerde yeniden kullanıldığı biyolojik evrenselliği ve çeşitliliği ilkelerinden ilham alır. Bu nedenle, X-LoRA modeli, alt yapının yapısında değişiklik yapma ihtiyacı duymadan, mevcut herhangi bir büyük dil modeline (LLM) kolayca uygulanabilir. Bilimsel yetenekler sunan, ileri/ters analiz görevleri ve geliştirilmiş akıl yürütme yeteneğine odaklanan, biyomalzeme analizi, protein mekaniği ve tasarımı üzerine odaklanmış özel bir X-LoRA modeli geliştiriyoruz. Bu çalışmanın etkileri, güçlü alan bilgisi ve bilgi alanları arasında entegrasyon yeteneğine sahip, kolayca genişletilebilir ve uyarlanabilir modellere erişimi içerir. Biyoloji, matematik, akıl yürütme, biyomimik malzemeler, mekanik ve malzemeler, kimya, protein biyofiziği, mekanik ve kuantum mekaniğine dayalı moleküler özellikler alanlarında uzmanlara sahip bir dizi fizik odaklı vaka çalışması gerçekleştiriyoruz. Bilgi hatırlama, protein mekaniği ileri/ters görevleri, protein tasarımı, ontolojik bilgi grafiği inşası dahil olmak üzere advers ajan modelleme ve moleküler tasarımı inceliyoruz. Model, proteinlerin nanomekanik özellikleri veya kuantum mekanik moleküler özelliklerinin nicel tahminlerini yapmanın yanı sıra, sonuçlar üzerinde akıl yürütebilir ve farklı moleküler davranışları açıklayan olası mekanizmaları doğru bir şekilde tahmin edebilir..
X-LoRA'yı şu şekilde atıf yapın:
@article{10.1063/5.0203126,
author = {Buehler, Eric L. and Buehler, Markus J.},
title = "{X-LoRA: Mixture of low-rank adapter experts, a flexible framework for large language models with applications in protein mechanics and molecular design}",
journal = {APL Machine Learning},
volume = {2},
number = {2},
pages = {026119},
year = {2024},
month = {05},
abstract = "{We report a mixture of expert strategy to create fine-tuned large language models using a deep layer-wise token-level approach based on low-rank adaptation (LoRA). Starting with a set of pre-trained LoRA adapters, our gating strategy uses the hidden states to dynamically mix adapted layers, allowing the resulting X-LoRA model to draw upon different capabilities and create never-before-used deep layer-wise combinations to solve tasks. The design is inspired by the biological principles of universality and diversity, where neural network building blocks are reused in different hierarchical manifestations. Hence, the X-LoRA model can be easily implemented for any existing large language model without a need for modifications of the underlying structure. We develop a tailored X-LoRA model that offers scientific capabilities, including forward/inverse analysis tasks and enhanced reasoning capability, focused on biomaterial analysis, protein mechanics, and design. The impact of this work includes access to readily expandable and adaptable models with strong domain knowledge and the capability to integrate across areas of knowledge. Featuring experts in biology, mathematics, reasoning, bio-inspired materials, mechanics and materials, chemistry, protein biophysics, mechanics, and quantum-mechanics based molecular properties, we conduct a series of physics-focused case studies. We examine knowledge recall, protein mechanics forward/inverse tasks, protein design, adversarial agentic modeling including ontological knowledge graph construction, and molecular design. The model is capable not only of making quantitative predictions of nanomechanical properties of proteins or quantum mechanical molecular properties but also reasoning over the results and correctly predicting likely mechanisms that explain distinct molecular behaviors.}",
issn = {2770-9019},
doi = {10.1063/5.0203126},
url = {https://doi.org/10.1063/5.0203126},
eprint = {https://pubs.aip.org/aip/aml/article-pdf/doi/10.1063/5.0203126/19964043/026119\_1\_5.0203126.pdf},
}API
XLoraConfig
sınıf peft.XLoraConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsehidden_size: int = Noneadapters: dict[str, str] = Noneenable_softmax: bool = Trueenable_softmax_topk: bool = Falselayerwise_scalings: bool = Falsexlora_depth: int = 1xlora_size: int = 2048xlora_dropout_p: float = 0.2use_trainable_adapters: bool = Falsesoftmax_temperature: float = 1.0top_k_lora: Optional[int] = Nonescaling_pass_value: float = 0.0global_scaling_weight: float = 1.0 )
Parametreler
- hidden_size (
int) — Temel modelin gizli boyutu. - adapters (
dict) — PeftModel.load_adapter'a göre, adaptör adlarının LoRA adaptör kimliğine eşlenmesi. Otomatik olarak yükleneceklerdir, LoRA uzmanları olarak kullanılmak üzere. from_pretrained kullanırken, yeni adaptör sözlüğünü bir anahtar kelime argümanı olarak iletin. - enable_softmax (
bool, isteğe bağlı, varsayılanTrue) — X-LoRA sınıflandırıcısı için softmax uygulamasını etkinleştirir. - enable_softmax_topk (
bool, isteğe bağlı, varsayılanFalse) — En iyi k LoRA adaptörleri için softmax uygulamasını etkinleştirir.enable_softmaxile birbirini dışlar ve yalnızcatop_k_loraayarlandığında belirlenmelidir. - softmax_temperature (
float, isteğe bağlı, varsayılan 1.0) — Softmax sıcaklığı, daha düşük değerler daha keskin tahminler üretir - layerwise_scalings (
bool, isteğe bağlı, varsayılanFalse) — True ise, her LoRA adaptörü (her katman) için ölçeklemeler oluşturulur. False ise, ölçeklemeler her katmana aynı şekilde yayınlanır. - top_k_lora (
int, isteğe bağlı, varsayılan olarak None) — Varsayılan yoğun yöntem yerine, top_k LoRA uzmanını seyrek olarak seçer. - xlora_depth (
int, isteğe bağlı, varsayılan 1) — X-LoRA sınıflandırıcısının derinliği. - xlora_size (
int, isteğe bağlı, varsayılan 2048) — X-LoRA sınıflandırıcısının gizli boyutu,xlora_depth=1ise önemsizdir. - xlora_dropout_p (
float, isteğe bağlı, varsayılan 0.2) — X-LoRA sınıflandırıcısının dropout olasılığı,xlora_depth=1ise önemsizdir. - use_trainable_adapters (
bool, isteğe bağlı, varsayılan olarak False) — Adaptörleri eğitilebilir hale getirir. - scaling_pass_value (
float, isteğe bağlı, varsayılan 0) — Ölçekleme geçiş değeri. - global_scaling_weight (
float, isteğe bağlı, varsayılan 1) — Her LoRA adaptörünün çıktısını çarpmak için kullanılan ağırlık.
Bu, bir XLoraModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Yapılandırma yeniden yüklendiğinde, adapters alanının yolları, kaydedilmiş adaptörler lehine göz ardı edilir. Bu nedenle, yükleme sırasında yalnızca anahtarlar önemlidir.
XLoraModel
sınıf peft.XLoraModel
< source >( model: nn.Moduleconfig: Union[dict[str, XLoraConfig], XLoraConfig]adapter_name: strtorch_device: Optional[str] = Noneephemeral_gpu_offload: bool = Falseautocast_adapter_dtype: bool = True**kwargs ) → torch.nn.Module
Parametreler
- model (
torch.nn.Module) — Uyarlanacak model. - config (XLoraConfig) — Lora modelinin yapılandırması.
- adapter_name (
str) — Adaptörün adı, LoRA adaptör adlarını etkilemez.
Dönüş değeri
torch.nn.Module
X-LoRA modeli.
Önceden eğitilmiş bir transformers modelinden bir X-LoRA (LoRA uzmanlarının karışımı) modeli oluşturur. Şu anda bu X-LoRA uygulaması yalnızca transformer mimarisine sahip modellerle çalışır.
Yöntem, https://huggingface.co/papers/2402.07148 adresinde ayrıntılı olarak açıklanmıştır.
Örnek:
>>> import torch
>>> from transformers import AutoModelForCausalLM, AutoConfig, BitsAndBytesConfig
>>> from peft import XLoraConfig, get_peft_model, prepare_model_for_kbit_training
>>> model_config = AutoConfig.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1")
>>> config = XLoraConfig(
... task_type="CAUSAL_LM",
... hidden_size=model_config.hidden_size,
... xlora_depth=4,
... adapters={
... "adapter_1": "./path/to/the/checkpoint/",
... "adapter_2": "./path/to/the/checkpoint/",
... "adapter_n": "./path/to/the/checkpoint/",
... },
... )
>>> int8_config = BitsAndBytesConfig(load_in_8bit=True)
>>> model = AutoModelForCausalLM.from_pretrained(
... "mistralai/Mistral-7B-Instruct-v0.1",
... trust_remote_code=True,
... attn_implementation="flash_attention_2",
... device_map="cuda:0",
... torch_dtype=torch.bfloat16,
... quantization_config=int8_config,
... )
>>> model = prepare_model_for_kbit_training(model)
>>> xlora_model = get_peft_model(model, config)Ölçeklemeler günlüğünü temizleyin.
Günlüğü temizlemeden ölçeklemeleri günlüğe kaydetmeyi devre dışı bırakın.
Ölçeklemeler günlükleme özelliğini etkinleştirin.
seq_len'e göre gruplandırılmış ölçeklemeleri döndürür. Her değer, konumları (ilk öğe) ve ilişkili tensörleri içerir. Konumlar, ilişkili tensörlerle eşleştirilir ve ölçekleme kaydındaki konumu belirtir.
Küresel LoRA ağırlığını alın.
En son ölçekleme tahminini döndürür; herhangi bir ölçekleme tahmin edilmemişse None döndürür. Gerginin şekli (batch_size, seq_len, n_layers, n_classes)'dir.
Liste içindeki ölçekleme kaydını içeren, sığ (yalnızca listeyi, tensörleri değil kopyalayan) bir kopya döndürür. Listenin düzenlenmesi, alttaki kaydı değiştirmez. Tensörlerin şekli (batch_size, seq_len, n_layers, n_classes)'dir. seq_len boyutu, girdi boyutuna göre değişebilir.
Küresel LoRA ağırlığını, her LoRA adaptörünün çıktısını çarpmak için kullanılan bir skaleri ayarlayın. Bu varsayılan olarak 1'dir. Bu, yapılandırmada yansıtılır.
Ölçekleme geçiş değeri, ölçekleme geçişi sırasında ölçeklemelerin ayarlanacağı değerdir. Değer None ise, ölçekleme geçiş değeri, n adaptör sayısı olmak üzere 1/n olacaktır.
Varsayılan yoğun yöntem yerine belirtilen top_k LoRA uzmanlarını seyrek olarak seçin. Yoğun yöntemi kullanmak için None olarak ayarlayın. Bu, yapılandırmada yansıtılır.