PEFT documentation
RoAd
RoAd
RoAd est une technique de fine-tuning à efficacité paramétrique qui adapte les grands modèles de langage en apprenant un petit ensemble de matrices de rotation 2×2 (et de facteurs d'échelle optionnels) appliqués à des paires de dimensions cachées. RoAd atteint des performances compétitives ou supérieures par rapport à d'autres méthodes PEFT avec moins de 0,1 % de paramètres entraînables. Contrairement aux mises à jour de faible rang par lots de LoRA, les rotations creuses de RoAd se reformulent en opérations élémentaires simples, offrant un débit de service nettement supérieur lors du traitement de requêtes hétérogènes dans le même lot, c'est-à-dire lors du service simultané de plusieurs adaptateurs. De plus, RoAd s'intègre de manière transparente dans un cadre d'intervention par échange distribué, interprétant ses rotations 2D creuses comme des interventions spécifiques à la tâche au sein de sous-espaces appris des représentations cachées. Ces sous-espaces orthogonaux peuvent être composés pour fusionner plusieurs comportements spécifiques à la tâche — comme les capacités multilingues ou le suivi d'instructions — sans fine-tuning supplémentaire, permettant des adaptations modulaires et interprétables dans les LLM.
Le fine-tuning avec RoAd nécessite généralement un taux d'apprentissage plus élevé par rapport à LoRA ou des méthodes similaires, environ 1e-3. Actuellement, RoAd ne prend en charge que les couches linéaires et peut être utilisé sur des modèles quantifiés avec bitsandbytes (4 bits ou 8 bits).
Pour exécuter l'inférence avec différents adaptateurs RoAd dans le même lot, consultez Inférence avec différents adaptateurs LoRA dans le même lot.
Aperçu des benchmarks
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 )
Paramètres
- variant (Union[
RoadVariant,str]) — La variante du modèle Road à utiliser. Elle peut être road_1, road_2 ou road_4. Reportez-vous à l'article pour plus de détails.- road_1 : utilise la même échelle et le même angle pour toutes les paires d'éléments. Cette variante possède le plus petit nombre de paramètres, elle stocke un nombre égal à la taille cachée de sortie de paramètres pour chaque couche à laquelle RoAd est appliqué.
- road_2 : utilise la même échelle et le même angle pour chaque élément. Cette variante possède 2 fois plus de paramètres que road_1.
- road_4 : Utilise deux échelles et deux angles différents pour chaque élément. Cette variante possède 4 fois plus de paramètres que road_1.
- group_size (
int) — La taille du groupe définit la manière dont les éléments sont regroupés en vecteurs 2D pour la rotation. Au sein de chaque groupe, l'élément 0 est apparié avec l'élément group_size/2, puis l'élément 1 avec l'élément group_size/2+1, et ainsi de suite. Cela n'a aucun effet sur les performances du modèle, car les éléments sont non ordonnés, mais cela peut influencer la vitesse d'inférence lorsqu'il est utilisé par exemple dans VLLM. Pour une vitesse optimale, une taille de groupe d'au moins 32 ou 64 (la valeur par défaut) est recommandée. Notez que la taille cachée du modèle (ou la taille cachée par partition lorsqu'il est utilisé avec le parallélisme de tenseurs) doit être divisible par group_size, il est donc possible qu'il faille réduire ce paramètre pour les très petits modèles. - init_weights (
bool) — Indique s'il faut effectuer l'initialisation des poids de RoAd. - target_modules (
Optional[Union[List[str], str]]) — Les noms des modules auxquels appliquer l’adaptateur. Si ce paramètre est spécifié, seuls les modules portant les noms indiqués seront remplacés. En cas de chaîne de caractères, une correspondance par expression régulière est effectuée. En cas de liste de chaînes de caractères, une correspondance exacte est réalisée ou il est vérifié si le nom du module se termine par l’une des chaînes fournies. Si la valeur est « all-linear », tous les modules linéaires/Conv1D sont sélectionnés (si le modèle est un PreTrainedModel, la couche de sortie est exclue). Si ce paramètre n’est pas spécifié, les modules sont choisis en fonction de l’architecture du modèle. Si l’architecture est inconnue, une erreur est levée — dans ce cas, vous devez spécifier manuellement les modules cibles. - modules_to_save (
List[str]) — Liste des modules, à l'exception des couches Road, à définir comme entraînables et à enregistrer dans le point de contrôle final.
Ceci est la classe de configuration destinée à stocker la configuration d'un RoadModel. L'adaptateur RoAd est proposé dans 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 )