# LoRA v3 Optimizations

- [Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#overview)
- [No-Updateable Quantization](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#no-updateable-quantization)

    - [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#offline-graph-preparation-flow)

        - [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#command-templates-for-offline-preparation-tools)

            - [qairt-lora-model-creator](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#qairt-lora-model-creator)
            - [qairt-converter](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#qairt-converter)
        - [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#context-binary-generation)

            - [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#command-template-for-context-binary-generation)
        - [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#on-target-qnn-call-flow)
        - [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#on-target-genie-execution-flow)
- [Grouped LoRA](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#grouped-lora)

    - [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id1)

        - [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id2)
        - [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id3)

            - [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id4)
        - [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id5)
        - [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id6)
- [All-Updateable Quantization](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#all-updateable-quantization)

    - [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id7)

        - [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id8)

            - [qairt-lora-model-creator](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id9)
            - [qairt-converter](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id10)
        - [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id11)
        - [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id12)
        - [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id13)
- [Float_Only-Updateable Quantization](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#float-only-updateable-quantization)

    - [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id14)

        - [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id15)

            - [qairt-lora-model-creator](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id16)
            - [qairt-converter](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id17)
        - [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id18)

            - [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id19)
        - [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id20)
        - [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id21)
- [Hot Switch](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#hot-switch)

    - [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id22)

        - [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id23)
        - [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id24)

            - [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id25)
        - [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id26)
        - [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id27)

## [Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id32)

This page describes several optimizations to the normal LoRA V3 workflow that can provide specific
KPI improvement in select cases. The following assumes knowledge of the regular
[LoRA V3 workflow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_overview.html).

The optimizations are: No-Updateable Quantization,
Grouped LoRA, All-Updateable Quantization,
Float\_Only-Updateable Quantization,
and Hot Switch. Note that each use case
has different adapter quantization calibration prerequisites. This page does not cover how to quantize
to meet the different prerequisites and is assumed client has performed adequate quantization calibration
for their use case.

Notes:

- ^1^ Depedenent on use case.

## [No-Updateable Quantization](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id33)

No-updateable quantization is a special case of LoRA V3 where all adapters share the same
quantization parameters. This means that quantization parameters in the base graph and adapters
do not need to update when new adapter or concurrency weights are switched.

If users’ adapters meet this criteria, they may see the following KPI changes:

Expected KPI Change vs. Regular LoRA V3

| RAM | ROM | Adapter Switch Time | Accuracy |
| --- | --- | --- | --- |
| Improved | Improved | Improved | Use case dependent\* |

\* If adapters cannot share quantization parameters then accuracy will be worse

### [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id34)

#### [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id35)

To enable no-updateable quant in the offline preparation tools, users can maintain their existing
commands and additionally add *–quant\_updatable\_mode none* to the command line of the
qairt-lora-model-creator and qairt-converter. This will mark no tensors as having updateable
quantization parameters i.e. only weights can be switched through new adapter/concurrency applications.

See LoRA V3 offline preparation tools for general
LoRA V3 tools usage.

##### [qairt-lora-model-creator](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id36)

qairt-lora-model-creator --lora_config <updated_lora_config_yaml> \
    --output_dir <output directory path>  --quant_updatable_mode none
    Copy to clipboard

##### [qairt-converter](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id37)

qairt-converter -i <concatenated-model-onnx> --quantization_overrides <base-case-encodings> \
    --lora_weight_list <tensor-name-list-from-model-creator>  --quant_updatable_mode none
    Copy to clipboard

#### [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id38)

To generate binary sections containing adapter weight updates without quantization updates,
users must specify *weights\_only: True* option in the adapter weight YAML config.

use_case:
        - name: example_adapter
        - graph: example_graph
        - safetensors: example_adapter.safetensors
        - encodings: example_adapter.encodings
        - weights_only: True
    Copy to clipboard

##### [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id39)

qnn-context-binary-generator --backend libQnnHtp.so --dlc_path <quantized-dlc> \
    --binary_file <context-bin> --config_file <htp-config-json> \
    --adapter_weight_config <lora-cbg-config-yaml> --output_dir <output-path>
    Copy to clipboard

#### [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id40)

There are no changes in QNN on-target flow to utilize no-updateable quant.
QnnContext\_applyBinarySection() is used in the same manner as LoRA V3. See
QNN On-Target Call Flow for
more details on general LoRA V3 call flow.

#### [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id41)

There are no changes in QNN on-target flow to utilize no-updateable quant. See
Genie Execution Flow for
more details on general Genie LoRA V3 call flow.

## [Grouped LoRA](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id42)

Grouped LoRA is a special case of LoRA V3 where multiple groups of adapters or concurrencies share
the same quantization parameters. In these cases, users can intermittently switch quantization
parameters instead of switching with every adapter application. This can
lead to improved accuracy for adapters that do not share quantization parameters, but allow fast
switching between adapters in the same group.

If users’ adapters meet this criteria, they may see the following KPI changes:

Expected KPI Change vs. Regular LoRA V3

| RAM | ROM | Adapter Switch Time | Accuracy |
| --- | --- | --- | --- |
| Improved | No change | -Improved within group<br><br><br>-Same to switch between groups | Use case dependent\* |

\* If adapters cannot share quantization parameters then accuracy will be worse

### [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id43)

#### [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id44)

There is no change needed in the offline preparation tools to enable Grouped LoRA. Users may prepare
their graphs through the steps described
LoRA V3 offline preparation tools.

#### [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id45)

To facilitate Grouped LoRA use cases, users will generate different adapters containing
quantization only and weight only updates. This differs from LoRA V3 where adapters contain both
quantization and weight updates. Splitting the updates allows users to apply new quantization
parameters to switch groups or apply new weights to switch adapters in the same group.

> 
> 
> ![../../_static/resources/lora/lorav3_optimizations_grouped_lora.png](data:image/png;base64,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)

To generate binary sections containing adapter weight updates without quantization updates,
users must specify weight\_only: True option in the adapter weight YAML config. To generate binary
sections containing quantization updates without any weight updates, users must specify
encodings\_only: True. Note that both options may be specified together to produce both a
quantization only adapter and weight only adapter for the same use case.

use_case:
        - name: example_adapter
        - graph: example_graph
        - safetensors: example_adapter.safetensors
        - encodings: example_adapter.encodings
        - weights_only: True
        - encodings_only: True
    Copy to clipboard

Take the following example with three groups of distinct quantization parameters.

- Group One: adapter1, adapter2
- Group Two: adapter3, adapter4
- Group Three: adapter5

The following configuration file may be used

# Group 1 specification.
    use_case:
        - name: adapter1
        - graph: example_graph
        - safetensors: adapter1.safetensors
        - encodings: adapter1.encodings
        - weights_only: True
        - encodings_only: True
    use_case:
        - name: adapter2
        - graph: example_graph
        - safetensors: adapter2.safetensors
        - encodings: adapter2.encodings
        - weights_only: True
    # Group 2 specification.
    use_case:
        - name: adapter3
        - graph: example_graph
        - safetensors: adapter3.safetensors
        - encodings: adapter3.encodings
        - weights_only: True
        - encodings_only: True
    use_case:
        - name: adapter4
        - graph: example_graph
        - safetensors: adapter4.safetensors
        - encodings: adapter4.encodings
        - weights_only: True
     # Group 3 specification
     use_case:
        - name: adapter5
        - graph: example_graph
        - safetensors: adapter5.safetensors
        - encodings: adapter5.encodings
    Copy to clipboard

This will produce

- Group One: encodings only adapter for adapter1 and adapter2, weights only adapter for adapter1 and
weights only adapter for adapter2.
- Group Two: encodings only adapter for adapter3 and adapter4, weights only adapter for adapter3 and
weights only adapter for adapter4.
- Group Three: weights and encoding adapter for adapter5.

##### [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id46)

qnn-context-binary-generator --backend libQnnHtp.so --dlc_path <quantized-dlc> \
    --binary_file <context-bin> --config_file <htp-config-json> \
    --adapter_weight_config <lora-cbg-config-yaml> --output_dir <output-path>
    Copy to clipboard

#### [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id47)

There are no changes in QNN on-target flow to utilize Grouped LoRA.
QnnContext\_applyBinarySection() is used in the same manner as LoRA V3. See
QNN On-Target Call Flow for
more details on general LoRA V3 call flow.

Note that it is users responsibility to apply adapters in the correct order to switch groups. In
particular it is recommended that quantization parameters are applied before weights when switching
groups. Executing a graph with mismatched adapter weights and quantization parameters will result in
execution failure.

#### [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id48)

Groups may be specified in Genie for easy switching between groups by using the “groups”
configuration option in the LoRA configuration.

"groups": [
         {
           "version": 1,
           "name": "groupA",
           "members": [
           "adapter1", "adapter2"
           ],
           "quant-bin-sections": [
               "example_graph_adapter1_encodings.bin",
               ""
            ],
         },
         {
          "version": 1,
          "name": "groupB",
          "members": [
             "adapter3", "adapter4"
          ],
          "quant-bin-sections": [
             "example_graph_adapter3_encodings.bin",
             ""
           ]
          },
          {
           "version": 1,
           "name": "groupC",
           "members": [
             "adapter3"
           ],
           "quant-bin-sections": []
         },
    Copy to clipboard

## [All-Updateable Quantization](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id49)

All-updateable quantization is a case of LoRA V3 where a user would like to update all encodings
in a graph (both base and LoRA adapters) when switching adapters/concurrencies. Note this is the
deafult mode of LoRA V2.

If users’ adapters meet this criteria, they may see the following KPI changes:

Expected KPI Change vs. Regular LoRA V3

| RAM | ROM | Adapter Switch Time | Accuracy |
| --- | --- | --- | --- |
| Higher | Higher | Higher | Improved\* |

\* Dependent on quantization parameters and model sensitivity.

### [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id50)

#### [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id51)

To enable all-updateable quant in the offline preparation tools, users can maintain their existing
commands and additionally add *–quant\_updatable\_mode all* to the command line of the
qairt-lora-model-creator and qairt-converter. This will mark all tensors as having updateable
quantization parameters i.e.  all quantization parameters can be switched through
new adapter/concurrency applications..

See LoRA V3 offline preparation tools for general
LoRA V3 tools usage.

##### [qairt-lora-model-creator](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id52)

qairt-lora-model-creator --lora_config <updated_lora_config_yaml> \
    --output_dir <output directory path>  --quant_updatable_mode all
    Copy to clipboard

##### [qairt-converter](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id53)

qairt-converter -i <concatenated-model-onnx> --quantization_overrides <base-case-encodings> \
    --lora_weight_list <tensor-name-list-from-model-creator>  --quant_updatable_mode all
    Copy to clipboard

#### [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id54)

There are no changes to context binary generation to utilize all-updateable quantization. Refer to
Context Binary Generation for
more details on usage.

#### [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id55)

There are no changes in QNN on-target flow to utilize all-updateable quant.
QnnContext\_applyBinarySection() is used in the same manner as LoRA V3. See
QNN On-Target Call Flow for
more details on general LoRA V3 call flow.

#### [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id56)

There are no changes in QNN on-target flow to utilize all-updateable quant. See
Genie Execution Flow for
more details on general Genie LoRA V3 call flow.

## [Float_Only-Updateable Quantization](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id57)

Float\_Only-updateable quantization is a special case of LoRA V3 where the model remains in
floating-point format while supporting LoRA adapter weight updates. In float-only updateable quant,
only adapter weights are updatable and no quantization encodings are generated or updated.
The model explicitly remains in floating-point format throughout the entire workflow.

If users’ adapters meet this criteria, they may see the following KPI changes:

### [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id58)

#### [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id59)

To enable float-only updateable quant in the offline preparation tools, users can maintain their
existing commands and additionally add *–quant\_updatable\_mode float\_only* to the command line
of the qairt-lora-model-creator and qairt-converter. This will mark only adapter weight tensors as
updatable while keeping the model in floating-point format with no quantization encoding updates.

See LoRA V3 offline preparation tools for general
LoRA V3 tools usage.

##### [qairt-lora-model-creator](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id60)

qairt-lora-model-creator --lora_config <updated_lora_config_yaml> \
    --output_dir <output directory path>  --quant_updatable_mode float_only
    Copy to clipboard

##### [qairt-converter](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id61)

qairt-converter -i <concatenated-model-onnx> --lora_weight_list <tensor-name-list-from-model-creator> \
    --onnx_skip_simplification --quant_updatable_mode float_only
    Copy to clipboard

**Note:** Do not use –quantization\_overrides with float\_only mode as quantization encodings are not supported.

**Note:** If –float\_bitwidth 16 is provided as an argument in the converter command line,
then the whole model will be converted to float16 precision.

qairt-converter -i <concatenated-model-onnx> --lora_weight_list <tensor-name-list-from-model-creator> \
    --onnx_skip_simplification --quant_updatable_mode float_only --float_bitwidth 16
    Copy to clipboard

#### [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id62)

To generate binary sections containing adapter weight updates for float\_only updateable quant,
there is no need to specify encoding field in the adapter weight YAML config.

use_case:
        - name: example_adapter
        - graph: example_graph
        - safetensors: example_adapter.safetensors
    Copy to clipboard

##### [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id63)

qnn-context-binary-generator --backend libQnnHtp.so --dlc_path <converted-dlc> \
    --binary_file <context-bin> --config_file <htp-config-json> \
    --adapter_weight_config <lora-cbg-config-yaml> --output_dir <output-path>
    Copy to clipboard

#### [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id64)

There are no changes in QNN on-target flow to utilize float\_only-updateable quant.
QnnContext\_applyBinarySection() is used in the same manner as LoRA V3. See
QNN On-Target Call Flow for
more details on general LoRA V3 call flow.

#### [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id65)

There are no changes in QNN on-target flow to utilize float\_only-updateable quant. See
Genie Execution Flow for
more details on general Genie LoRA V3 call flow.

## [Hot Switch](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id66)

Hot Switching is a special case of LoRA V3 where all adapters are always loaded.
”Switching” between adapters is done through control of adapter strength inputs (alpha vector), instead of binary sections.
Due to lack of quantization updates, accuracy needs to be verified to work in this configuration.

This is enabled by the user in PEFT, where all adapters should be concatenated into a
single concurrency before provided to  QAIRT tools.

Expected KPI Change vs. Regular LoRA V3

| RAM | ROM | Adapter Switch Time | Accuracy |
| --- | --- | --- | --- |
| Increased | N/A | N/A | Same\* |

\* Assumes quantization parameters may match across all adapters.

### [Offline Graph Preparation Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id67)

#### [Command templates for offline preparation tools](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id68)

Users must concatenate all adapters into a single concurrency before providing to the QAIRT offline
preparation tools. All subsequent steps are the same as LoRA V3. See
LoRA V3 offline preparation tools
for general LoRA V3 tools usage.

It is recommended that users use –quant\_updatable\_mode none ,
since adapter quantization parameters will not be updated. See
No-Updateable Quantization
for more information.

#### [Context Binary Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id69)

Users need not utilize the –adapter\_weight\_config command line argument with
qnn-context-binary-generator, since there are no binary sections to generate.

##### [Command template for context binary generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id70)

qnn-context-binary-generator --backend libQnnHtp.so --dlc_path <quantized-dlc> \
    --binary_file <context-bin> --config_file <htp-config-json> \
    --output_dir <output-path>
    Copy to clipboard

#### [On-target QNN Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id71)

Instead of using QnnContext\_applyBinarySection(), users will switch between adapters by
modifying per adapter alpha values at graph execution.

#### [On-target Genie Execution Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lora_v3_optimizations.html#id72)

There are no changes in QNN on-target flow to utilize all-updateable quant. See
Genie Execution Flow for
more details on general Genie LoRA V3 call flow.

Last Published: Jun 04, 2026