PEFT documentation

RoAd

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

RoAd

RoAd 是一种参数高效微调技术,通过学习一组应用于隐藏维度对的 2×2 旋转矩阵(以及可选的缩放因子)来适配大型语言模型。RoAd 在可训练参数少于 0.1% 的情况下,取得了与其他 PEFT 方法相当甚至更优的性能。与 LoRA 的批处理低秩更新不同,RoAd 的稀疏旋转可重构为简单的逐元素操作,从而在处理同一批次中的异构请求(即同时服务多个适配器)时,实现显著更高的服务吞吐量。此外,RoAd 可以无缝集成到分布式交换干预框架中,将其稀疏的 2D 旋转解释为隐藏表示学习子空间内的任务特定干预。这些正交子空间可以组合起来,以合并多种任务特定的行为——例如多语言能力或指令遵循——而无需额外的微调,从而在 LLM 中实现模块化且可解释的适配。

使用 RoAd 进行微调通常需要比 LoRA 或类似方法更高的学习率,约为 1e-3。目前 RoAd 仅支持线性层,并且可用于使用 bitsandbytes 量化的模型(4 位或 8 位)。

要在同一批次中使用不同的 RoAd 适配器进行推理,请参阅 在同一批次中使用不同的 LoRA 适配器进行推理。

基准测试概览

API

RoadConfig

class peft.RoadConfig

< >

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

参数

  • variant (Union[RoadVariant, str]) — 要使用的 Road 模型变体。可以是 road_1、road_2 或 road_4 之一。更多详情请参阅论文。
    • road_1:对所有元素对使用相同的缩放和角度。 此变体的参数量最少,对于应用 RoAd 的每一层,它存储的数量等于输出隐藏大小的参数。
    • road_2:对每个元素使用相同的缩放和角度。 与 road_1 相比,此变体的参数量是前者的 2 倍。
    • road_4:为每个元素使用两种不同的尺度和角度。 与 road_1 相比,此变体的参数量是前者的 4 倍。
  • group_size (int) — Group size 定义了元素如何分组为 2D 向量以进行旋转。在每个组内,元素 0 与元素 group_size/2 配对,然后元素 1 与元素 group_size/2+1 配对,依此类推。由于元素是无序的,这不会影响模型性能,但在例如 VLLM 中使用时会对推理速度产生一定影响。为了获得最佳速度,建议 group size 至少为 32 或 64(默认值)。请注意,模型的 hidden size(或在使用张量并行时每个分区的 hidden size)必须能被 group_size 整除,因此对于非常小的模型,您可能需要减小此参数。
  • init_weights (bool) — 是否执行 RoAd 权重的初始化。
  • target_modules (Optional[Union[List[str], str]]) — 要应用适配器(adapter)的模块名称。如果指定了此参数,则只有名称匹配的模块会被替换。传入字符串时,将执行正则表达式匹配。传入字符串列表时,将执行精确匹配,或检查模块名称是否以列表中的任一字符串结尾。如果指定为 ‘all-linear’,则选择所有 linear/Conv1D 模块(如果模型是 PreTrainedModel,则排除输出层)。如果未指定,将根据模型架构选择模块。如果架构未知,则会引发错误——在这种情况下,应手动指定目标模块。
  • modules_to_save (List[str]) — 除 Road 层之外,需要设置为可训练并在最终检查点中保存的模块列表。

这是用于存储 RoadModel 配置的类。RoAd 适配器在 https://huggingface.co/papers/2409.00119 中提出。

RoadModel

class peft.RoadModel

< >

( 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