Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Hpcaitech ColossalAI LoRA Module

From Leeroopedia


Knowledge Sources
Domains Parameter_Efficient_Finetuning, LoRA, Model_Adaptation
Last Updated 2026-02-09 00:00 GMT

Overview

lora.py implements Low-Rank Adaptation (LoRA) for efficient fine-tuning, providing LoRA-wrapped linear and embedding layers with support for both Kaiming uniform and PiSSA (SVD-based) initialization.

Description

This module provides a complete LoRA implementation with several key components. LoraConfig is a dataclass for configuring rank, alpha, dropout, target modules, and initialization method. LoraBase is the abstract base class inheriting from both lora.LoRALayer and nn.Module, implementing weight merging/unmerging logic for eval/train mode transitions. LoraLinear wraps nn.Linear layers with low-rank adapters (lora_A, lora_B) using out-of-place operations compatible with ColossalAI Gemini. LoraEmbedding similarly wraps nn.Embedding layers. Both support PiSSA initialization (Principal Singular values and Singular vectors Adaptation) via SVD decomposition, where the frozen weight stores the less significant components and the trainable adapters are initialized from the principal components. The convert_to_lora_module function recursively converts all matching linear and embedding layers in a model to LoRA variants, freezing original parameters and logging trainable parameter statistics.

Usage

Use this module to convert any PyTorch model to a parameter-efficient LoRA variant for fine-tuning. Apply convert_to_lora_module to a pre-trained model before training to freeze most parameters and only train the low-rank adapter matrices.

Code Reference

Source Location

Signature

@dataclasses.dataclass
class LoraConfig:
    r: int = 0
    lora_alpha: int = 32
    linear_lora_dropout: float = 0.1
    embedding_lora_dropout: float = 0.0
    lora_train_bias: str = "none"
    lora_initialization_method: str = "kaiming_uniform"
    target_modules: List = None

class LoraLinear(LoraBase):
    def __init__(
        self,
        weight: nn.Parameter,
        bias: Union[nn.Parameter, bool],
        r: int = 0,
        lora_alpha: int = 32,
        lora_dropout: float = 0.0,
        lora_initialization_method: str = "kaiming_uniform",
    )

class LoraEmbedding(LoraBase):
    def __init__(
        self,
        weight: nn.Parameter,
        r: int = 0,
        lora_alpha: int = 32,
        lora_dropout: float = 0.1,
        num_embeddings: int = None,
        embedding_dim: int = None,
        padding_idx: Optional[int] = None,
        max_norm: Optional[float] = None,
        norm_type: float = 2.0,
        scale_grad_by_freq: bool = False,
        sparse: bool = False,
        lora_initialization_method: str = "kaiming_uniform",
    )

def convert_to_lora_module(module: nn.Module, lora_config: LoraConfig) -> nn.Module

Import

from coati.models.lora import LoraConfig, LoraLinear, LoraEmbedding, convert_to_lora_module

I/O Contract

Inputs (convert_to_lora_module)

Name Type Required Description
module nn.Module Yes The PyTorch model to convert to LoRA
lora_config LoraConfig Yes Configuration specifying rank, alpha, dropout, target modules, and initialization method

Outputs (convert_to_lora_module)

Name Type Description
module nn.Module The converted model with LoRA layers (original parameters frozen, adapters trainable)

LoraConfig Parameters

Name Type Default Description
r int 0 LoRA rank (0 disables LoRA)
lora_alpha int 32 LoRA scaling factor
linear_lora_dropout float 0.1 Dropout for linear LoRA layers
embedding_lora_dropout float 0.0 Dropout for embedding LoRA layers
lora_train_bias str "none" Bias training mode: "none", "all", or "lora"
lora_initialization_method str "kaiming_uniform" Initialization: "kaiming_uniform" or "PiSSA"
target_modules List None List of module name patterns to convert (None converts all)

Usage Examples

from coati.models.lora import LoraConfig, convert_to_lora_module
from transformers import AutoModelForCausalLM

# Load a pre-trained model
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")

# Configure LoRA
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    linear_lora_dropout=0.1,
    lora_train_bias="none",
    lora_initialization_method="kaiming_uniform",
    target_modules=["q_proj", "v_proj"],
)

# Convert model to LoRA
model = convert_to_lora_module(model, lora_config)
# Logs: Trainable parameter size: X.XXM, Percentage: X.XX%

# Using PiSSA initialization
lora_config_pissa = LoraConfig(
    r=16,
    lora_alpha=32,
    lora_initialization_method="PiSSA",
)
model_pissa = convert_to_lora_module(model, lora_config_pissa)

# Load config from JSON file
lora_config = LoraConfig.from_file("lora_config.json")

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment