# Architecture Checker (Experimental) Architecture checker is a tool made for models running with HTP backend, including quantized 8-bit, quantized 16-bit and FP16 models. It outputs a list of issues in the model that keep the model from getting better performance while running on the HTP backend. Architecture checker tool can be invoked with the modifier feature which will apply the recommended modifications for these issues. This will help in visualizing the changes that can be applied to the model to make it a better fit on the HTP backend. X86-Linux/ WSL usage: snpe-architecture-checker [-h] -i INPUT_DLC [-o OUTPUT_PATH] [-m MODIFY] X86-Windows/ Windows on Snapdragon usage: python snpe-architecture-checker [-h] -i INPUT_DLC [-o OUTPUT_PATH] [-m MODIFY] required arguments: -i INPUT_DLC, --input_dlc INPUT_DLC Path to a DLC file optional arguments: -o OUTPUT_PATH, --output_path OUTPUT_PATH Path where the output csv should be saved. If not specified, the output csv will be written to the same path as the input dlc file -m MODIFY, --modify MODIFY The query to select the modifications to apply. --modify or --modify show - To see all the possible modifications. Display list of rule names and details of the modifications. --modify all - To apply all the possible modifications found for the model. --modify apply=rule_name1,rule_name2 - To apply modifications for specified rule names. The list of rules should be comma separated without spaces Copy to clipboard **Note:** SNPE\_ROOT environment variable must be configured before running the tool. The output is a csv file and will be saved as <OUTPUT\_PATH>\_architecture\_checker.csv. model_architecture_checker.csv | | Graph / Layer name | Issue | Recommendation | Type | Input\_tensor\_name:[dims] | Output\_tensor\_name:[dims] | Parameters | Previous layer | Next layers | Modification | Modification\_info | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 1 | Graph | This model uses 16-bit activation data.
16-bit activation data takes twice the
amount of memory than 8-bit activation data does. | Try to use a smaller datatype to get
better performance. E.g., 8-bit | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | | 2 | Layer\_name\_1 | The number of channels in the input/output tensor
of this convolution is low (smaller than 32). | Try increasing the number of channels in
the input/output tensor to 32 or greater
to get better performance. | Conv2d | input\_1:[1, 250, 250, 3],
\_\_param\_ 1:[5, 5, 3, 32],
convolution\_0\_bias:[32] | output\_1:[1, 123, 123, 32] | {‘dilation’:’[1, 1]’,
‘group’:1,
‘pad\_amount’:’[[1, 1], [1, 1]]’,
‘stride’: ‘[1, 1]’} | [‘previous\_layer\_name’] | [‘next\_layer\_name1’,
‘next\_layer\_name2’] | N/A | N/A | **How to read the example output csv?** Row 1: This is an issue on the graph, the graph is using 16-bit activation data, as said in the recommendation, changing the activation from 16 bit to 8 bit gives better performance. Row 2: The issue is on the layer with name “Layer\_name\_1”. This layer has three inputs: input\_1, \_\_param\_1 and convolution\_0\_bias where the dimensions are [1, 250, 250, 3], [5, 5, 3, 32] and [32] respectively. This layer has one output with tensor name output\_1 and the dimension of this tensor is [1, 123, 123, 32]. The issue for this layer is the channel of the input tensor is low, as the channel is smaller than 32, would recommend to increase the channel to at least 32 to get better performance on HTP backend. Currently the input dimension is [1, 250, 250, 3] and ideally have that to be [1, x, x, 32]. The Modification and Modification\_info columns provide details about the modifications applied to the layer. If the Architecture Checker is not invoked with modifier or if there aren’t any modifications applicable, then these value will be N/A. **Is the layer/tensor name the same in the original model?** It might not be the same but should be similar. The input tensor, output tensor, parameters and previous/next layers are avaliable in the output csv file to help locate the correct node inside the original model. **Sample Command** snpe-architecture-checker --input_dlc ./model.dlc --output_path ./archCheckerOutput Copy to clipboard **Architecture Checker - Model Modifier** For appying modifications to the model, the Architecture Checker can be invoked with “–modify” or “–modify show” which will display a list of possible modifications. In this case, the Architecture Checker tool will only show the rule names and modification detail. It will run without making any changes to the model and generate the csv output. Using the rule names from the above run, the Architecture Checker can be invoked with “–modify all” or “–modify apply=rule\_name1,rule\_name2”. In this case, the rule specific changes will be applied to the model and the changes can be viewed in the updated model. Additionally, the output csv will also contain information related to the modifications. Consider the below csv output generated after applying “–modify apply=elwisediv” modification on an example model. model_architecture_checker.csv | | Graph / Layer name | Issue | Recommendation | Type | Input\_tensor\_name:[dims] | Output\_tensor\_name:[dims] | Parameters | Previous layer | Next layers | Modification | Modification\_info | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 1 | Layer\_name\_1 | ElementWiseDivide usually has poor performance
compared to ElementWiseMultiply | Try replacing ElementWiseDivide with
ElementWiseMultiply using the reciprocal
value to get better performance | Eltwise\_Binary | input\_1:[1, 52, 52, 6],
input\_2:[1] | output\_1:[1, 52, 52, 6] | {‘eltwise\_type’: ‘ElementWiseDivide’} | [‘previous\_layer\_name’] | [‘next\_layer\_name1’,
‘next\_layer\_name2’] | Done | ElementWiseDivide has been replaced
by ElementWiseMultiply using
the reciprocal value | | 2 | Layer\_name\_2 | The number of channels in the input/output tensor
of this convolution is low (smaller than 32). | Try increasing the number of channels in
the input/output tensor to 32 or greater
to get better performance. | Conv2d | input\_3:[1, 250, 250, 3],
\_\_param\_1:[5, 5, 3, 32],
convolution\_1\_bias:[32] | output\_2:[1, 123, 123, 32] | {‘dilation’:’[1, 1]’,
‘group’:1,
‘pad\_amount’:’[[1, 1], [1, 1]]’,
‘stride’: ‘[1, 1]’} | [‘previous\_layer\_name’] | [‘next\_layer\_name1’,
‘next\_layer\_name2’] | N/A | N/A | **How to read the example output csv?** Row 1: The issue is on the layer with name “Layer\_name\_1”. It has element wise divide which gives a poor performance as compared to elementwise multipy. After invoking architecture checker with “–modify apply=elwisediv”, the modifications have been successfully applied i.e. the element wise divide is replaced by element wise multiply with a reciprocal value. This information is available in the Modification and Modification\_info columns. Row 2: The issue is on the layer with name “Layer\_name\_2”. The number of channels of the input tensor is less than 32. Its recommended to increase the number of channels to 32 or greater for better performance. For this issue, the modification through the tool is not applicable hence the Modification and Modification\_info columns are N/A. After modifying the model, the above run will generate updated model along with the csv output. Running the Architecture Checker on the updated model will no longer show the element wise divide issue on Layer\_name\_1. Following are the commands to invoke Architecture Checker with Modifier to display list of modifications: **Sample Command** snpe-architecture-checker --input_dlc ./model.dlc --output_path ./archCheckerOutput --modify Copy to clipboard **Sample Command** snpe-architecture-checker --input_dlc ./model.dlc --output_path ./archCheckerOutput --modify show Copy to clipboard Following are the commands to apply the modifications either on all possible modifications or specific rules: **Sample Command** snpe-architecture-checker --input_dlc ./model.dlc --output_path ./archCheckerOutput --modify all Copy to clipboard **Sample Command** snpe-architecture-checker --input_dlc ./model.dlc --output_path ./archCheckerOutput --modify apply=prelu,elwisediv Copy to clipboard **Note:** The Architecture Checker with modifier is an enchancement to help visualize the changes that can be applied on the model to better fit it on the HTP. To see the actual performance improvements, the model may require retraining/redesigning. Last Published: Oct 02, 2025 [Previous Topic Debug Tools](https://docs.qualcomm.com/bundle/publicresource/80-63442-2/topics/usergroup11.md) [Next Topic Accuracy Debugger (Experimental)](https://docs.qualcomm.com/bundle/publicresource/80-63442-2/topics/debug_tools_snpe-accuracy-debugger.md)