PEFT documentation
FRoD: Ajuste fino eficiente de posto completo com graus rotacionais
FRoD: Ajuste fino eficiente de posto completo com graus rotacionais
FRoD é um método de ajuste fino eficiente em parâmetros que combina uma base de posto completo compartilhada com graus de rotação aprendíveis esparsos. A atualização do adaptador é expressa por meio de tensores de projeção fixos e coeficientes treináveis, o que permite que o FRoD aplique atualizações de posto completo mantendo o número de parâmetros treinados pequeno.
Artigo: Full-Rank Efficient Fine-Tuning with Rotational Degrees.
Ao salvar os parâmetros do adaptador, é possível evitar o armazenamento dos tensores de projeção definindo save_projection=False no FrodConfig. Nesse caso, as projeções são restauradas a partir dos pesos do modelo base e da semente aleatória fixa de projection_prng_key. Isso reduz o tamanho do checkpoint, mas o padrão é save_projection=True para tornar o carregamento do checkpoint independente dos detalhes de regeneração.
Em comparação com o LoRA, o FRoD pode expressar uma atualização de posto completo em cada camada linear adaptada, treinando apenas os coeficientes diagonais e um conjunto esparsos de coeficientes de rotação fora da diagonal. Isso pode ser útil quando uma atualização de posto baixo é muito restritiva. A compensação é que o FRoD calcula tensores de projeção fixos a partir dos pesos base durante a injeção do adaptador, o que torna a configuração mais cara e a implementação menos amplamente suportada do que a do LoRA.
A inicialização da projeção pode ser lenta em modelos grandes, pois o FRoD executa decomposições de matrizes sobre as categorias do módulo de destino antes de injetar os adaptadores. Uma barra de progresso é exibida por padrão e pode ser desativada com FrodConfig(progressbar=False).
Para treinamento com restrições de memória, runtime_offload_base_weight=True mantém os pesos base do alvo na CPU quando o caminho ativo do FRoD não os precisa. Essa é uma opção de opt-in, pois os métodos PEFT geralmente mantêm todos os parâmetros base no acelerador após mover o modelo e após as passadas de forward.
O FRoD possui atualmente a seguinte restrição:
- Somente as camadas
nn.Linearetransformers.pytorch_utils.Conv1Dsão suportadas.
Início rápido
from transformers import AutoModelForSequenceClassification
from peft import FrodConfig, TaskType, get_peft_model
model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)
peft_config = FrodConfig(
task_type=TaskType.SEQ_CLS,
target_modules=["query", "value"],
modules_to_save=["classifier"],
sparse_rate=0.02,
frod_dropout=0.0,
runtime_offload_base_weight=True,
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()FrodConfig
classe peft.FrodConfig
< 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )
Parâmetros
- target_modules (
Union[List[str], str]) — Os nomes dos módulos aos quais aplicar o FRoD. Somente camadas lineares são suportadas. - projection_prng_key (
int) — Semente aleatória usada ao inicializar o padrão COO esparsa do FRoD. - save_projection (
bool) — Se os tensores de projeção FRoD devem ser salvos no state dict. Isso aumenta o tamanho do checkpoint, mas torna o recarregamento do adaptador independente da regeneração do cache local. O valor padrão éTrue. - frod_dropout (
float) — A probabilidade de dropout para as camadas FRoD. - fan_in_fan_out (
bool) — Defina como True se a camada a ser substituída armazenar os pesos como (fan_in, fan_out). Por exemplo, o gpt-2 usaConv1D, que armazena os pesos como (fan_in, fan_out), e portanto este parâmetro deve ser definido comoTrue. - bias (
str) — Tipo de viés para FRoD. Pode ser ‘none’, ‘all’ ou ‘frod_only’. Se for ‘all’ ou ‘frod_only’, os vieses correspondentes serão atualizados durante o treinamento. Tenha em mente que isso significa que, mesmo ao desativar os adaptadores, o modelo não produzirá a mesma saída que o modelo base teria sem adaptação. - modules_to_save (
List[str]) — Lista de módulos, além das camadas FRoD, que devem ser configurados como treináveis e salvos no checkpoint final. - init_weights (
bool) — Se as camadas FRoD devem ter seus pesos inicializados com a inicialização padrão. Não altere esta configuração, a menos que saiba exatamente o que está fazendo. - layers_to_transform (
Union[List[int],int]) — Os índices das camadas a serem transformadas. Se este argumento for especificado, as transformações FRoD serão aplicadas aos índices das camadas especificados nesta lista. Se um único inteiro for passado, as transformações FRoD serão aplicadas à camada neste índice. - layers_pattern (
Optional[Union[List[str], str]]) — O nome do padrão de camadas, usado apenas selayers_to_transformfor diferente deNone. Isso deve apontar para onn.ModuleListdo modelo, que frequentemente é chamado de'layers'ou'h'. - sparse_rate (
float) — Fração das entradas fora da diagonal na matriz de rotação treinável esparsa. Valores maiores aumentam a capacidade e os parâmetros treináveis; valores menores são mais baratos. O padrão é0.01. - regularization_alpha (
float) — Pequeno valor positivo usado durante a construção da base compartilhada a partir dos pesos base. Ele estabiliza o inverso da matriz quando as camadas na mesma categoria possuem pesos correlacionados. O valor padrão é1e-3. - progressbar (
bool) — Se deve exibir uma barra de progresso durante a construção das projeções FRoD. A inicialização das projeções pode ser lenta em modelos grandes, pois executa decomposições de matrizes sobre as categorias de módulos de destino. O valor padrão éTrue. - runtime_offload_base_weight (
bool) — Se as pesos base do alvo devem ser mantidos na CPU quando o caminho ativo do FRoD não os precisa. Isso pode reduzir a memória de GPU, pois o FRoD reconstrói o peso adaptado diretamente, mas altera a convenção usual do PEFT de que todos os parâmetros base permanecem no acelerador após mover o modelo ou executar o forward. O valor padrão éFalse.
Esta é a classe de configuração para armazenar a configuração de um FrodModel.
FrodModel
classe peft.FrodModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )