From bdd9ef371c56ad0976aeaf8bf3ef36667ec7c934 Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 14:35:51 -0700 Subject: [PATCH 01/12] add instruction to enable new Ops for QNN EP --- .../QNN-ExecutionProvider.md | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 66d311ecb06e3..e5352f47ae702 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -124,8 +124,13 @@ Alternatively to setting profiling_level at compile time, profiling can be enabl |`"enable_htp_fp16_precision"`|Description [Example](https://github.com/microsoft/onnxruntime-inference-examples/tree/main/c_cxx/QNN_EP/mobilenetv2_classification)| |---|---| -|'0'|default.| -|'1'|Enable the float32 model to be inferenced with fp16 precision.| +|'0'|disabled. Inferenced with fp32 precision if it's fp32 model.| +|'1'|default. Enable the float32 model to be inferenced with fp16 precision.| + +|`"offload_graph_io_quantization"`|Description| +|---|---| +|'0'|default. Disabled. QNN EP will handle quantization and dequantization of graph I/O.| +|'1'|Enabled. Offload quantization and dequantization of graph I/O to CPU EP.| ## Supported ONNX operators @@ -502,3 +507,20 @@ sess = ort.InferenceSession(model_path, providers=['QNNExecutionProvider'], prov ## Error handling ### HTP SubSystem Restart - [SSR](https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50/htp_backend.html#subsystem-restart-ssr-) QNN EP returns StatusCode::ENGINE_ERROR regarding QNN HTP SSR issue. Uppper level framework/application should recreate Onnxruntime session if this error detected during session run. + + +## Add new operator support in QNN EP +To enable new operator support in EP, areas to visit: +1. QDQ script support this Op? +2. Onnxruntime QDQ node unit support this Op? +3. Is it layout sensitive operator? +3.1 Registered in LayoutTransformer? +https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168 +3.2 NHWC op schema registered? +Example error message: +::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op +Example PR: https://github.com/microsoft/onnxruntime/pull/15278 + +Example PRs to enable new operators: +Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) +Layout sensitive operator. [Add InstanceNormalization operator to QNN EP])(https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From 491982715395fcdc0e66ccb50cafb725c4852c42 Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 15:59:59 -0700 Subject: [PATCH 02/12] add code examples --- docs/execution-providers/QNN-ExecutionProvider.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index e5352f47ae702..2e8a6f3244744 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -511,11 +511,11 @@ QNN EP returns StatusCode::ENGINE_ERROR regarding QNN HTP SSR issue. Uppper leve ## Add new operator support in QNN EP To enable new operator support in EP, areas to visit: -1. QDQ script support this Op? -2. Onnxruntime QDQ node unit support this Op? +1. QDQ script support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-b1ea073c326fef46054382117c256f106d39bd7c34539d44c6e6d9e9eacc059c) +2. Onnxruntime QDQ node unit support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-ce0281aaf63e03ecadd592240e41f18742bf8eb095b3725c0e55e589c890946f) 3. Is it layout sensitive operator? 3.1 Registered in LayoutTransformer? -https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168 +[code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) 3.2 NHWC op schema registered? Example error message: ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op From 115e71e5eca4f3ee019b74e496ad0b15afc92baf Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:03:36 -0700 Subject: [PATCH 03/12] format fix --- docs/execution-providers/QNN-ExecutionProvider.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 2e8a6f3244744..7f9ec78d2be5f 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -519,8 +519,8 @@ To enable new operator support in EP, areas to visit: 3.2 NHWC op schema registered? Example error message: ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op -Example PR: https://github.com/microsoft/onnxruntime/pull/15278 +[Example PR](https://github.com/microsoft/onnxruntime/pull/15278) Example PRs to enable new operators: Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) -Layout sensitive operator. [Add InstanceNormalization operator to QNN EP])(https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file +Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From 1f2b4c03f5d303fa9c50d9b2b8b38fc7e5680ca5 Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:17:28 -0700 Subject: [PATCH 04/12] format --- .../execution-providers/QNN-ExecutionProvider.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 7f9ec78d2be5f..f225e5a414262 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -514,13 +514,13 @@ To enable new operator support in EP, areas to visit: 1. QDQ script support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-b1ea073c326fef46054382117c256f106d39bd7c34539d44c6e6d9e9eacc059c) 2. Onnxruntime QDQ node unit support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-ce0281aaf63e03ecadd592240e41f18742bf8eb095b3725c0e55e589c890946f) 3. Is it layout sensitive operator? -3.1 Registered in LayoutTransformer? -[code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) -3.2 NHWC op schema registered? -Example error message: -::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op -[Example PR](https://github.com/microsoft/onnxruntime/pull/15278) + 3.1 Registered in LayoutTransformer? + [code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) + 3.2 NHWC op schema registered? + Example error message: + ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op + [Example PR](https://github.com/microsoft/onnxruntime/pull/15278) Example PRs to enable new operators: -Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) -Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file + Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) + Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From b4b89604628b70be640466c89097ca483f5674e1 Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:21:21 -0700 Subject: [PATCH 05/12] format --- docs/execution-providers/QNN-ExecutionProvider.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index f225e5a414262..0edf809b04a15 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -514,8 +514,10 @@ To enable new operator support in EP, areas to visit: 1. QDQ script support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-b1ea073c326fef46054382117c256f106d39bd7c34539d44c6e6d9e9eacc059c) 2. Onnxruntime QDQ node unit support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-ce0281aaf63e03ecadd592240e41f18742bf8eb095b3725c0e55e589c890946f) 3. Is it layout sensitive operator? + 3.1 Registered in LayoutTransformer? [code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) + 3.2 NHWC op schema registered? Example error message: ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op @@ -523,4 +525,5 @@ To enable new operator support in EP, areas to visit: Example PRs to enable new operators: Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) + Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From dfbb3754abb60930a543bb8a571faa0f29626063 Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:25:13 -0700 Subject: [PATCH 06/12] format --- docs/execution-providers/QNN-ExecutionProvider.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 0edf809b04a15..b86141f8002a0 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -514,16 +514,14 @@ To enable new operator support in EP, areas to visit: 1. QDQ script support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-b1ea073c326fef46054382117c256f106d39bd7c34539d44c6e6d9e9eacc059c) 2. Onnxruntime QDQ node unit support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-ce0281aaf63e03ecadd592240e41f18742bf8eb095b3725c0e55e589c890946f) 3. Is it layout sensitive operator? - 3.1 Registered in LayoutTransformer? - [code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) - + [code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) 3.2 NHWC op schema registered? - Example error message: - ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op - [Example PR](https://github.com/microsoft/onnxruntime/pull/15278) + Example error message: ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op + [Example PR](https://github.com/microsoft/onnxruntime/pull/15278) + Example PRs to enable new operators: Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) - + Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From bf87ef47afadbeca7c3edef35355d8c1080699fb Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:32:10 -0700 Subject: [PATCH 07/12] format --- .../QNN-ExecutionProvider.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index b86141f8002a0..b7a417edb9865 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -511,17 +511,16 @@ QNN EP returns StatusCode::ENGINE_ERROR regarding QNN HTP SSR issue. Uppper leve ## Add new operator support in QNN EP To enable new operator support in EP, areas to visit: -1. QDQ script support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-b1ea073c326fef46054382117c256f106d39bd7c34539d44c6e6d9e9eacc059c) -2. Onnxruntime QDQ node unit support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-ce0281aaf63e03ecadd592240e41f18742bf8eb095b3725c0e55e589c890946f) -3. Is it layout sensitive operator? - 3.1 Registered in LayoutTransformer? +- QDQ script support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-b1ea073c326fef46054382117c256f106d39bd7c34539d44c6e6d9e9eacc059c) +- Onnxruntime QDQ node unit support this Op? [code example](https://github.com/microsoft/onnxruntime/pull/14867/files#diff-ce0281aaf63e03ecadd592240e41f18742bf8eb095b3725c0e55e589c890946f) +- Is it layout sensitive operator? + - Registered in LayoutTransformer? [code example](https://github.com/microsoft/onnxruntime/blob/6d464748ba7fed2275ecba3a7406298cabc93438/onnxruntime/core/optimizer/transpose_optimizer/transpose_optimizer.cc#L2168) - 3.2 NHWC op schema registered? + - NHWC op schema registered? Example error message: ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op [Example PR](https://github.com/microsoft/onnxruntime/pull/15278) +###Example PRs to enable new operators: +- Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) -Example PRs to enable new operators: - Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) - - Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file +- Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From 4a62f2c77d87cda6cb7751fb44b059db6567f26a Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:34:11 -0700 Subject: [PATCH 08/12] format --- .../QNN-ExecutionProvider.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index b7a417edb9865..6a40e6879311a 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -465,18 +465,18 @@ If user creates the QNN context binary .bin file weight sharing from QNN toolcha ### Inference with QNN resource sharing workflow OnnxRuntime inference session need to have resource sharing enabled (set session option ep.share_ep_contexts to 1) to use the dumped Qnn context model with weight sharing enabled. 1. Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model1.onnx_ctx.onnx model. - 1.1 The session loads the model1.onnx_ctx.onnx model. - 1.2 The shared place is empty. - 1.3 EPContext node1 in model1.onnx_ctx.onnx specifies that it uses Qnn_graph1 - 1.4 QNN EP loads the qnn_ctx.bin and deserialize the binary to get Qnn graphs (Qnn_graph1, Qnn_graph2). - 1.5 Uses Qnn_graph1 for this OnnxRuntime session. - 1.6 Put the Qnn_graph2 into the shared place. + 1.1 The session loads the model1.onnx_ctx.onnx model. + 1.2 The shared place is empty. + 1.3 EPContext node1 in model1.onnx_ctx.onnx specifies that it uses Qnn_graph1 + 1.4 QNN EP loads the qnn_ctx.bin and deserialize the binary to get Qnn graphs (Qnn_graph1, Qnn_graph2). + 1.5 Uses Qnn_graph1 for this OnnxRuntime session. + 1.6 Put the Qnn_graph2 into the shared place. 2. Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model2.onnx_ctx.onnx model. - 2.1 The session loads the model2.onnx_ctx.onnx model. - 2.2 The EPContext node2 in model2.onnx_ctx.onnx specifies that it uses Qnn_graph2. - 2.3 The shared place has Qnn_graph2. - 2.4 QNN EP skips loading qnn_ctx.bin since it gets what it wants from the shared place. - 2.5 Uses Qnn_graph2 from the shared place for this session. + 2.1 The session loads the model2.onnx_ctx.onnx model. + 2.2 The EPContext node2 in model2.onnx_ctx.onnx specifies that it uses Qnn_graph2. + 2.3 The shared place has Qnn_graph2. + 2.4 QNN EP skips loading qnn_ctx.bin since it gets what it wants from the shared place. + 2.5 Uses Qnn_graph2 from the shared place for this session. 3. To avoid issues while existing execution, user needs to destroy the 2nd session first, then the 1st session. [Code example](https://github.com/microsoft/onnxruntime/blob/291a5352b27ded5714e5748b381f2efb88f28fb9/onnxruntime/test/providers/qnn/qnn_ep_context_test.cc#L979-L992). @@ -520,7 +520,7 @@ To enable new operator support in EP, areas to visit: Example error message: ::operator ()] Model face_det_qdq failed to load:Fatal error: com.ms.internal.nhwc:BatchNormalization(9) is not a registered function/op [Example PR](https://github.com/microsoft/onnxruntime/pull/15278) -###Example PRs to enable new operators: +### Example PRs to enable new operators: - Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) - Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file From f61ec23206a13ad4f9625eb70e3d865f7bcf473c Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:36:37 -0700 Subject: [PATCH 09/12] format --- .../QNN-ExecutionProvider.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 6a40e6879311a..5bcfceee70d39 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -464,20 +464,20 @@ If user creates the QNN context binary .bin file weight sharing from QNN toolcha ### Inference with QNN resource sharing workflow OnnxRuntime inference session need to have resource sharing enabled (set session option ep.share_ep_contexts to 1) to use the dumped Qnn context model with weight sharing enabled. -1. Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model1.onnx_ctx.onnx model. - 1.1 The session loads the model1.onnx_ctx.onnx model. - 1.2 The shared place is empty. - 1.3 EPContext node1 in model1.onnx_ctx.onnx specifies that it uses Qnn_graph1 - 1.4 QNN EP loads the qnn_ctx.bin and deserialize the binary to get Qnn graphs (Qnn_graph1, Qnn_graph2). - 1.5 Uses Qnn_graph1 for this OnnxRuntime session. - 1.6 Put the Qnn_graph2 into the shared place. -2. Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model2.onnx_ctx.onnx model. - 2.1 The session loads the model2.onnx_ctx.onnx model. - 2.2 The EPContext node2 in model2.onnx_ctx.onnx specifies that it uses Qnn_graph2. - 2.3 The shared place has Qnn_graph2. - 2.4 QNN EP skips loading qnn_ctx.bin since it gets what it wants from the shared place. - 2.5 Uses Qnn_graph2 from the shared place for this session. -3. To avoid issues while existing execution, user needs to destroy the 2nd session first, then the 1st session. +- Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model1.onnx_ctx.onnx model. + - The session loads the model1.onnx_ctx.onnx model. + - The shared place is empty. + - EPContext node1 in model1.onnx_ctx.onnx specifies that it uses Qnn_graph1 + - QNN EP loads the qnn_ctx.bin and deserialize the binary to get Qnn graphs (Qnn_graph1, Qnn_graph2). + - Uses Qnn_graph1 for this OnnxRuntime session. + - Put the Qnn_graph2 into the shared place. +- Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model2.onnx_ctx.onnx model. + - The session loads the model2.onnx_ctx.onnx model. + - The EPContext node2 in model2.onnx_ctx.onnx specifies that it uses Qnn_graph2. + - The shared place has Qnn_graph2. + - QNN EP skips loading qnn_ctx.bin since it gets what it wants from the shared place. + - Uses Qnn_graph2 from the shared place for this session. +- To avoid issues while existing execution, user needs to destroy the 2nd session first, then the 1st session. [Code example](https://github.com/microsoft/onnxruntime/blob/291a5352b27ded5714e5748b381f2efb88f28fb9/onnxruntime/test/providers/qnn/qnn_ep_context_test.cc#L979-L992). From b9f2b0b96a5a5eaef4df72b22a0a630eab67eb61 Mon Sep 17 00:00:00 2001 From: Hector Li Date: Tue, 29 Oct 2024 16:38:22 -0700 Subject: [PATCH 10/12] fix typo --- docs/execution-providers/QNN-ExecutionProvider.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 5bcfceee70d39..68e86141b9ba6 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -464,14 +464,14 @@ If user creates the QNN context binary .bin file weight sharing from QNN toolcha ### Inference with QNN resource sharing workflow OnnxRuntime inference session need to have resource sharing enabled (set session option ep.share_ep_contexts to 1) to use the dumped Qnn context model with weight sharing enabled. -- Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model1.onnx_ctx.onnx model. +- Create OnnxRuntime inference session with ep.share_ep_contexts=1, loads the model1.onnx_ctx.onnx model. - The session loads the model1.onnx_ctx.onnx model. - The shared place is empty. - EPContext node1 in model1.onnx_ctx.onnx specifies that it uses Qnn_graph1 - QNN EP loads the qnn_ctx.bin and deserialize the binary to get Qnn graphs (Qnn_graph1, Qnn_graph2). - Uses Qnn_graph1 for this OnnxRuntime session. - Put the Qnn_graph2 into the shared place. -- Create OnnxRuuntime inference session with ep.share_ep_contexts=1, loads the model2.onnx_ctx.onnx model. +- Create OnnxRuntime inference session with ep.share_ep_contexts=1, loads the model2.onnx_ctx.onnx model. - The session loads the model2.onnx_ctx.onnx model. - The EPContext node2 in model2.onnx_ctx.onnx specifies that it uses Qnn_graph2. - The shared place has Qnn_graph2. From 019bde6f7220135944e05098247fddab9b00974b Mon Sep 17 00:00:00 2001 From: Hector Li Date: Thu, 31 Oct 2024 15:00:40 -0700 Subject: [PATCH 11/12] add mixed precision part --- .../QNN-ExecutionProvider.md | 47 +++++++++++++++++- images/quantization_mixed_precision_1.png | Bin 0 -> 70450 bytes images/quantization_mixed_precision_2.png | Bin 0 -> 43316 bytes 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 images/quantization_mixed_precision_1.png create mode 100644 images/quantization_mixed_precision_2.png diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index 68e86141b9ba6..eac6b8cf656c8 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -523,4 +523,49 @@ To enable new operator support in EP, areas to visit: ### Example PRs to enable new operators: - Non-layout sensitive operator. [Enable Hardsigmoid for QNN EP using SDK support direct support](https://github.com/microsoft/onnxruntime/pull/20956) -- Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) \ No newline at end of file +- Layout sensitive operator. [Add InstanceNormalization operator to QNN EP](https://github.com/microsoft/onnxruntime/pull/14867) + + +## Mixed precision support +The following figure demonstrates an example of mixed precision model. +

mixed precision model

+A mixed precision QDQ model consists of regions with different activation/weight quantization data types. The boundary between regions converts between activation quantization data types (e.g., uint8 to uint16) using a DQ to Q sequence. + +The ability to specify regions with different quantization data types enables exploring the tradeoffs between accuracy and latency. A higher integer precision may improve accuracy at the expense of latency, so selectively promoting certain regions to a higher precision can aid in achieving a desirable balance in key metrics. + +The following figure shows a model with a region that has been promoted to 16-bit from the default 8-bit activation type. +

mixed precision layers

+ +This model is quantized to uint8 precision, but tensor "Op4_out" is quantized to 16-bit. This can be achieved by specifying the following initial tensor quantization overrides: + +``` +# Op4_out could be an inaccurate tensor that should be upgraded to 16bit +initial_overrides = {"Op4_out": [{"quant_type": QuantType.QUInt16}]} + +qnn_config = get_qnn_qdq_config( + float_model_path, + data_reader, + activation_type=QuantType.QUInt8, + weight_type=QuantType.QUInt8, + init_overrides=initial_overrides, # These initial overrides will be "fixed" +) +``` + +The above snippet generates the following "fixed" overrides (get via qnn_config.extra_options["TensorQuantOverrides"]): + +``` +overrides = { + “Op2_out”: [{“quant_type”: QUInt8, “convert”: {“quant_type”: QUInt16, “recv_nodes”: {“Op4”}}}], + “Op3_out”: [{“quant_type”: QUInt8, “convert”: {“quant_type”: QUInt16, “recv_nodes”: {“Op5”}}}], + “Op4_out”: [{“quant_type”: QUInt16}], + “Op5_out”: [{“quant_type”: QUInt16, “convert”: {“quant_type”: QUInt8, “recv_nodes”: {“Op6”}}}] +} +``` + +After the override, the model works like this: + +- Op2’s output is consumed by Op4, Op7, and Op8. Op4 consumes the converted u16 type, while Op7 and Op8 consume the original u8 type. +- Op3’s output is converted from u8 to u16. Op5 consumes the converted u16 type. +- Op4’s output is just u16 (not converted). +- Op5’s output is converted from u16 to u8. Op6 consumes the u8 type. + diff --git a/images/quantization_mixed_precision_1.png b/images/quantization_mixed_precision_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0f945a09acb68623895c0d37acbd4d0320140d GIT binary patch literal 70450 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 ODDPw$n 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 literal 0 HcmV?d00001 diff --git a/images/quantization_mixed_precision_2.png b/images/quantization_mixed_precision_2.png new file mode 100644 index 0000000000000000000000000000000000000000..937eb75bfb5435d483c8f785fea468be8ddf029b GIT binary patch literal 43316 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

ISVh)nGwy-UAq*xe(0G6(-3uv4MM?}vS*Qx1 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 literal 0 HcmV?d00001 From 4b4025ff84a14ff0388d1e6fcafb753c76b6644f Mon Sep 17 00:00:00 2001 From: Hector Li Date: Thu, 31 Oct 2024 15:02:46 -0700 Subject: [PATCH 12/12] adjust image size --- docs/execution-providers/QNN-ExecutionProvider.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/execution-providers/QNN-ExecutionProvider.md b/docs/execution-providers/QNN-ExecutionProvider.md index eac6b8cf656c8..45b192abf27ab 100644 --- a/docs/execution-providers/QNN-ExecutionProvider.md +++ b/docs/execution-providers/QNN-ExecutionProvider.md @@ -534,7 +534,7 @@ A mixed precision QDQ model consists of regions with different activation/weight The ability to specify regions with different quantization data types enables exploring the tradeoffs between accuracy and latency. A higher integer precision may improve accuracy at the expense of latency, so selectively promoting certain regions to a higher precision can aid in achieving a desirable balance in key metrics. The following figure shows a model with a region that has been promoted to 16-bit from the default 8-bit activation type. -

mixed precision layers

+

mixed precision layers

This model is quantized to uint8 precision, but tensor "Op4_out" is quantized to 16-bit. This can be achieved by specifying the following initial tensor quantization overrides: