PEFT documentation
RoAd
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
< 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 )
参数
- 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
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )