PEFT documentation

Обучаемые токены

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

Обучаемые токены

Метод Trainable Tokens позволяет настраивать конкретные эмбеддинги токенов без обучения всей матрицы эмбеддингов или использования адаптера для матрицы эмбеддингов. Он основан на исходной реализации, доступной здесь.

Метод нацелен только на определённые токены и селективно обучает индексы токенов, которые вы указываете. В результате требуемый объём оперативной памяти будет ниже, а объём дискового хранилища также значительно меньше, чем при сохранении полной матрицы эмбеддингов после дообучения.

Некоторые предварительные бенчмарки, полученные с помощью этого скрипта, показывают, что для gemma-2-2b (которая имеет довольно большую матрицу эмбеддингов) можно сэкономить ~4 ГиБ VRAM с Trainable Tokens по сравнению с полной дообучением матрицы эмбеддингов. Хотя LoRA будет использовать сопоставимое количество VRAM, он также может затрагивать токены, которые вы не хотите изменять. Обратите внимание, что это лишь ориентировочные данные, и различные размеры матриц эмбеддингов могут немного исказить эти цифры.

Обратите внимание, что этот метод не добавляет токены за вас: вам необходимо самостоятельно добавить токены в токенизатор и соответствующим образом изменить размер матрицы эмбеддингов модели. Данный метод будет переобучать эмбеддинги только для тех токенов, которые вы укажете. Этот метод также можно использовать в сочетании со слоями LoRA! См. документацию по LoRA.

Сохранение модели с помощью save_pretrained() или получение state dict с помощью get_peft_model_state_dict() при добавлении новых токенов может привести к сохранению полной матрицы эмбеддингов, а не только разницы, в качестве меры предосторожности, поскольку размер матрицы эмбеддингов был изменён. Чтобы сэкономить место, вы можете отключить это поведение, установив save_embedding_layers=False при вызове save_pretrained. Это безопасно, если вы не изменяете матрицу эмбеддингов другими способами, так как такие изменения не будут отслеживаться обучаемыми токенами.

Обзор бенчмарков

API

TrainableTokensConfig

класс peft.TrainableTokensConfig

< >

( 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 = Falsetoken_indices: list[int] = <factory>target_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )

Параметры

  • token_indices (list[int]) — Список целых чисел, указывающих индексы токенов, которые должны быть обучаемыми. Чтобы найти индекс токена с помощью токенизатора, можно токенизировать строку и посмотреть на возвращённые input_ids. Чем ближе количество индексов к общему числу токенов, тем менее эффективным становится этот метод.
  • target_modules (Optional[Union[list[str], str]]) — Список имён модулей или регулярное выражение для имён модулей, которые следует заменить на наш TrainableTokensLayer. Если значение не задано, будет предпринята попытка получить слой входных эмбеддингов модели, если у модели есть метод get_input_embeddings (у трансформерных моделей он обычно есть); если это не удастся, по умолчанию используется ‘embed_tokens’. Другие примеры целевых модулей: embedding, encoder.embeddings или decoder.embeddings.
  • init_weights (bool) — По умолчанию веса новых токенов инициализируются так, чтобы совпадать с соответствующими эмбеддингами токенов. Это делает TrainableTokens недействующим, если обучение не проводилось. Если установить False, веса будут случайными значениями. Не изменяйте этот параметр, если вы точно не знаете, что делаете.

Конфигурация для метода TrainableTokens.

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

Обратите внимание, что обучение с использованием FSDP/DeepSpeed может пока не поддерживаться полностью.

TrainableTokensModel

класс peft.TrainableTokensModel

< >

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

Update on GitHub