PEFT documentation
Tokens treináveis
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=Falseao chamarsave_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
< 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 = 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 osinput_idsretornados. 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 nossoTrainableTokensLayer. Se não definido, tentará obter a camada de incorporação de entrada do modelo, se o modelo tiver um métodoget_input_embeddings(modelos de transformadores geralmente têm); se isso falhar, o padrão é ‘embed_tokens’. Outros exemplos de alvos sãoembedding,encoder.embeddingsoudecoder.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 comoFalse, 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
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )