Skip to content

Commit f0c853d

Browse files
authored
Qualcomm AI Engine Direct - Fixed the accuracy bug for conv with bias in block quant (#13676)
As title. cc: @haowhsu-quic
1 parent 034ff5d commit f0c853d

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

backends/qualcomm/quantizer/observers/per_block_param_observer.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ def __init__(
3535
**kwargs,
3636
)
3737
self.block_size = block_size
38+
# TODO: expand this when QNN starts to support more configurations
39+
self.bitwidth_of_scale = 4
40+
self.num_steps = 2**self.bitwidth_of_scale
3841
self.calibrated = False
3942

4043
def forward(self, input: torch.Tensor):

backends/qualcomm/quantizer/qconfig.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# Copyright (c) Qualcomm Innovation Center, Inc.
2+
# All rights reserved
3+
#
4+
# This source code is licensed under the BSD-style license found in the
5+
# LICENSE file in the root directory of this source tree.
6+
17
from dataclasses import dataclass
28
from typing import Any, Callable, Dict, List, Optional, Tuple
39

@@ -49,7 +55,10 @@ def _derive_bias_qparams_fn(
4955
derived_zero = torch.zeros(derived_scale.size()).to(torch.int32)
5056
if isinstance(weight_obs_or_fq, PerBlockParamObserver):
5157
# keep maximum scale of each channel for bias
52-
derived_scale = derived_scale.view(derived_scale.size(0), -1).amax(dim=-1)
58+
derived_scale = (
59+
derived_scale.view(derived_scale.size(0), -1).amax(dim=-1)
60+
/ weight_obs_or_fq.num_steps
61+
)
5362
derived_zero = derived_zero.view(derived_zero.size(0), -1).amax(dim=-1)
5463
return (derived_scale, derived_zero)
5564

backends/qualcomm/tests/test_qnn_delegate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5552,13 +5552,13 @@ def test_mobilevit_v2(self):
55525552
self.assertGreaterEqual(msg["top_1"], 50)
55535553
self.assertGreaterEqual(msg["top_5"], 85)
55545554

5555-
def test_mobilevit1(self):
5555+
def test_mobilevit_v1(self):
55565556
if not self.required_envs([self.image_dataset]):
55575557
self.skipTest("missing required envs")
55585558

55595559
cmds = [
55605560
"python",
5561-
f"{self.executorch_root}/examples/qualcomm/oss_scripts/mobilevit1.py",
5561+
f"{self.executorch_root}/examples/qualcomm/oss_scripts/mobilevit_v1.py",
55625562
"--dataset",
55635563
self.image_dataset,
55645564
"--artifact",

0 commit comments

Comments
 (0)