PEFT documentation
GLoRA
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 модифицирует замороженный линейный слой следующим образом:
где каждый путь параметризуется независимо.
GloraConfig
класс peft.GloraConfig
< 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 = 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
< source >( 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.GloraLinear
< source >( 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 (добавление, удаление, переключение, слияние и т. д.).