# qairt.modules.lora ## Overview The Low-Rank Adaptation (LoRA) module provides configuration classes for defining and managing LoRA adapters for parameter-efficient fine-tuning of large language models. LoRA enables efficient model adaptation by training low-rank matrices that are applied to specific model layers, rather than fine-tuning the entire model. The QAIRT LoRA module supports: - Multiple adapters with different configurations - Dynamic adapter switching at runtime - Adapter composition (using multiple adapters simultaneously) ## Configuration classes - *class* qairt.modules.lora.lora\_config.AdapterConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Configuration for an adapter, including its name and associated LoRA configurations. - adapter\_lora\_config*: List[Union[str, PathLike, [AdapterParamsConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.AdapterParamsConfig)]]* - List of LoRA configuration paths or objects. - ensure\_list(*v*) - Ensures that the adapter\_lora\_config is always a list. - Parameters - **v** – The input value to validate. - Returns - A list containing the input value if it was not already a list. - Return type - List - name*: str* - Name of the adapter. - *class* qairt.modules.lora.lora\_config.AdapterParamsConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Configuration for individual adapter parameters. - alpha*: int* - Alpha value for scaling. - name*: str* - Name of the adapter. - rank*: int* - Rank used in the adapter configuration. - target\_modules*: List[str]* - List of source framework module names where the adapter is applied. - *class* qairt.modules.lora.lora\_config.AdapterRunConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Defines the configuration parameters for executing a LoRA (Low-Rank Adaptation) model. This configuration is used to control how the LoRA adapter is applied during model inference. - adapter\_name*: str* - The name or identifier of the LoRA adapter to be used during execution. - alpha*: float* *= 1.0* - A scaling factor applied to the LoRA weights. - *class* qairt.modules.lora.lora\_config.LoraBuilderInputConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Input configuration for LoRA, allowing either a path or an object. - alpha\_tensor\_name*: str* - Name of the tensor where LoRA adapter is being applied. - batched\_lora*: bool* *= False* - Whether to use batched (per-token) multi-LoRA alpha input. - check\_exclusive\_inputs(*values*) - Validates that only one of lora\_config\_path or lora\_config\_obj is provided. - Parameters - **values** (*dict*) – Dictionary of field values. - Raises - **ValueError** – If both or neither of the fields are provided. - Returns - Validated field values. - Return type - dict - create\_lora\_graph*: bool* *= True* - Whether to create LoRA max rank-concatenated graph - lora\_config\_obj*: Optional[[LoraConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.LoraConfig)]* *= None* - LoRA configuration object. - lora\_config\_path*: Optional[Union[str, PathLike]]* *= None* - Path to the LoRA configuration file. - quant\_updatable\_mode*: Literal['none', 'adapter\_only', 'all']* *= 'adapter\_only'* - Mode for quant-updatable tensors. - *class* qairt.modules.lora.lora\_config.LoraBuilderOutputConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Defines the output configuration from the LoRA build_lora_graph process. This configuration can be serialized into a YAML file and passed to subsequent steps in the pipeline. - base\_model\_artifacts*: Dict[str, Union[str, PathLike]]* - Dictionary containing paths to base model artifacts like ONNX, encodings and data files. - lora\_tensor\_names*: Union[str, PathLike]* - Path or string reference to the tensor names used in the LoRA model. - use\_case*: List[[UseCaseOutputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)]* - A list of use case configurations that describe how the LoRA model will be used. This is serialized to lora_importer_config.yaml. - *class* qairt.modules.lora.lora\_config.LoraConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Top-level configuration for LoRA, including adapters and use cases. - adapter*: List[[AdapterConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.AdapterConfig)]* - List of adapter configurations. - attach\_point\_onnx\_mapping*: Union[str, PathLike]* - Path to ONNX mapping file. - use\_cases*: List[[UseCaseInputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseInputConfig)]* *= FieldInfo(annotation=NoneType, required=True, alias='use-case', alias\_priority=2)* - List of use case configurations (aliased as ‘use-case’). - *class* qairt.modules.lora.lora\_config.UseCaseInputConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Configuration for a specific use case of the model. - adapter\_alphas*: List[float]* - List of alpha values for each adapter. - adapter\_names*: List[str]* - List of adapter names used in this use case. - encodings*: Union[str, PathLike]* *= FieldInfo(annotation=NoneType, required=True, alias='quant\_overrides', alias\_priority=2)* - Path to quantization overrides (aliased as ‘quant\_overrides’). - model*: Union[str, PathLike]* *= FieldInfo(annotation=NoneType, required=True, alias='model\_name', alias\_priority=2)* - Path or name of the model (aliased as ‘model\_name’). - name*: str* - Name of the use case. - quant\_updatable\_tensors*: Optional[Union[str, PathLike]]* *= None* - Path to quant-updatable tensors file. - *class* qairt.modules.lora.lora\_config.UseCaseOutputConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Configuration for the output of a specific use case after LoRA processing. - encodings*: Optional[Union[str, PathLike]]* *= FieldInfo(annotation=NoneType, required=False, default=None, alias='quant\_overrides', alias\_priority=2)* - Path to quantization overrides (mapped to ‘quant\_overrides’ when serialized). - graph*: Optional[str]* *= ''* - Name of the graph for the use case - lora\_weights*: Union[str, PathLike]* *= FieldInfo(annotation=NoneType, required=True, alias='weights', alias\_priority=2)* - Path to the LoRA weights file (in safetensors format). - model*: Optional[Union[str, PathLike]]* *= FieldInfo(annotation=NoneType, required=False, default=None, alias='model\_name', alias\_priority=2)* - Path or name of the model (mapped to ‘model\_name’ when serialized). - name*: str* - Name of the use case. - output\_path*: Optional[Union[str, PathLike]]* *= None* - Path where the importer output should be saved. - *class* qairt.modules.lora.lora\_config.UseCaseRunConfig(*\*args: Any*, *\*\*kwargs: Any*) - Bases: `AISWBaseModel` Defines the configuration for a specific use case involving one or more LoRA adapters. - adapters*: List[[AdapterRunConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.AdapterRunConfig)]* - A list of LoRA adapter configurations to be used in this use case. Each adapter is defined by its own AdapterRunConfig, specifying parameters such as adapter name and scaling factor. - use\_case\_name*: str* - A unique identifier for the use case, representing a single adapter or a group of adapters. - qairt.modules.lora.lora\_config.get\_adapter\_count\_by\_use\_case(*lora\_config: [LoraBuilderInputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.LoraBuilderInputConfig)*) → Dict[str, int] - Constructs a dictionary mapping each use case to the count of LoRA adapters it contains. - Parameters - **lora\_config** ([*LoraBuilderInputConfig*](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.LoraBuilderInputConfig)) – The configuration object containing LoRA adapter information. - Returns - A dictionary where keys are use case names and values are the count of LoRA adapters in each use case. - Return type - Dict[str, int] - qairt.modules.lora.lora\_config.load\_use\_case\_config(*yaml\_path: Union[str, Path]*) → List[[UseCaseOutputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)] - Loads use case configuration from a specified YAML file. - Parameters - **yaml\_path** (*Union* *[* *str* *,* *Path* *]*) – The path to the YAML configuration file. - Returns - A list of use case configuration objects parsed from the YAML file. - Return type - List[[UseCaseOutputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)] - Raises - - **FileNotFoundError** – If the YAML file is not found at the specified path. - **ValueError** – If the YAML content is invalid or missing the ‘use\_case’ key. - qairt.modules.lora.lora\_config.serialize\_lora\_adapter\_weight\_config(*use\_cases: List[[UseCaseOutputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)]*, *yaml\_path: str*, *base\_dir: str*) → None - Serializes selected fields from UseCaseOutputConfig objects to a YAML file for compile API. Only the fields ‘name’, ‘graph’, ‘lora\_weights’ (as ‘weights’), and ‘encodings’ are serialized. Relative paths are resolved using the provided base\_dir. - Parameters - - **use\_cases** (*List* *[*[*UseCaseOutputConfig*](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)*]*) – The configuration object containing use case data. - **yaml\_path** (*str*) – The file path where the YAML output should be saved. - **base\_dir** (*str*) – The base directory to resolve relative paths. - Returns - None - qairt.modules.lora.lora\_config.serialize\_lora\_importer\_config(*lora\_uc\_output\_config: List[[UseCaseOutputConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)]*, *yaml\_path: str*, *base\_dir: str*) → None - Serializes fields from List[UseCaseOutputConfig] to a YAML file. Only the fields ‘name’, ‘model\_name’, ‘weights’, ‘quant\_overrides’, and ‘output\_path’ are serialized for each use case. Relative paths are resolved using the provided base\_dir. - Parameters - - **lora\_uc\_output\_config** (*List* *[*[*UseCaseOutputConfig*](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.UseCaseOutputConfig)*]*) – The configuration object containing use case data. - **yaml\_path** (*str*) – The file path where the YAML output should be saved. - **base\_dir** (*str*) – The base directory to resolve relative paths. - Returns - None - qairt.modules.lora.lora\_config.serialize\_lora\_input\_config(*lora\_config: [LoraConfig](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.LoraConfig)*, *base\_directory: Union[str, PathLike]*) → str - Serializes a LoraConfig object into a YAML file and saves adapter parameter configs as JSON. - Parameters - - **lora\_config** ([*LoraConfig*](https://docs.qualcomm.com/doc/80-87189-2/topic/qairt-gen-ai-modules-lora.html#qairt.modules.lora.lora_config.LoraConfig)) – The configuration object to serialize. - **base\_directory** (*Union* *[* *str* *,* *PathLike* *]*) – Directory where the files will be saved. - Returns - Path to the generated YAML configuration file. - Return type - str ## Configuration examples ### Define adapter parameters Adapter parameters define the structure and target modules for a LoRA adapter: from qairt.modules.lora.lora_config import AdapterParamsConfig # Define adapter parameters adapter1_params = AdapterParamsConfig( name="long", rank=16, alpha=32, target_modules=["q_proj", "v_proj", "k_proj", "o_proj"], ) adapter2_params = AdapterParamsConfig( name="elementary", rank=8, alpha=16, target_modules=["q_proj", "v_proj"], ) Copy to clipboard **Parameters:** - `name`: Unique identifier for the adapter - `rank`: Rank of the low-rank matrices (lower rank means fewer parameters, faster inference) - `alpha`: Scaling factor applied to the adapter weights - `target_modules`: List of model layer names where the adapter should be applied ### Create adapter configurations Adapter configurations wrap the adapter parameters and can reference multiple parameter sets: from qairt.modules.lora.lora_config import AdapterConfig # Create adapter configurations adapter1 = AdapterConfig( name="long", adapter_lora_config=[adapter1_params], ) adapter2 = AdapterConfig( name="elementary", adapter_lora_config=[adapter2_params], ) adapter3 = AdapterConfig( name="elementary+long", adapter_lora_config=[f"{llama3_exports}/onnx/elementary+long.json"], ) Copy to clipboard **Parameters:** - `name`: Unique identifier for the adapter - `adapter_lora_config`: List of LoRA configuration paths or AdapterParamsConfig objects. This parameter can accept: - AdapterParamsConfig objects (as shown in adapter1 and adapter2) - String paths to JSON files containing adapter parameters (as shown in adapter3) - A mix of both objects and paths ### Define use cases Use cases define how adapters are combined and applied during inference: from qairt.modules.lora.lora_config import UseCaseInputConfig llama3_exports = "./llama_3.2_3b/model_exports" # Single adapter use case use_case1 = UseCaseInputConfig( name="long", adapter_names=["long"], model=f"{llama3_exports}/onnx/model.onnx", adapter_alphas=[1.0], encodings=f"{llama3_exports}/lora/adapters/long.encodings", quant_updatable_tensors=f"{llama3_exports}/onnx/long_updatable_tensors.txt", ) # Multi-adapter use case use_case2 = UseCaseInputConfig( name="elementary", adapter_names=["elementary"], model=f"{llama3_exports}/onnx/model.onnx", adapter_alphas=[1.0], encodings=f"{llama3_exports}/lora/adapters/elementary.encodings", quant_updatable_tensors=f"{llama3_exports}/onnx/elementary_updatable_tensors.txt", ) # Single adapter use case use_case3 = UseCaseInputConfig( name="elementary+long", adapter_names=["elementary", "long"], model=f"{llama3_exports}/onnx/model.onnx", adapter_alphas=[1.0, 0.8], encodings=f"{llama3_exports}/onnx/elementary+long.encodings", quant_updatable_tensors=f"{llama3_exports}/onnx/elementary+long_updatable_tensors.txt", ) Copy to clipboard **Parameters:** - `name`: Unique identifier for the use case - `adapter_names`: List of adapter names to use in this use case - `model`: Path to the base ONNX model - `adapter_alphas`: Scaling factors for each adapter (controls relative influence) - `encodings`: Path to quantization encodings for the adapters - `quant_updatable_tensors`: Path to quant-updatable tensors file. ### Complete LoRA configuration Combine all components into a complete LoRA configuration: from qairt.modules.lora.lora_config import LoraConfig # Create the complete LoRA configuration lora_config_obj = LoraConfig( adapter=[adapter1, adapter2, adapter3], attach_point_onnx_mapping=f"{llama3_exports}/lora/attach_point_onnx_mapping.json", use_cases=[use_case1, use_case2, use_case3], ) Copy to clipboard **Parameters:** - `adapter`: List of all adapter configurations - `attach_point_onnx_mapping`: Path to JSON file mapping PyTorch module names to ONNX node names - `use_cases`: List of all use case configurations ### Create builder input configuration Create a builder input configuration to use with the GenAI Builder: from qairt.modules.lora.lora_config import LoraBuilderInputConfig # Create input config with the programmatic configuration lora_input_config = LoraBuilderInputConfig( lora_config_obj=lora_config_obj, create_lora_graph=True, quant_updatable_mode="adapter_only", alpha_tensor_name="alpha", ) # Or load from a YAML file lora_input_config_from_file = LoraBuilderInputConfig( lora_config_path="./llama_3.2_3b/lora/lora_config.yaml", create_lora_graph=True, quant_updatable_mode="adapter_only", alpha_tensor_name="alpha", ) Copy to clipboard **Parameters:** - `lora_config_obj` or `lora_config_path`: Either a LoraConfig object or path to YAML config file - `create_lora_graph`: Whether to create a max-rank concatenated LoRA graph - `quant_updatable_mode`: Controls which quantization encodings can be updated: - `"none"`: No quantization encodings are updatable - `"adapter_only"`: Quantization encodings for only LoRA/adapter branch (Conv->Mul->Conv) change across use-case. The base branch quantization encodings remain the same. - `"all"`: All quantization encodings are updatable - `alpha_tensor_name`: Name of the tensor where LoRA adapter scaling is applied ### Configure runtime adapter(s) Configure adapters at runtime for inference. First, obtain an executor from your built container: from qairt.gen_ai_api.executors.gen_ai_executor import GenAIExecutor, GenerationExecutionResult from qairt.modules.lora.lora_config import UseCaseRunConfig, AdapterRunConfig # Get an executor from the built LoRA container # (Assuming you have a built container and configured device) llm: GenAIExecutor = llama_lora_container.get_executor(device, clean_up=False) # Configure a single adapter use_case_config_1 = UseCaseRunConfig( use_case_name="long", adapters=[AdapterRunConfig(adapter_name="long", alpha=1.0)], ) # Configure multiple adapters with custom alpha values use_case_config_2 = UseCaseRunConfig( use_case_name="elementary+long", adapters=[ AdapterRunConfig(adapter_name="elementary", alpha=1.0), AdapterRunConfig(adapter_name="long", alpha=0.8), ], ) # Generate text with the configured adapters prompt_1 = "Your first prompt here" result_1: GenerationExecutionResult = llm.generate(prompt_1, lora_config=use_case_config_1) prompt_2 = "Your second prompt here" result_2: GenerationExecutionResult = llm.generate(prompt_2, lora_config=use_case_config_2) # Access the generated text and metrics print(result_1.generated_text) print(result_1.metrics) Copy to clipboard ## Next steps - Tutorial: [Low-Rank Adaptation (LoRA) Tutorial](https://docs.qualcomm.com/doc/80-87189-2/topic/lora_tutorial.html#lora-tutorial) - Complete guide for building and deploying LoRA-enabled models on Snapdragon devices Last Published: Aug 19, 2026 [Previous Topic qairt.modules.genie\_execution.genie\_app\_run\_module](https://docs.qualcomm.com/bundle/publicresource/80-87189-2/topics/qairt-gen-ai-modules-genie-execution.md) [Next Topic ONNX Optimizer API](https://docs.qualcomm.com/bundle/publicresource/80-87189-2/topics/qairt-optimizer.md)