PEFT documentation
RoAd
RoAd
RoAd é uma técnica de ajuste fino com eficiência de parâmetros que adapta grandes modelos de linguagem aprendendo um pequeno conjunto de matrizes de rotação 2×2 (e fatores de escala opcionais) aplicados a pares de dimensões ocultas. O RoAd atinge desempenho competitivo ou superior em comparação com outros métodos PEFT, com menos de 0,1% de parâmetros treináveis. Diferentemente das atualizações de baixo rank em lote do LoRA, as rotações esparsas do RoAd se reformulam em operações simples elemento a elemento, resultando em throughput de serviço significativamente maior ao lidar com solicitações heterogêneas no mesmo lote, ou seja, ao servir múltiplos adaptadores simultaneamente. Além disso, o RoAd se integra perfeitamente a um framework de intervenção em intercâmbio distribuído, interpretando suas rotações 2D esparsas como intervenções específicas de tarefa dentro de subespaços aprendidos das representações ocultas. Esses subespaços ortogonais podem ser compostos para mesclar múltiplos comportamentos específicos de tarefa — como capacidades multilíngues ou seguimento de instruções — sem ajuste fino adicional, permitindo adaptações modulares e interpretáveis em LLMs.
O ajuste fino com RoAd geralmente requer uma taxa de aprendizado mais alta em comparação com LoRA ou métodos semelhantes, em torno de 1e-3. Atualmente, o RoAd suporta apenas camadas lineares e pode ser usado em modelos quantizados com bitsandbytes (4 bits ou 8 bits).
Para executar inferência com diferentes adaptadores RoAd no mesmo lote, consulte Inferência com diferentes adaptadores LoRA no mesmo lote.
Visão geral do benchmark
API
RoadConfig
classe peft.RoadConfig
< 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 = Falsevariant: Union[str, RoadVariant] = 'road_1'group_size: int = 64init_weights: bool = Truetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = None )
Parâmetros
- variant (Union[
RoadVariant,str]) — A variante do modelo Road a ser usada. Pode ser uma de road_1, road_2 ou road_4. Consulte o paper para mais detalhes.- road_1: usa a mesma escala e o mesmo ângulo para todos os pares de elementos. Esta variante possui o menor número de parâmetros, armazenando um número igual ao tamanho oculto de saída de parâmetros para cada camada à qual o RoAd é aplicado.
- road_2: usa a mesma escala e o mesmo ângulo para cada elemento. Esta variante possui o dobro do número de parâmetros em comparação com road_1.
- road_4: Usa duas escalas e ângulos diferentes para cada elemento. Esta variante possui 4x o número de parâmetros em comparação com road_1.
- group_size (
int) — O tamanho do grupo define como os elementos são agrupados em vetores 2D para rotação. Dentro de cada grupo, o elemento 0 é pareado com o elemento group_size/2, em seguida o elemento 1 é pareado com o elemento group_size/2+1 e assim por diante. Isso não afeta o desempenho do modelo, pois os elementos não têm ordem, no entanto, tem algum efeito na velocidade de inferência quando usado, por exemplo, no VLLM. Para a melhor velocidade, recomenda-se um tamanho de grupo de pelo menos 32 ou 64 (o padrão). Observe que o tamanho oculto do modelo (ou o tamanho oculto por partição quando usado com paralelismo de tensor) deve ser divisível por group_size, portanto, para modelos muito pequenos, você pode precisar reduzir este parâmetro. - init_weights (
bool) — Se deve executar a inicialização dos pesos do RoAd. - target_modules (
Optional[Union[List[str], str]]) — Os nomes dos módulos aos quais o adaptador será aplicado. Se especificado, apenas os módulos com os nomes especificados serão substituídos. Ao passar uma string, uma correspondência de regex será realizada. Ao passar uma lista de strings, uma correspondência exata será realizada ou será verificado se o nome do módulo termina com qualquer uma das strings passadas. Se especificado como ‘all-linear’, todos os módulos lineares/Conv1D serão escolhidos (se o modelo for um PreTrainedModel, a camada de saída será excluída). Se não for especificado, os módulos serão escolhidos de acordo com a arquitetura do modelo. Se a arquitetura não for conhecida, um erro será lançado — nesse caso, você deve especificar os módulos de destino manualmente. - modules_to_save (
List[str]) — Lista de módulos, além das camadas Road, que devem ser configurados como treináveis e salvos no checkpoint final.
Esta é a classe de configuração para armazenar a configuração de um RoadModel. O adaptador RoAd é proposto em https://huggingface.co/papers/2409.00119.
RoadModel
classe peft.RoadModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )