PEFT documentation

GLoRA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GLoRA

Обобщённая адаптация низкого ранга (GLoRA) — это метод PEFT, обобщающий LoRA и связанные подходы. GLoRA разлагает обновления на настраиваемые пути (A, B, C, D, E), где каждый путь может использовать параметризацию низкого ранга, векторную, константную или отключённую в зависимости от конкретного пути.

Каждый путь поддерживает один из четырёх режимов параметризации. Они представляют собой компромисс между количеством параметров и выразительностью (насколько богатым может быть обновление):

  • "lora": Разложение на низкоранговые компоненты (как в стандартном LoRA). Использует r * (out + in) параметров и позволяет выражать поправки ранга r. Наиболее выразительный вариант, требует больше всего параметров.
  • "vector": один вектор (например, форма (out, 1)), распространяемый по всей матрице. Использует O(out) параметров; только масштабирование или сдвиг по каналам.
  • "constant": единый скаляр, общий для всех элементов. Использует 1 параметр; наименее выразительный среди обучаемых вариантов.
  • "none": нули без обучаемых параметров; полностью отключает этот путь.

Не каждый путь поддерживает каждый режим (например, config_D_E не поддерживает "lora"). Выбор "lora" для большего числа путей увеличивает ёмкость и количество обучаемых параметров; "vector", "constant" или "none" уменьшают оба показателя.

GLoRA особенно полезна для исследований и продвинутых приложений, где вы хотите экспериментировать со структурированными паттернами обновлений и комбинировать несколько механизмов адаптации в одном слое.

В общем виде GLoRA модифицирует замороженный линейный слой следующим образом: Weff=W0+W0⊙A+B W_{\mathrm{eff}} = W_0 + W_0 \odot A + B beff=b0+b0⊙D+E+W0C b_{\mathrm{eff}} = b_0 + b_0 \odot D + E + W_0 C

где каждый путь параметризуется независимо.

GloraConfig

класс peft.GloraConfig

< >

( 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 = Falser: int = 8target_modules: list[str] | str | None = Nonebias: str = 'none'modules_to_save: list[str] | None = Noneconfig_A_B: typing.Literal['lora', 'vector', 'constant', 'none'] = 'lora'config_C: typing.Literal['lora', 'vector', 'none'] = 'lora'config_D_E: typing.Literal['vector', 'constant', 'none'] = 'constant'init_weights: bool = True )

Параметры

  • r (int) — Ранг низкорангового разложения, используемого, когда конфигурация установлена в lora.
  • target_modules (Optional[Union[List[str], str]]) — Имена модулей, к которым следует применить Glora.
  • config_A_B (str) — Параметризация для матриц A и B (множительные и аддитивные поправки к весам). Допустимые значения: lora, vector, constant, none.
  • config_C (str) — Параметризация для матрицы C (связь весов со смещением: b += W0 @ C). Допустимые значения: lora, vector, none.
  • config_D_E (str) — Параметризация для скаляров D и E (мультипликативные и аддитивные поправки смещения). Не поддерживает lora, поскольку D и E — это векторы размера смещения, а не матрицы. Допустимые значения: vector, constant, none.
  • init_weights (bool) — Если True (по умолчанию), инициализирует GLoRA как no-op (нули). Если False, использует инициализацию kaiming, чтобы адаптер не был no-op.

Это класс конфигурации для хранения конфигурации модели GloraModel.

Glora модифицирует замороженный линейный слой W0 следующим образом: W_eff = W0 + W0 * A + B и b_eff = b0 + b0 * D + E + W0 @ C.

Каждую матрицу (A, B, C, D, E) можно параметризовать независимо. Значения конфигурации управляют тем, сколько параметров используется и какие формы они могут выражать:

  • lora: Разложение на матрицы низкого ранга Xd @ Xu с размерностями (out, r) и (r, in). Использует r * (out + in) параметров и может выразить любую коррекцию ранга r. Аналогично стандартному LoRA.
  • vector: одиночный столбец вектора формы (out, 1), распространяемый на всю матрицу. Использует out параметров; масштабирование или сдвиг только по каналам вывода.
  • constant: единый скаляр, общий для всех элементов. Использует 1 параметр; наиболее ограниченный вариант.
  • none: нули, обучаемых параметров нет. Фактически отключает этот путь.

Основные параметры конфигурации

  • r: Ранг, используемый, когда путь настроен как "lora" (по умолчанию: 8).
  • target_modules: список или регулярное выражение для указания модулей, которые нужно адаптировать (например, ["q_proj", "v_proj"]).
  • config_A_B: тип пути для A и B (“lora”, “vector”, “constant”, “none”).
  • config_C: тип пути для C (“lora”, “vector”, “none”).
  • config_D_E: Тип пути для D и E (“constant”, “vector”, “none”).
  • bias: Обработка смещения ("none", "all" или "glora_only").
  • init_weights: если True (по умолчанию), GLoRA инициализируется как операция без изменений (no-op). Если False, используется инициализация Кайминга.

Примечания:

  • config_D_E не поддерживает "lora".
  • target_modules можно опустить для поддерживаемых типов моделей (используются сопоставления по умолчанию PEFT).

GloraModel

класс peft.GloraModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Создаёт модель Generalized Low Rank Adapter (GLoRA) на основе предобученной модели transformers.

  • Оборачивает базовую модель и внедряет адаптеры GLoRA в указанные модули.
  • Поддерживает несколько адаптеров, переключение адаптеров, объединение/разъединение и смешанный вывод в батче.
  • Используйте set_adapter, merge_and_unload и связанные методы для управления адаптерами.

GloraLayer и GloraLinear

класс peft.tuners.glora.GloraLayer

< >

( base_layer: nn.Module**kwargs )

класс peft.tuners.glora.GloraLinear

< >

( base_layer: nn.Moduleadapter_name: strconfig**kwargs )

Адаптер GLoRA, оборачивающий плотный ~torch.nn.Linear base_layer.

  • GloraLayer — это основная логика для обобщенной адаптации низкого ранга, поддерживающая несколько адаптеров и гибкие конфигурации путей.
  • GloraLinear — это замена для nn.Linear с поддержкой GLoRA.
  • GLoRA в настоящее время поддерживает базовые слои torch.nn.Linear.

Пример использования

from transformers import AutoModelForCausalLM
from peft import GloraConfig, get_peft_model

model = AutoModelForCausalLM.from_pretrained("your-model-id")
glora_config = GloraConfig(
    r=8,
    target_modules=["q_proj", "v_proj"],
    config_A_B="lora",
    config_C="vector",
    config_D_E="constant",
    task_type="CAUSAL_LM",
)
model = get_peft_model(model, glora_config)
model.print_healthcheck()

# Switch adapters, merge, etc.
model.set_adapter("default")
model.merge_and_unload()

Примечания

  • GLoRA является надмножеством LoRA: если задать для всех путей значение “lora”, получится стандартный LoRA.
  • Вы можете использовать различные типы путей для A/B/C/D/E, чтобы экспериментировать с новыми стратегиями адаптации.
  • GLoRA поддерживает все стандартные функции управления адаптерами PEFT (добавление, удаление, переключение, слияние и т. д.).

См. также

Update on GitHub