-
Notifications
You must be signed in to change notification settings - Fork 942
Expand file tree
/
Copy pathqc_schema.py
More file actions
305 lines (246 loc) · 8.14 KB
/
qc_schema.py
File metadata and controls
305 lines (246 loc) · 8.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# Copyright (c) Qualcomm Innovation Center, Inc.
# All rights reserved
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
Please refer to executorch/backends/qualcomm/serialization/schema.fbs for the schema definitions
"""
from dataclasses import dataclass, field
from enum import IntEnum, unique
from typing import List, Optional
@dataclass
class BinaryInfo:
signature: str = ""
data: bytes = None
@unique
class HtpArch(IntEnum):
NONE = 0
V68 = 68
V69 = 69
V73 = 73
V75 = 75
V79 = 79
V81 = 81
@dataclass
class HtpInfo:
htp_arch: HtpArch = HtpArch.NONE
vtcm_size_in_mb: int = 0
@unique
class LpaiHardwareVersion(IntEnum):
NONE = 0
V6 = 6
V7 = 7
@dataclass
class LpaiInfo:
lpai_hardware_version: LpaiHardwareVersion = LpaiHardwareVersion.NONE
# TODO: see if we need to expose num_cores of adsp
@unique
class QcomChipset(IntEnum):
UNKNOWN_SM = 0
SA8295 = 39 # v68
SA8797 = 72 # v81
SM8350 = 30 # v68
SM8450 = 36 # v69
SM8475 = 42 # v69
SM8550 = 43 # v73
SM8650 = 57 # v75
SM8750 = 69 # v79
SM8850 = 87 # v81
SSG2115P = 46 # v73
SSG2125P = 58 # v73
SXR1230P = 45 # v73
SXR2230P = 53 # v69
SXR2330P = 75 # v79
QCS9100 = 77 # v73
SAR2230P = 95 # v81
SA8255 = 52 # v73
SW6100 = 96 # v81
QCM6490 = 93 # v68
SM8845 = 97 # v81
@dataclass
class SocInfo:
soc_model: QcomChipset = QcomChipset.UNKNOWN_SM
htp_info: HtpInfo = field(default_factory=HtpInfo)
lpai_info: Optional[LpaiInfo] = None
_soc_info_table = {
QcomChipset.SA8295: SocInfo(QcomChipset.SA8295, HtpInfo(HtpArch.V68, 8)),
QcomChipset.SA8797: SocInfo(QcomChipset.SA8797, HtpInfo(HtpArch.V81, 16)),
QcomChipset.SM8350: SocInfo(QcomChipset.SM8350, HtpInfo(HtpArch.V68, 4)),
QcomChipset.SM8450: SocInfo(QcomChipset.SM8450, HtpInfo(HtpArch.V69, 8)),
QcomChipset.SM8475: SocInfo(QcomChipset.SM8475, HtpInfo(HtpArch.V69, 8)),
QcomChipset.SM8550: SocInfo(QcomChipset.SM8550, HtpInfo(HtpArch.V73, 8)),
QcomChipset.SA8255: SocInfo(QcomChipset.SA8255, HtpInfo(HtpArch.V73, 8)),
QcomChipset.SM8650: SocInfo(QcomChipset.SM8650, HtpInfo(HtpArch.V75, 8)),
QcomChipset.SM8750: SocInfo(QcomChipset.SM8750, HtpInfo(HtpArch.V79, 8)),
QcomChipset.SM8850: SocInfo(
QcomChipset.SM8850, HtpInfo(HtpArch.V81, 8), LpaiInfo(LpaiHardwareVersion.V6)
),
QcomChipset.SSG2115P: SocInfo(QcomChipset.SSG2115P, HtpInfo(HtpArch.V73, 2)),
QcomChipset.SSG2125P: SocInfo(QcomChipset.SSG2125P, HtpInfo(HtpArch.V73, 2)),
QcomChipset.SXR1230P: SocInfo(QcomChipset.SXR1230P, HtpInfo(HtpArch.V73, 2)),
QcomChipset.SXR2230P: SocInfo(QcomChipset.SXR2230P, HtpInfo(HtpArch.V69, 8)),
QcomChipset.SXR2330P: SocInfo(QcomChipset.SXR2330P, HtpInfo(HtpArch.V79, 8)),
QcomChipset.QCS9100: SocInfo(QcomChipset.QCS9100, HtpInfo(HtpArch.V73, 8)),
QcomChipset.SAR2230P: SocInfo(
QcomChipset.SAR2230P, HtpInfo(HtpArch.V81, 4), LpaiInfo(LpaiHardwareVersion.V6)
),
QcomChipset.SW6100: SocInfo(QcomChipset.SW6100, HtpInfo(HtpArch.V81, 4)),
QcomChipset.QCM6490: SocInfo(QcomChipset.QCM6490, HtpInfo(HtpArch.V68, 2)),
QcomChipset.SM8845: SocInfo(QcomChipset.SM8845, HtpInfo(HtpArch.V81, 8)),
}
@unique
class QnnExecuTorchGpuPerformanceMode(IntEnum):
kGpuPerfHintHigh = 0
kGpuPerfHintNormal = 1
kGpuPerfHintLow = 2
@unique
class QnnExecuTorchGpuPrecision(IntEnum):
kGpuPrecisionFp32 = 0
kGpuPrecisionFp16 = 1
kGpuPrecisionHybrid = 2
kGpuPrecisionUserProvided = 3
@dataclass
class QnnExecuTorchGpuBackendOptions:
performance_mode: QnnExecuTorchGpuPerformanceMode = (
QnnExecuTorchGpuPerformanceMode.kGpuPerfHintHigh
)
precision: QnnExecuTorchGpuPrecision = (
QnnExecuTorchGpuPrecision.kGpuPrecisionUserProvided
)
use_memory_optimizations: bool = True
use_node_optimizations: bool = True
use_queue_recording: bool = True
use_weight_sharing: bool = False
@unique
class QnnExecuTorchHtpPerformanceMode(IntEnum):
kHtpDefault = 0
kHtpSustainedHighPerformance = 1
kHtpBurst = 2
kHtpHighPerformance = 3
kHtpPowerSaver = 4
kHtpLowPowerSaver = 5
kHtpHighPowerSaver = 6
kHtpLowBalanced = 7
kHtpBalanced = 8
@unique
class QnnExecuTorchHtpPrecision(IntEnum):
kHtpQuantized = 0
kHtpFp16 = 1
@unique
class QnnExecuTorchHtpPdSession(IntEnum):
kHtpUnsignedPd = 0
kHtpSignedPd = 1
@unique
class QnnExecuTorchBackendType(IntEnum):
kUndefinedBackend = 0
kGpuBackend = 1
kHtpBackend = 2
kDspBackend = 3
kLpaiBackend = 4
def __str__(self) -> str:
return {
QnnExecuTorchBackendType.kUndefinedBackend: "undefined",
QnnExecuTorchBackendType.kGpuBackend: "gpu",
QnnExecuTorchBackendType.kHtpBackend: "htp",
QnnExecuTorchBackendType.kDspBackend: "dsp",
QnnExecuTorchBackendType.kLpaiBackend: "lpai",
}[self]
@dataclass
class QnnExecuTorchHtpBackendOptions:
max_sf_buf_size: int = 0
performance_mode: QnnExecuTorchHtpPerformanceMode = (
QnnExecuTorchHtpPerformanceMode.kHtpDefault
)
precision: QnnExecuTorchHtpPrecision = QnnExecuTorchHtpPrecision.kHtpQuantized
pd_session: QnnExecuTorchHtpPdSession = QnnExecuTorchHtpPdSession.kHtpUnsignedPd
use_conv_hmx: bool = True
use_dlbc: bool = False
use_fold_relu: bool = True
use_multi_contexts: bool = False
use_weight_sharing: bool = False
use_slc_allocator: bool = False
@unique
class QnnExecuTorchLpaiClientPerf(IntEnum):
kUndefined = 0
kRealTime = 1
kNonRealTime = 2
@unique
class QnnExecuTorchLpaiCoreAffinity(IntEnum):
kUndefined = 0
kSoft = 1
kHard = 2
@unique
class QnnExecuTorchLpaiTargetEnv(IntEnum):
kX86 = 0
kArm = 1
kAdsp = 2
@dataclass
class QnnExecuTorchLpaiBackendOptions:
fps: int = 1
ftrt_ratio: int = 10
client_perf_type: QnnExecuTorchLpaiClientPerf = (
QnnExecuTorchLpaiClientPerf.kRealTime
)
affinity: QnnExecuTorchLpaiCoreAffinity = QnnExecuTorchLpaiCoreAffinity.kSoft
core_selection: int = 0
target_env: QnnExecuTorchLpaiTargetEnv = QnnExecuTorchLpaiTargetEnv.kArm
@unique
class QnnExecuTorchLogLevel(IntEnum):
kLogOff = 0
kLogLevelError = 1
kLogLevelWarn = 2
kLogLevelInfo = 3
kLogLevelVerbose = 4
kLogLevelDebug = 5
@unique
class QnnExecuTorchProfileLevel(IntEnum):
kProfileOff = 0
kProfileBasic = 1
kProfileDetailed = 2
kProfileOptrace = 3
@dataclass
class QnnExecuTorchBackendOptions:
backend_type: QnnExecuTorchBackendType
htp_options: Optional[QnnExecuTorchHtpBackendOptions] = None
gpu_options: Optional[QnnExecuTorchGpuBackendOptions] = None
lpai_options: Optional[QnnExecuTorchLpaiBackendOptions] = None
@unique
class QnnExecuTorchOpPackageTarget(IntEnum):
UNKNOWN = 0
CPU = 1
HTP = 2
@unique
class QnnExecuTorchOpPackagePlatform(IntEnum):
UNKNOWN = 0
X86_64 = 1
AARCH64_ANDROID = 2
@dataclass
class QnnExecuTorchOpPackageInfo:
op_package_name: str = ""
op_package_path: str = ""
interface_provider: str = ""
target: QnnExecuTorchOpPackageTarget = QnnExecuTorchOpPackageTarget.UNKNOWN
custom_op_name: str = ""
qnn_op_type_name: str = ""
platform: QnnExecuTorchOpPackagePlatform = QnnExecuTorchOpPackagePlatform.UNKNOWN
@dataclass
class QnnExecuTorchOpPackageOptions:
op_package_infos: List[QnnExecuTorchOpPackageInfo] = field(default_factory=list)
@dataclass
class QnnExecuTorchOptions:
soc_info: SocInfo
backend_options: QnnExecuTorchBackendOptions
library_path: str = ""
log_level: QnnExecuTorchLogLevel = QnnExecuTorchLogLevel.kLogOff
online_prepare: bool = False
dump_intermediate_outputs: bool = False
profile_level: QnnExecuTorchProfileLevel = QnnExecuTorchProfileLevel.kProfileOff
shared_buffer: bool = False
is_from_context_binary: bool = False
saver: bool = False
saver_output_dir: str = "saver_output"
op_package_options: QnnExecuTorchOpPackageOptions = field(
default_factory=QnnExecuTorchOpPackageOptions
)
use_mha2sha: bool = False