PEFT documentation

Tokens treináveis

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

Tokens treináveis

O método Trainable Tokens oferece uma maneira de direcionar embeddings de tokens específicos para o fine-tuning sem recorrer ao treinamento da matriz de embeddings completa ou ao uso de um adaptador na matriz de embeddings. Ele é baseado na implementação inicial de aqui.

O método visa apenas tokens específicos e treina seletivamente os índices de tokens que você especifica. Consequentemente, a RAM necessária será menor e a memória em disco também será significativamente menor do que armazenar a matriz de incorporação totalmente ajustada.

Alguns benchmarks preliminares obtidos com este script sugerem que, para gemma-2-2b (que possui uma matriz de embedding bastante grande), é possível economizar cerca de 4 GiB de VRAM com Trainable Tokens em comparação com o fine-tuning completo da matriz de embedding. Embora o LoRA utilize quantidades comparáveis de VRAM, ele também pode atingir tokens que você não deseja que sejam alterados. Observe que essas são apenas indicações e tamanhos variados de matrizes de embedding podem distorcer esses números um pouco.

Observe que este método não adiciona tokens por você; é necessário adicionar os tokens ao tokenizer e redimensionar a matriz de incorporação do modelo de acordo. Este método apenas re-treinará as incorporações para os tokens que você especificar. Este método também pode ser usado em conjunto com camadas LoRA! Consulte a documentação do LoRA.

Salvar o modelo com save_pretrained() ou recuperar o state dict usando get_peft_model_state_dict() ao adicionar novos tokens pode salvar a matriz de embedding completa em vez de apenas a diferença, como medida de precaução, porque a matriz de embedding foi redimensionada. Para economizar espaço, você pode desabilitar esse comportamento definindo save_embedding_layers=False ao chamar save_pretrained. Isso é seguro desde que você não modifique a matriz de embedding por outros meios, pois tais alterações não serão rastreadas pelos tokens treináveis.

Visão geral do benchmark

API

TrainableTokensConfig

classe 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 )

Parâmetros

  • token_indices (list[int]) — Lista de inteiros, indicando os índices dos tokens que você deseja que sejam treináveis. Para encontrar o índice de um token com um tokenizer, você pode tokenizar a string e observar os input_ids retornados. Quanto mais próximo o número de índices estiver do total de tokens, menos eficiente esse método se torna.
  • target_modules (Optional[Union[list[str], str]]) — Lista de nomes de módulos ou expressão regular dos nomes de módulos a serem substituídos pelo nosso TrainableTokensLayer. Se não definido, tentará obter a camada de incorporação de entrada do modelo, se o modelo tiver um método get_input_embeddings (modelos de transformadores geralmente têm); se isso falhar, o padrão é ‘embed_tokens’. Outros exemplos de alvos são embedding, encoder.embeddings ou decoder.embeddings.
  • init_weights (bool) — Por padrão, os pesos do novo token são inicializados para serem os mesmos dos embeddings de token respectivos. Isso torna o TrainableTokens um no-op quando não treinado. Se definido como False, os pesos serão valores aleatórios. Não altere esta configuração a menos que saiba exatamente o que está fazendo.

Configuração para o método TrainableTokens.

Permite o treinamento de novos tokens (e o re-treinamento de tokens existentes) sem treinar a matriz de incorporação completa. Ao marcar alguns tokens selecionados (identificados por seus índices) como treináveis e deixar os demais intactos, este método pode ser usado para adicionar novos tokens ou alterar a incorporação de tokens existentes, economizando memória. Tanto o armazenamento quanto o uso de memória de trabalho são reduzidos em comparação com o treinamento completo da matriz de incorporação.

Observe que o treinamento com FSDP/DeepSpeed pode ainda não ser totalmente suportado.

TrainableTokensModel

classe 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