PEFT documentation
X-LoRA
X-LoRA
Mixture of LoRA Experts (X-LoRA) là một phương pháp PEFT cho phép kết hợp các chuyên gia LoRA theo dạng thưa hoặc đặc dựa trên ma trận mở rộng có độ hạt mịn cao (token, layer, sequence). Phương pháp này tận dụng các adapter LoRA đóng băng và một mô hình cơ sở đóng băng để giảm đáng kể số lượng tham số cần tinh chỉnh.
Một điểm đặc biệt của X-LoRA là tính linh hoạt của nó: nó có thể được áp dụng cho bất kỳ mô hình cơ sở nào của transformers có bộ thích ứng LoRA. Điều này có nghĩa là, bất chấp chiến lược hỗn hợp chuyên gia, không cần phải thực hiện bất kỳ thay đổi nào đối với mã mô hình.
Biểu đồ bên dưới minh họa cách các hệ số mở rộng thay đổi theo từng token cho các prompt khác nhau. Điều này làm nổi bật sự kích hoạt của các adapter khác nhau khi quá trình sinh tiến triển và chuỗi tạo ra ngữ cảnh mới.

Với mỗi bước, X-LoRA yêu cầu chạy mô hình cơ sở hai lần: đầu tiên, để lấy các trạng thái ẩn (hidden states) mà không có bất kỳ bộ thích ứng (adapter) LoRA nào, và thứ hai, các trạng thái ẩn này được sử dụng để tính toán các hệ số tỷ lệ (scalings) được áp dụng cho các bộ thích ứng LoRA, sau đó mô hình được chạy lần thứ hai. Đầu ra của lần chạy thứ hai chính là kết quả của bước mô hình.
Cuối cùng, X-LoRA cho phép mô hình phản ánh lại kiến thức của nó nhờ vào cơ chế hai lần truyền trực tiếp (dual forward pass), và cấu hình lại kiến trúc một cách động.
Tóm tắt từ bài báo là:
Chúng tôi báo cáo một chiến lược hỗn hợp chuyên gia để tạo ra các mô hình ngôn ngữ lớn được tinh chỉnh bằng cách tiếp cận theo cấp độ token từng lớp sâu dựa trên thích ứng hạng thấp (LoRA). Bắt đầu từ một bộ adapter LoRA được huấn luyện trước, chiến lược cổng của chúng tôi sử dụng các trạng thái ẩn để trộn động các lớp đã thích ứng, cho phép mô hình X-LoRA kết quả khai thác các khả năng khác nhau và tạo ra các tổ hợp theo cấp độ lớp sâu chưa từng được sử dụng trước đó để giải quyết các tác vụ. Thiết kế này lấy cảm hứng từ các nguyên tắc sinh học về tính phổ quát và tính đa dạng, trong đó các khối xây dựng của mạng nơ-ron được tái sử dụng trong các biểu hiện phân cấp khác nhau. Do đó, mô hình X-LoRA có thể dễ dàng triển khai cho bất kỳ mô hình ngôn ngữ lớn (LLM) hiện có nào mà không cần sửa đổi cấu trúc nền tảng. Chúng tôi phát triển một mô hình X-LoRA được thiết kế riêng, cung cấp các khả năng khoa học bao gồm các tác vụ phân tích thuận nghịch và khả năng suy luận được tăng cường, tập trung vào phân tích vật liệu sinh học, cơ học và thiết kế protein. Tác động của công việc này bao gồm việc tiếp cận các mô hình có thể mở rộng và thích ứng dễ dàng với kiến thức chuyên ngành mạnh mẽ và khả năng tích hợp xuyên suốt các lĩnh vực kiến thức. Với các chuyên gia trong sinh học, toán học, suy luận, vật liệu lấy cảm hứng từ sinh học, cơ học và vật liệu, hóa học, sinh lý học protein, cơ học và các tính chất phân tử dựa trên cơ học lượng tử, chúng tôi tiến hành một loạt các nghiên cứu tình huống tập trung vào vật lý. Chúng tôi xem xét khả năng ghi nhớ kiến thức, các tác vụ cơ học protein thuận nghịch, thiết kế protein, mô hình hóa tác nhân đối kháng bao gồm xây dựng đồ thị kiến thức luận lý, cũng như thiết kế phân tử. Mô hình không chỉ có khả năng đưa ra các dự đoán định lượng về các tính chất nano cơ học của protein hoặc các tính chất phân tử cơ học lượng tử, mà còn suy luận về các kết quả và dự đoán chính xác các cơ chế có khả năng giải thích các hành vi phân tử khác biệt..
Vui lòng trích dẫn X-LoRA như sau:
@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
lớp 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 )
Tham số
- hidden_size (
int) — Kích thước ẩn của mô hình cơ sở. - adapters (
dict) — Bản ánh xạ từ tên adapter sang id của adapter LoRA, theo PeftModel.load_adapter. Chúng sẽ được tự động tải để sử dụng như các chuyên gia LoRA. Khi sử dụng from_pretrained, hãy truyền dict adapters mới dưới dạng đối số từ khóa. - enable_softmax (
bool, tùy chọn, mặc định làTrue) — Bật việc áp dụng softmax cho bộ phân loại X-LoRA. - enable_softmax_topk (
bool, tùy chọn, mặc định làFalse) — Bật việc áp dụng softmax cho các bộ thích ứng LoRA top-k. Loại trừ lẫn nhau vớienable_softmaxvà chỉ được đặt nếutop_k_lorađược đặt. - softmax_temperature (
float, tùy chọn, mặc định là 1.0) — Nhiệt độ softmax, giá trị thấp hơn sẽ cho ra các dự đoán sắc nét hơn - layerwise_scalings (
bool, tùy chọn, mặc định làFalse) — Nếu là True, sẽ tạo các hệ số scale cho từng bộ thích ứng LoRA (từng lớp). Nếu là False, các hệ số scale sẽ được phát sóng (broadcast) giống nhau đến từng lớp. - top_k_lora (
int, tùy chọn, mặc định là None) — Chọn thưa top_k chuyên gia LoRA thay vì phương pháp dense mặc định. - xlora_depth (
int, tùy chọn, mặc định là 1) — Độ sâu của bộ phân loại X-LoRA. - xlora_size (
int, tuỳ chọn, mặc định là 2048) — Kích thước ẩn của bộ phân loại X-LoRA, không liên quan nếuxlora_depth=1. - xlora_dropout_p (
float, tùy chọn, mặc định là 0.2) — Xác suất dropout của bộ phân loại X-LoRA, không liên quan nếuxlora_depth=1. - use_trainable_adapters (
bool, tùy chọn, mặc định là False) — Cho phép huấn luyện các adapter. - scaling_pass_value (
float, tùy chọn, mặc định là 0) — Giá trị pass scaling. - global_scaling_weight (
float, tùy chọn, mặc định là 1) — Trọng số để nhân với đầu ra của mỗi bộ thích ứng LoRA.
Đây là lớp cấu hình để lưu trữ cấu hình của XLoraModel. Khi nạp lại cấu hình, các đường dẫn của trường adapters sẽ bị bỏ qua để ưu tiên các adapter đã được lưu. Do đó, chỉ các khóa mới có ý nghĩa trong quá trình nạp.
XLoraModel
lớp 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
Tham số
- model (
torch.nn.Module) — Mô hình cần được thích ứng. - config (XLoraConfig) — Cấu hình của mô hình Lora.
- adapter_name (
str) — Tên của adapter, không ảnh hưởng đến tên của các adapter LoRA.
Trả về
torch.nn.Module
Mô hình X-LoRA.
Tạo một mô hình X-LoRA (Mixture of LoRA experts) từ một mô hình transformers được huấn luyện trước. Hiện tại, cài đặt X-LoRA này chỉ hoạt động với các mô hình có kiến trúc transformer.
Phương pháp này được mô tả chi tiết tại https://huggingface.co/papers/2402.07148.
Ví dụ:
>>> 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)Xóa nhật ký scalings.
Tắt ghi log các phép scale, không xóa log.
Bật ghi log cho việc mở rộng.
Trả về các hệ số tỷ lệ được phân nhóm theo seq_len. Mỗi giá trị bao gồm các vị trí (giá trị đầu tiên) và các tensor liên quan. Các vị trí được ghép cặp với các tensor liên quan và cho biết vị trí trong log tỷ lệ.
Lấy trọng số LoRA toàn cục.
Trả về dự đoán scalings mới nhất, hoặc None nếu chưa có dự đoán scalings nào. Tensor có hình dạng (batch_size, seq_len, n_layers, n_classes).
Trả về bản sao nông (chỉ sao chép danh sách, không sao chép các tensor) của danh sách chứa nhật ký tỷ lệ mở rộng. Việc chỉnh sửa danh sách sẽ không làm thay đổi nhật ký gốc. Các tensor có hình dạng (batch_size, seq_len, n_layers, n_classes). Chiều seq_len có thể thay đổi theo chiều đầu vào.
Đặt trọng số LoRA toàn cục, một số vô hướng để nhân với đầu ra của mỗi bộ thích ứng LoRA. Mặc định là 1. Điều này được phản ánh trong cấu hình.
Đặt giá trị của bước scaling, tức là giá trị được dùng để thiết lập các hệ số scaling trong bước scaling. Nếu giá trị là None, giá trị của bước scaling sẽ là 1/n, trong đó n là số lượng adapter.
Chọn thưa các chuyên gia LoRA top_k được chỉ định thay vì phương pháp dense mặc định. Đặt thành None để sử dụng dense. Điều này được phản ánh trong config.