PEFT documentation
X-LoRA
X-LoRA
تُعدّ مزيج خبراء LoRA (X-LoRA) طريقة PEFT تُمكّن من مزيج متناثر أو كثيف لخبراء LoRA بناءً على مصفوفة توسيعات عالية الحُبيبية (رمز، طبقة، تسلسل). وتستفيد هذه الطريقة من محوِّلات LoRA المجمّدة ونموذج أساسي مجمّد لتقليل عدد المعاملات التي تحتاج إلى ضبط دقيق بشكل جذري.
من الجوانب الفريدة في X-LoRA هو تنوعه: إذ يمكن تطبيقه على أي نموذج أساسي في transformers مزوّد بمُكيّفات LoRA. وهذا يعني أنه، على الرغم من استراتيجية مزيج الخبراء، لا يجب إجراء أي تغييرات على كود النموذج.
يُبيّن الرسم البياني أدناه كيف تتغير معاملات التوسيع (scalings) لموجّهات (prompts) مختلفة لكل رمز (token). ويبرز هذا الرسم تفعيل مُكيّفات (adapters) مختلفة مع تقدم عملية التوليد وتكوين التسلسل لسياق جديد.

يتطلب X-LoRA في كل خطوة تشغيل النموذج الأساسي مرتين: أولاً، للحصول على الحالات المخفية دون أي محولات LoRA، وثانياً، تُستخدم الحالات المخفية لحساب عوامل التدرج التي تُطبَّق على محولات LoRA، ثم يُشغَّل النموذج مرة ثانية. يكون ناتج التشغيل الثاني هو نتيجة خطوة النموذج.
في النهاية، يتيح X-LoRA للنموذج أن يعكس معرفته بسبب مخطط المرور الأمامي المزدوج، ويعيد تكوين البنية ديناميكيًا.
ملخص الورقة البحثية هو:
نُقدّم استراتيجية خلط الخبراء لإنشاء نماذج لغوية كبيرة مُعدّلة باستخدام نهج عميق على مستوى الطبقات والرموز يعتمد على التكيف منخفض الرتبة (LoRA). بدءًا من مجموعة من مُكيّفات LoRA المُدرَّبة مسبقًا، تستخدم استراتيجية البوابة لدينا الحالات المخفية لخلط الطبقات المُكيَّفة ديناميكيًا، مما يتيح لنموذج X-LoRA الناتج الاعتماد على قدرات مختلفة وإنشاء تركيبات عميقة على مستوى الطبقات لم تُستخدم من قبل لحل المهام. يستلهم التصميم من المبادئ البيولوجية للشمولية والتنوع، حيث تُعاد استخدام وحدات بناء الشبكات العصبية في تجليات هرمية مختلفة. وبالتالي، يمكن تنفيذ نموذج X-LoRA بسهولة لأي نموذج لغوي كبير (LLM) موجود مسبقًا دون الحاجة إلى تعديلات على البنية الأساسية. نُطوّر نموذج X-LoRA مُصمَّم خصيصًا يوفر قدرات علمية تشمل مهام التحليل الأمامي/العكسي وقدرات استدلال محسّنة، مع تركيز على تحليل المواد الحيوية، ميكانيكا البروتينات وتصميمها. تشمل آثار هذا العمل الوصول إلى نماذج قابلة للتوسيع والتكيف بسهولة مع معرفة قوية بالمجال وقابلية التكامل عبر مجالات المعرفة المختلفة. وبفضل وجود خبراء في البيولوجيا، والرياضيات، والاستدلال، والمواد المستوحاة من البيولوجيا، والميكانيكا والمواد، والكيمياء، والفيزياء الحيوية للبروتينات، والميكانيكا، وخصائص الجزيئات المستندة إلى الميكانيكا الكمومية، نُجري سلسلة من دراسات الحالة المركزة على الفيزياء. نفحص استرجاع المعرفة، ومهام ميكانيكا البروتينات الأمامية/العكسية، وتصميم البروتينات، والنمذجة الوكيلة المعادية بما في ذلك بناء الرسوم البيانية المعرفية الأنطولوجية، وكذلك تصميم الجزيئات. لا يقتصر دور النموذج على إجراء تنبؤات كمية بخصائص البروتينات النانوية الميكانيكية أو الخصائص الجزيئية الكمومية، بل يستدل أيضًا على النتائج ويتنبأ بشكل صحيح بالآليات المحتملة التي تفسر السلوكيات الجزيئية المميزة..
يرجى الاستشهاد بـ X-LoRA على النحو التالي:
@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},
}واجهة برمجة التطبيقات
XLoraConfig
فئة 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 )
المعاملات
- hidden_size (
int) — حجم المخفي للنموذج الأساسي. - adapters (
dict) — خريطة من أسماء المُكيِّفات إلى معرّف مُكيِّف LoRA، وفقاً لـ PeftModel.load_adapter. سيتم تحميلها تلقائياً، لاستخدامها كخبراء LoRA. عند استخدام from_pretrained، مرّر قاموس المُكيِّفات الجديد كحجة كلمة مفتاحية. - enable_softmax (
bool، اختياري، القيمة الافتراضيةTrue) — تفعيل تطبيق softmax لتصنيف X-LoRA. - enable_softmax_topk (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل تطبيق softmax لمُكيّفات LoRA الخاصة بـ top-k. يتعارض معenable_softmaxولا يجب تعيينه إلا إذا تم تعيينtop_k_lora. - softmax_temperature (
float، اختياري، القيمة الافتراضية 1.0) — درجة حرارة Softmax، حيث تؤدي القيم الأقل إلى تنبؤات أكثر حدة - layerwise_scalings (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، يتم توليد معاملات مقياس لكل مُكيّف LoRA (كل طبقة). إذا كانت القيمة False، يتم بث معاملات المقياس، بنفس القيمة، إلى كل طبقة. - top_k_lora (
int، اختياري، القيمة الافتراضية None) — اختر بشكل متناثر أفضل top_k من خبراء LoRA بدلاً من الطريقة الكثيفة الافتراضية. - xlora_depth (
int, اختياري، القيمة الافتراضية 1) — عمق مصنف X-LoRA. - xlora_size (
int، اختياري، القيمة الافتراضية 2048) — الحجم المخفي لتصنيف X-LoRA، غير ذي صلة إذا كانxlora_depth=1. - xlora_dropout_p (
float, اختياري، القيمة الافتراضية 0.2) — احتمالية Dropout في مصنف X-LoRA، غير ذي صلة إذا كانxlora_depth=1. - use_trainable_adapters (
bool، اختياري، القيمة الافتراضية False) — اجعل المُكيّفات قابلة للتدريب. - scaling_pass_value (
float، اختياري، القيمة الافتراضية 0) — قيمة مسار التوسيع. - global_scaling_weight (
float، اختياري، القيمة الافتراضية 1) — الوزن الذي يُضرب به ناتج كل مُكيّف LoRA.
هذه فئة الإعدادات المخزنة لإعدادات XLoraModel. عند إعادة تحميل الإعدادات، يتم تجاهل مسارات حقل adapters لصالح المُكيّفات المحفوظة. وبالتالي، فإن المفاتيح فقط هي التي تهم أثناء التحميل.
XLoraModel
فئة 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
المعاملات
- model (
torch.nn.Module) — النموذج الذي سيتم تكييفه. - config (XLoraConfig) — إعدادات نموذج Lora.
- adapter_name (
str) — اسم المُكيّف، ولا يؤثر على أسماء مُكيّفات LoRA.
يعيد
torch.nn.Module
نموذج X-LoRA.
ينشئ نموذج X-LoRA (مزيج من خبراء LoRA) من نموذج transformers مُدرَّب مسبقًا. حاليًا، لا تعمل هذه النسخة من X-LoRA إلا مع النماذج ذات بنية transformer.
يُوصف هذا الأسلوب بالتفصيل في https://huggingface.co/papers/2402.07148.
مثال:
>>> 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)امسح سجل القياسات.
تعطيل تسجيل التوسعات، دون مسح السجل.
تفعيل تسجيل قياسات التوسع.
يعيد القياسات المُجمَّعة، مُجمَّعةً حسب seq_len. يتكوّن كل قيمة من المواضع (الأولى) والمُتجهات المرتبطة بها. تُقرَن المواضع بالمُتجهات المرتبطة بها وتُحدد الموضع في سجل القياس.
احصل على وزن LoRA العام.
يعيد التنبؤ الأخير بالمقاييس، أو None إذا لم يتم التنبؤ بأي مقاييس. يكون شكل المصفوفة (batch_size, seq_len, n_layers, n_classes).
يعيد نسخة سطحية (تنسخ القائمة نفسها فقط وليس المتجهات) من القائمة التي تحتوي على سجل التدرجات. تعديل القائمة لا يغيّر السجل الأساسي. تكون المتجهات من الشكل (batch_size, seq_len, n_layers, n_classes). قد يتغير بُعد seq_len تبعًا لبُعد الإدخال.
اضبط وزن LoRA العام، وهو عدد قياسي يُضرب في مخرجات كل مُكيّف LoRA. القيمة الافتراضية له هي 1. وينعكس ذلك في الإعدادات.
حدد قيمة مسار التوسيع، وهي القيمة التي تُضبط عليها قيم التوسيع أثناء مسار التوسيع. إذا كانت القيمة None، فستكون قيمة مسار التوسيع 1/n حيث n هو عدد المُكيّفات (adapters).
اختر بشكل متناثر الخبراء المحددين top_k من LoRA بدلاً من الطريقة الكثيفة الافتراضية. اضبط القيمة على None لاستخدام الطريقة الكثيفة. يظهر ذلك في ملف الإعدادات.