DoRALinear¶
- class torchtune.modules.peft.DoRALinear(in_dim: int, out_dim: int, rank: int, alpha: float, dropout: float = 0.0, use_bias: bool = False, quantize_base: bool = False, **quantization_kwargs)[源代码]¶
DoRA 线性层,如 DoRA: 大语言模型的权重分解低秩适配 中介绍的那样。
DoRA(权重分解低秩适配)通过将预训练权重分解为两个分量来微调层:幅值和方向。幅值分量是一个可学习的标量向量,用于缩放每个输出通道,而方向分量(通过 LoRA 修改)调整权重的方向。通过使用 magnitude 向量缩放 LoRA 更新分量 \(BAx\),DoRA 允许模型跨不同的输出维度应用不同的缩放调整。
- 参数:
in_dim (int) – 输入维度
out_dim (int) – 输出维度
rank (int) – 低秩近似的秩
alpha (float) – 低秩近似的缩放因子
dropout (float) – dropout 概率。默认值:0.0
use_bias (bool) – 是否在原始线性层中包含偏置。默认值:False
quantize_base (bool) – 是否量化基础线性权重。默认值:False
**quantization_kwargs – 量化基础线性权重时传递给 to_nf4 的关键字参数。有效参数的示例包括 block_size 和 scaler_block_size,它们分别控制权重量化和标量量化的粒度。仅当 quantize_base 为 True 时才使用。默认值 None
- 引发:
ValueError – 如果
quantize_base
为 False,但提供了量化 kwargs。
- adapter_params() List[str] [源代码]¶
返回一个字符串列表,对应于来自适配器的模型中
nn.Parameter
的名称。对于 DoRA,这意味着 lora_a.weight、lora_b.weight 和 magnitude。
- forward(x: Tensor) Tensor [源代码]¶
- 参数:
x (torch.Tensor) – 输入张量,形状为
(..., in_dim)
- 返回:
输出张量,形状为
(..., out_dim)
- 返回类型:
Tensor
- initialize_dora_magnitude()[源代码]¶
DoRA 初始化幅值向量,使其输出最初与标准 LoRA 的输出相同。
必须在加载/初始化基础模型和 LoRA 参数后调用此方法。
- 引发:
RuntimeError – 如果基础或 LoRA 参数仍在元设备上。