Skip to content

Commit c5a8c53

Browse files
authored
[QNN EP] Enhance unique name generator for node and tensor names (microsoft#25702)
### Description Enhance unique name generator for node and tensor names ### Motivation and Context QNN requires node name to be unique. We've seen many instance of QNN node name conflicts results in failures on QNN graph finalizations. However, currently it's hard-coded and thus error-prone, this change adds utility to generate unique names used in QNN nodes and intermediate I/O tensors.
1 parent 1b75411 commit c5a8c53

31 files changed

+207
-185
lines changed

onnxruntime/core/providers/qnn/builder/opbuilder/base_op_builder.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ Status BaseOpBuilder::ProcessInt64Tensors(QnnModelWrapper& qnn_model_wrapper,
202202
// Insert cast to int32 if input dtype is int64
203203
if (input_tensorwrapper.GetTensorDataType() == QNN_DATATYPE_INT_64) {
204204
const Qnn_TensorType_t tensor_type = QNN_TENSOR_TYPE_NATIVE;
205-
const std::string cast_output_name = input_names[i] + "_cast_int32";
205+
const std::string cast_output_name = utils::GetUniqueName(input_names[i], "_cast_int32");
206206
if (!qnn_model_wrapper.IsQnnTensorWrapperExist(cast_output_name)) {
207207
Qnn_DataType_t qnn_data_type = QNN_DATATYPE_INT_32;
208208
const auto& input_i = node_unit.Inputs()[i];
@@ -295,8 +295,8 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
295295
}
296296

297297
if (needs_int64_cast) {
298-
std::string cast_node_name = output_name + "_cast_int64";
299-
std::string cast_input_name = output_name + "_cast_int64_aux";
298+
const std::string cast_node_name = utils::GetUniqueName(node_unit, "_cast_int64");
299+
const std::string cast_input_name = utils::GetUniqueName(output_name, "_cast_int64");
300300
QnnQuantParamsWrapper quant_params = output_info.quant_param.Copy();
301301
std::vector<uint32_t> cast_output_shape = output_info.shape;
302302

@@ -309,10 +309,10 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
309309
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(cast_input_tensorwrapper)), "Failed to add tensor.");
310310
output_names.push_back(cast_input_name);
311311
// Store the cast node information for later addition
312-
cast_node_info_vec.push_back({cast_node_name, cast_input_name, output_name});
312+
cast_node_info_vec.emplace_back(CastNodeInfo{cast_node_name, cast_input_name, output_name});
313313
} else if (supported_qnn_data_type != output_info.qnn_data_type && is_graph_output && !do_op_validation) {
314-
std::string cast_node_name = output_name + "_ort_qnn_ep_cast";
315-
std::string cast_input_name = output_name + "_ort_qnn_ep_aux";
314+
const std::string cast_node_name = utils::GetUniqueName(node_unit, "_cast");
315+
const std::string cast_input_name = utils::GetUniqueName(output_name, "_cast");
316316
std::vector<uint32_t> cast_output_shape = output_info.shape;
317317
QnnTensorWrapper cast_input_tensorwrapper(cast_input_name,
318318
QNN_TENSOR_TYPE_NATIVE,
@@ -322,7 +322,7 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
322322
mem_type);
323323
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(cast_input_tensorwrapper)), "Failed to add tensor.");
324324
output_names.push_back(cast_input_name);
325-
cast_node_info_vec.push_back({cast_node_name, cast_input_name, output_name});
325+
cast_node_info_vec.emplace_back(CastNodeInfo{cast_node_name, cast_input_name, output_name});
326326
} else {
327327
output_info.qnn_data_type = supported_qnn_data_type;
328328
output_names.push_back(output_name);
@@ -336,9 +336,9 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
336336
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(output_tensorwrapper)), "Failed to add tensor.");
337337
}
338338

339-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
339+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
340340
QNN_OP_PACKAGE_NAME_QTI_AISW,
341-
qnn_op_type, // Typically GetQnnOpType(), but can be overridden.
341+
qnn_op_type,
342342
std::move(input_names),
343343
std::move(output_names),
344344
std::move(param_tensor_names),

onnxruntime/core/providers/qnn/builder/opbuilder/cast_op_builder.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Status CastOpBuilder::ProcessExtraInputForNotEqual(QnnModelWrapper& qnn_model_wr
6868
}
6969

7070
// Build additional static input with value 0.
71-
const std::string& input_name = utils::GetNodeName(node_unit) + "_notequal_zero";
71+
const std::string& input_name = utils::GetUniqueName(node_unit, "_notequal_zero");
7272

7373
Qnn_DataType_t qnn_data_type = QNN_DATATYPE_UNDEFINED;
7474
const auto* type_proto = input.node_arg.TypeAsProto();
@@ -84,7 +84,7 @@ Status CastOpBuilder::ProcessExtraInputForNotEqual(QnnModelWrapper& qnn_model_wr
8484
"Failed to add additional input tensor for QNN Cast node that will be replaced by NotEqual.");
8585
input_names.push_back(input_name);
8686

87-
LOGS(logger, VERBOSE) << "FP-to-Bool Cast node " << utils::GetNodeName(node_unit) << " is replaced by NotEqual.";
87+
LOGS(logger, VERBOSE) << "FP-to-Bool Cast node " << node_unit.Name() << " is replaced by NotEqual.";
8888
return Status::OK();
8989
}
9090

@@ -177,7 +177,7 @@ Status CastOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra
177177
const std::string qnn_op_type = IsFpToBoolCast(node_unit)
178178
? QNN_OP_ELEMENT_WISE_NOT_EQUAL
179179
: GetQnnOpType(node_unit.OpType());
180-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
180+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
181181
QNN_OP_PACKAGE_NAME_QTI_AISW,
182182
qnn_op_type,
183183
std::move(input_names),

onnxruntime/core/providers/qnn/builder/opbuilder/conv_op_builder.cc

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ Status ConvOpBuilder::ProcessConv2D3DInputs(QnnModelWrapper& qnn_model_wrapper,
199199
TensorInfo input_info = {};
200200
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input_info));
201201

202-
std::string actual_name = input_info.is_initializer ? input1_name : input1_name + "_ort_qnn_ep_transpose";
202+
std::string actual_name = input_info.is_initializer ? input1_name : utils::GetUniqueName(input1_name, "_transpose");
203203
input_names.push_back(actual_name);
204204

205205
std::vector<uint32_t> actual_shape;
@@ -309,8 +309,7 @@ Status ConvOpBuilder::ProcessConv2D3DInputs(QnnModelWrapper& qnn_model_wrapper,
309309

310310
// Pop Conv weight. Insert Convert op after Weight
311311
input_names.pop_back();
312-
const std::string& conv_output_name = node_unit.Outputs()[0].node_arg.Name();
313-
std::string convert_output_name = weight_input_name + "_convert_" + conv_output_name;
312+
std::string convert_output_name = utils::GetUniqueName(weight_input_name, "_convert");
314313

315314
ORT_RETURN_IF_ERROR(utils::InsertConvertOp(qnn_model_wrapper,
316315
weight_input_name,
@@ -345,7 +344,7 @@ Status ConvOpBuilder::ProcessConv2D3DInputs(QnnModelWrapper& qnn_model_wrapper,
345344
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input1_info));
346345

347346
if (input0_info.quant_param.IsPerTensor(/*include_bw*/ true) && input1_info.quant_param.IsQuantized()) {
348-
const std::string bias_name = qnn::utils::GetNodeName(node_unit) + "_implicit_bias_ort_qnn_ep";
347+
const std::string bias_name = qnn::utils::GetUniqueName(node_unit, "_implicit_bias");
349348
std::vector<uint32_t> bias_shape = {input1_info.shape[0]};
350349
ORT_RETURN_IF_ERROR(AddZeroBiasInput(qnn_model_wrapper, input0_info.quant_param, input1_info.quant_param,
351350
std::move(bias_shape), bias_name, logger, input_names));
@@ -378,7 +377,7 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper,
378377
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[0], input0_info));
379378

380379
const std::string conv_input0_name = input0_info.is_initializer ? input0_name
381-
: input0_name + "_ort_qnn_ep_reshape";
380+
: utils::GetUniqueName(input0_name, "_reshape");
382381
input_names.push_back(conv_input0_name);
383382

384383
if (!qnn_model_wrapper.IsQnnTensorWrapperExist(conv_input0_name)) {
@@ -435,7 +434,7 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper,
435434
TensorInfo input_info = {};
436435
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input_info));
437436

438-
std::string conv_weight_input_name = input_info.is_initializer ? input1_name : input1_name + "_ort_qnn_ep_transpose";
437+
std::string conv_weight_input_name = input_info.is_initializer ? input1_name : utils::GetUniqueName(input1_name, "_transpose");
439438
input_names.push_back(conv_weight_input_name);
440439

441440
// Create the shape after reshaping.
@@ -460,7 +459,7 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper,
460459
return ORT_MAKE_STATUS(ONNXRUNTIME, FAIL, "QNN EP: Unexpected convolution op type: ", node_unit.OpType().c_str());
461460
}
462461

463-
const std::string reshape_output = input1_name + "_ort_qnn_ep_reshape";
462+
const std::string reshape_output = utils::GetUniqueName(input1_name, "_reshape");
464463
std::vector<uint8_t> unpacked_tensor;
465464
if (input_info.is_initializer) {
466465
//
@@ -770,11 +769,11 @@ Status ConvOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra
770769
output_shape[1], // W
771770
output_shape[2], // C
772771
};
773-
const std::string conv_output_name = output_name + "_ort_qnn_ep_conv2d";
772+
const std::string conv_output_name = utils::GetUniqueName(output_name, "_conv");
774773
QnnTensorWrapper output_tensorwrapper(conv_output_name, QNN_TENSOR_TYPE_NATIVE, qnn_data_type,
775774
output_quantize_param.Copy(), std::vector<uint32_t>(output_shape_2d));
776775
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(output_tensorwrapper)), "Failed to add tensor.");
777-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
776+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
778777
QNN_OP_PACKAGE_NAME_QTI_AISW,
779778
output_node_type,
780779
std::move(input_names),
@@ -799,7 +798,7 @@ Status ConvOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra
799798
QnnTensorWrapper output_tensorwrapper(output_name, tensor_type, qnn_data_type,
800799
std::move(output_quantize_param), std::move(output_shape));
801800
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(output_tensorwrapper)), "Failed to add tensor.");
802-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
801+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
803802
QNN_OP_PACKAGE_NAME_QTI_AISW,
804803
output_node_type,
805804
std::move(input_names),

onnxruntime/core/providers/qnn/builder/opbuilder/einsum_op_builder.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,8 @@ Status CreateMatMulTransposeAll(
287287
std::vector<uint32_t> input_shape1(input_info1.shape);
288288
std::swap(input_shape0[1], input_shape0[2]);
289289
std::swap(input_shape1[1], input_shape1[2]);
290-
const std::string input_transpos0 = input_names[0] + "_t0";
291-
const std::string input_transpos1 = input_names[1] + "_t1";
290+
const std::string input_transpos0 = onnxruntime::qnn::utils::GetUniqueName(input_names[0], "_transpose");
291+
const std::string input_transpos1 = onnxruntime::qnn::utils::GetUniqueName(input_names[1], "_transpose");
292292
const std::vector<uint32_t> transpose_perm{0, 2, 1, 3};
293293
ORT_RETURN_IF_ERROR(qnn_model_wrapper->AddTransposeNode(
294294
/*node_index=*/node_unit.Index(),
@@ -315,7 +315,7 @@ Status CreateMatMulTransposeAll(
315315
onnxruntime::qnn::TensorInfo matmul_output_info{};
316316
const auto& output = node_unit.Outputs()[0];
317317
ORT_RETURN_IF_ERROR(qnn_model_wrapper->GetTensorInfo(output, matmul_output_info));
318-
const std::string matmul_output_name = onnxruntime::qnn::utils::GetNodeName(node_unit) + "_matmul";
318+
const std::string matmul_output_name = onnxruntime::qnn::utils::GetUniqueName(node_unit, "_matmul");
319319
std::vector<uint32_t> matmul_output_shape(matmul_output_info.shape);
320320
std::swap(matmul_output_shape[1], matmul_output_shape[2]);
321321
onnxruntime::qnn::QnnTensorWrapper matmul_output_wrapper(
@@ -325,7 +325,7 @@ Status CreateMatMulTransposeAll(
325325
node_unit.OpType() + " failed to add tensor.");
326326
std::vector<std::string> param_tensor_names = SetMatMulParamTensorNames(
327327
qnn_model_wrapper, node_unit, /*transpose_in0=*/false, /*transpose_in1=*/false);
328-
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(/*qnn_node_name=*/onnxruntime::qnn::utils::GetNodeName(node_unit),
328+
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(/*qnn_node_name=*/onnxruntime::qnn::utils::GetUniqueName(node_unit, QNN_OP_MAT_MUL),
329329
/*package_name=*/QNN_OP_PACKAGE_NAME_QTI_AISW,
330330
/*qnn_node_type=*/QNN_OP_MAT_MUL,
331331
/*input_names=*/{input_transpos1, input_transpos0},
@@ -373,7 +373,7 @@ Status CreateReduceSumMulBroadcastX(
373373
ORT_RETURN_IF_NOT(shape_in0.size() == 4, "CreateReduceSumMulBroadcastX expects input 0 to be rank 4");
374374
ORT_RETURN_IF_NOT(shape_in1.size() == 3, "CreateReduceSumMulBroadcastX expects input 1 to be rank 3");
375375
const std::vector<uint32_t> new_shape_in0{shape_in0[0], shape_in0[1], shape_in0[2], 1, shape_in0[3]};
376-
const std::string reshape_out_name = input_names[0] + "_reshaped";
376+
const std::string reshape_out_name = onnxruntime::qnn::utils::GetUniqueName(input_names[0], "_reshape");
377377
ORT_RETURN_IF_ERROR(qnn_model_wrapper->AddReshapeNode(
378378
/*input_name=*/input_names[0],
379379
/*output_name=*/reshape_out_name,
@@ -387,7 +387,7 @@ Status CreateReduceSumMulBroadcastX(
387387
// Multiply: reshaped in0 * in1
388388
// The output shape of the multiplication is determined by broadcasting the reshaped in0 of
389389
// (b, h, w, 1, c) and in1 (w, k, c) along the matching axes, resulting in (b, h, w, k, c).
390-
const std::string mul_out_name = onnxruntime::qnn::utils::GetNodeName(node_unit) + "_mul";
390+
const std::string mul_out_name = onnxruntime::qnn::utils::GetUniqueName(node_unit, "_mul");
391391
std::vector<uint32_t> shape_out_mul{new_shape_in0[0], new_shape_in0[1], new_shape_in0[2], shape_in1[1], new_shape_in0[4]};
392392
onnxruntime::qnn::QnnTensorWrapper tensor_wrapper_mul(mul_out_name,
393393
QNN_TENSOR_TYPE_NATIVE,
@@ -397,7 +397,7 @@ Status CreateReduceSumMulBroadcastX(
397397
ORT_RETURN_IF_NOT(qnn_model_wrapper->AddTensorWrapper(std::move(tensor_wrapper_mul)),
398398
"CreateReduceSumMulBroadcastX: failed to AddTensorWrapper");
399399
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(
400-
/*qnn_node_name=*/mul_out_name,
400+
/*qnn_node_name=*/onnxruntime::qnn::utils::GetUniqueName(node_unit, QNN_OP_ELEMENT_WISE_MULTIPLY),
401401
/*package_name=*/QNN_OP_PACKAGE_NAME_QTI_AISW,
402402
/*qnn_node_type=*/QNN_OP_ELEMENT_WISE_MULTIPLY,
403403
/*input_names=*/{reshape_out_name, input_names[1]},
@@ -444,7 +444,7 @@ Status CreateReduceSumMulBroadcastX(
444444
"CreateReduceSumMulBroadcastX: failed to AddTensorWrapper");
445445

446446
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(
447-
/*qnn_node_name=*/out_name,
447+
/*qnn_node_name=*/onnxruntime::qnn::utils::GetUniqueName(node_unit, QNN_OP_REDUCE_SUM),
448448
/*package_name=*/QNN_OP_PACKAGE_NAME_QTI_AISW,
449449
/*qnn_node_type=*/QNN_OP_REDUCE_SUM,
450450
/*input_names=*/{mul_out_name},

onnxruntime/core/providers/qnn/builder/opbuilder/expand_op_builder.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ Status ExpandOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper,
138138
} // if-else
139139

140140
const std::string& output_name = node_unit.Outputs()[0].node_arg.Name();
141-
std::string shape_input_name(input_name + "_" + output_name);
141+
std::string shape_input_name = utils::GetUniqueName(input_name, output_name);
142142
QnnTensorWrapper input_tensorwrapper(shape_input_name, QNN_TENSOR_TYPE_STATIC, qnn_data_type,
143143
std::move(quantize_param), std::move(input_shape),
144144
std::move(shape_data));

onnxruntime/core/providers/qnn/builder/opbuilder/gather_nd_op_builder.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ Status GatherNDOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper,
144144
std::move(cast_output_shape));
145145
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(indices_cast_tensor)),
146146
"Failed to add gather indices cast tensor.");
147-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(indices_casted_name,
147+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(indices_tensor_name, QNN_OP_CAST),
148148
QNN_OP_PACKAGE_NAME_QTI_AISW,
149149
QNN_OP_CAST,
150150
{indices_tensor_name},
@@ -254,8 +254,8 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model
254254

255255
// If a cast to int64 is needed, add the cast node
256256
if (needs_int64_cast) {
257-
std::string cast_node_name = output_name + "_cast_int64";
258-
std::string cast_input_name = output_name + "_cast_int64_aux";
257+
std::string cast_node_name = utils::GetUniqueName(node_unit, "_cast_int64");
258+
std::string cast_input_name = utils::GetUniqueName(output_name, "_cast_int64");
259259
std::string cast_output_name = output_name;
260260

261261
// Create the cast input tensor wrapper - use qnn_output_shape for the intermediate tensor
@@ -275,9 +275,9 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model
275275

276276
std::string gather_output_name = output_name;
277277
if (reshape_required) {
278-
gather_output_name += "_ort_qnn_ep_reshape";
278+
gather_output_name = utils::GetUniqueName(output_name, "_reshape");
279279
} else if (needs_int64_cast) {
280-
gather_output_name += "_cast_int64_aux";
280+
gather_output_name = utils::GetUniqueName(output_name, "_cast_int64");
281281
}
282282

283283
Qnn_TensorType_t tensor_type = (!reshape_required && is_graph_output)
@@ -289,7 +289,7 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model
289289
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(gather_output_tensor)),
290290
"Failed to add GatherND output tensor.");
291291

292-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
292+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
293293
QNN_OP_PACKAGE_NAME_QTI_AISW,
294294
QNN_OP_GATHER_ND,
295295
std::move(input_names),
@@ -307,10 +307,10 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model
307307
std::string node_output_name = output_name;
308308
if (needs_int64_cast) {
309309
// If needs_int64 is true, the output name should be the input name of the cast node
310-
node_output_name = output_name + "_cast_int64_aux";
310+
node_output_name = utils::GetUniqueName(output_name, "_cast_int64");
311311
}
312312

313-
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(output_name,
313+
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit, QNN_OP_RESHAPE),
314314
QNN_OP_PACKAGE_NAME_QTI_AISW,
315315
QNN_OP_RESHAPE,
316316
{gather_output_name},
@@ -341,4 +341,4 @@ void CreateGatherNDOpBuilder(const std::string& op_type, OpBuilderRegistrations&
341341
}
342342

343343
} // namespace qnn
344-
} // namespace onnxruntime
344+
} // namespace onnxruntime

0 commit comments

Comments
 (0)