已合并
9.0.0合入英文图片 #8063
yanglu-1创建于 7月29日
9.0.0合入英文图片 #8063
已合并
yanglu-1创建于 7月29日
从已删除 :9.0.0合入到cann/ops-nn9.0.0
共 64 个文件变更+39-40
@@ -13,7 +13,7 @@ Developer contribution scenarios mainly include:
13 13 
14The operator development contribution process is as follows:14The operator development contribution process is as follows:
15 15 
16-<!--[Operator Development Contribution Process](./docs/en/figures/operator_development_contribution_process.png "Operator Development Contribution Process Diagram")-->16+![Operator Development Contribution Process](./docs/en/figures/Operator_development_contribution_process.png "Operator Development Contribution Process Diagram")
17 17 
18If you have a brand new operator that you want to design and implement based on NPU, we welcome you to propose your ideas and design solutions in an Issue. The complete contribution process is as follows:18If you have a brand new operator that you want to design and implement based on NPU, we welcome you to propose your ideas and design solutions in an Issue. The complete contribution process is as follows:
19 19 
@@ -13,7 +13,7 @@ This guide aims to help you quickly get started with CANN and the `ops-nn` opera
13 13 
14The basic process of operator development and contribution is shown in the figure below. We welcome and encourage you to contribute operators in the community to jointly enrich the project ecosystem.14The basic process of operator development and contribution is shown in the figure below. We welcome and encourage you to contribute operators in the community to jointly enrich the project ecosystem.
15 15 
16-<!--![Operator Development Contribution Process](./docs/en/figures/operator_development_contribution_process.png "Operator Development Contribution Process Diagram")-->16+![Operator Development Contribution Process](./docs/en/figures/Operator_development_contribution_process.png "Operator Development Contribution Process Diagram")
17 17 
18To help you quickly understand the entire process of operator development, we will use the **AddExample** operator as a practical object. Its source files are located in `ops-nn/examples/add_example`. The specific operation steps are as follows:18To help you quickly understand the entire process of operator development, we will use the **AddExample** operator as a practical object. Its source files are located in `ops-nn/examples/add_example`. The specific operation steps are as follows:
19 19 
@@ -31,11 +31,11 @@ For users without an environment, you can directly use the WebIDE development pl
31 31 
321. Enter the ops-nn open-source project and click the "`Cloud Development`" button. Log in with a certified Huawei Cloud account. If you have not registered or certified, please register and certify according to the page prompts.321. Enter the ops-nn open-source project and click the "`Cloud Development`" button. Log in with a certified Huawei Cloud account. If you have not registered or certified, please register and certify according to the page prompts.
33 33 
34- <!--<img src="docs/en/figures/cloudIDE.png" alt="Cloud Platform" width="750px" height="90px">-->34+ <img src="docs/en/figures/cloudIDE.png" alt="Cloud Platform" width="750px" height="90px">
35 35 
362. Create and start the cloud development environment according to the page prompts, and click "`Connect > WebIDE`" to enter the operator one-stop development platform. The resources of the open-source project are in the `/mnt/workspace` directory by default.362. Create and start the cloud development environment according to the page prompts, and click "`Connect > WebIDE`" to enter the operator one-stop development platform. The resources of the open-source project are in the `/mnt/workspace` directory by default.
37 37 
38- <!--<img src="docs/en/figures/webIDE.png" alt="Cloud Platform" width="1000px" height="150px">-->38+ <img src="docs/en/figures/webIDE.png" alt="Cloud Platform" width="1000px" height="150px">
39 39 
403. Check whether the environment is complete.403. Check whether the environment is complete.
41 41 
@@ -12,7 +12,7 @@
12 12 
13ops-nn is a high-level operator library that provides neural network computing capabilities in the [CANN](https://hiascend.com/software/cann) (Compute Architecture for Neural Networks) operator library, including matmul, activation, and other types of operators. The operator library architecture is shown below:13ops-nn is a high-level operator library that provides neural network computing capabilities in the [CANN](https://hiascend.com/software/cann) (Compute Architecture for Neural Networks) operator library, including matmul, activation, and other types of operators. The operator library architecture is shown below:
14 14 
15-<!--<img src="docs/en/figures/architecture.png" alt="Architecture Diagram" width="700px" height="320px">-->15+<img src="docs/en/figures/architecture.png" alt="Architecture Diagram" width="700px" height="320px">
16 16 
17## 📝Version Compatibility17## 📝Version Compatibility
18 18 
@@ -20,32 +20,32 @@ Quantization mode (also known as quantization granularity) refers to using diffe
20 20 
21 Assuming the left matrix shape is (m, k) and the right matrix shape is (k, n), where k is the reduce axis, the generated quantization parameter shape is (1, ).21 Assuming the left matrix shape is (m, k) and the right matrix shape is (k, n), where k is the reduce axis, the generated quantization parameter shape is (1, ).
22 22 
23- <!--![Schematic](../figures/pertensor量化.png)-->23+ ![Schematic](../figures/pertensor_quantization.png)
24 24 
25- perchannel quantization (abbreviated as C quantization): The quantization object is the right matrix, and each channel uses independent quantization parameters.25- perchannel quantization (abbreviated as C quantization): The quantization object is the right matrix, and each channel uses independent quantization parameters.
26 26 
27 Assuming the right matrix shape is (k, n), where k is the reduce axis, the generated quantization parameter shape is (n, ).27 Assuming the right matrix shape is (k, n), where k is the reduce axis, the generated quantization parameter shape is (n, ).
28 28 
29- <!--![Schematic](../figures/perchannel量化.png)-->29+ ![Schematic](../figures/perchannel_quantization.png)
30 30 
31- pertoken quantization (abbreviated as K quantization): The quantization object is the left matrix, and each token uses independent quantization parameters.31- pertoken quantization (abbreviated as K quantization): The quantization object is the left matrix, and each token uses independent quantization parameters.
32 32 
33 Assuming the left matrix shape is (m, k), where k is the reduce axis, the generated quantization parameter shape is (m, ).33 Assuming the left matrix shape is (m, k), where k is the reduce axis, the generated quantization parameter shape is (m, ).
34 34 
35- <!--![Schematic](../figures/pertoken量化.png)-->35+ ![Schematic](../figures/pertoken_quantization.png)
36 36 
37- pergroup quantization (abbreviated as G quantization): The quantization object can be either the left matrix or the right matrix. Data is grouped on the reduce axis, and each group uses independent quantization parameters.37- pergroup quantization (abbreviated as G quantization): The quantization object can be either the left matrix or the right matrix. Data is grouped on the reduce axis, and each group uses independent quantization parameters.
38 - Assuming the left matrix shape is (m, k), where k is the reduce axis, grouping on the k axis with group size gs, the generated quantization parameter shape is (m, k/gs).38 - Assuming the left matrix shape is (m, k), where k is the reduce axis, grouping on the k axis with group size gs, the generated quantization parameter shape is (m, k/gs).
39 - Assuming the right matrix shape is (k, n), where k is the reduce axis, grouping on the k axis with group size gs, the generated quantization parameter shape is (k/gs, n).39 - Assuming the right matrix shape is (k, n), where k is the reduce axis, grouping on the k axis with group size gs, the generated quantization parameter shape is (k/gs, n).
40 40 
41- <!--![Schematic](../figures/pergroup量化.png)-->41+ ![Schematic](../figures/pergroup_quantization.png)
42 42 
43- perblock quantization (abbreviated as B quantization): The quantization object can be either the left matrix or the right matrix. Data is blocked on all axes, and each block uses independent quantization parameters.43- perblock quantization (abbreviated as B quantization): The quantization object can be either the left matrix or the right matrix. Data is blocked on all axes, and each block uses independent quantization parameters.
44 44 
45 - Assuming the left matrix shape is (m, k), where k is the reduce axis, grouping data by (bs, bs) blocks on the m and k axes respectively, where bs is block size, the generated quantization parameter shape is (m/bs, k/bs).45 - Assuming the left matrix shape is (m, k), where k is the reduce axis, grouping data by (bs, bs) blocks on the m and k axes respectively, where bs is block size, the generated quantization parameter shape is (m/bs, k/bs).
46 - Assuming the right matrix shape is (k, n), where k is the reduce axis, grouping data by (bs, bs) blocks on the k and n axes respectively, where bs is block size, the generated quantization parameter shape is (k/bs, n/bs).46 - Assuming the right matrix shape is (k, n), where k is the reduce axis, grouping data by (bs, bs) blocks on the k and n axes respectively, where bs is block size, the generated quantization parameter shape is (k/bs, n/bs).
47 47 
48- <!--![Schematic](../figures/perblock量化.png)-->48+ ![Schematic](../figures/perblock_quantization.png)
49 49 
50## Common Combined Quantization50## Common Combined Quantization
51 51 
@@ -50,11 +50,11 @@ For users without an environment, you can directly use the WebIDE development pl
50 50 
511. Enter the open source project and click the "`Cloud Development`" button. Log in with a certified Huawei Cloud account. If you have not registered or certified, please register and certify according to the page prompts.511. Enter the open source project and click the "`Cloud Development`" button. Log in with a certified Huawei Cloud account. If you have not registered or certified, please register and certify according to the page prompts.
52 52 
53- <!--<img src="../figures/cloudIDE.png" alt="Cloud Platform" width="750px" height="90px">-->53+ <img src="../figures/cloudIDE.png" alt="Cloud Platform" width="750px" height="90px">
54 54 
552. Create and start the cloud development environment according to the page prompts. Click "`Connect > WebIDE`" to enter the operator one-stop development platform. The resources of the open source project are in the `/mnt/workspace` directory by default.552. Create and start the cloud development environment according to the page prompts. Click "`Connect > WebIDE`" to enter the operator one-stop development platform. The resources of the open source project are in the `/mnt/workspace` directory by default.
56 56 
57- <!--<img src="../figures/webIDE.png" alt="Cloud Platform" width="1000px" height="150px">-->57+ <img src="../figures/webIDE.png" alt="Cloud Platform" width="1000px" height="150px">
58 58 
59### Using Docker Deployment59### Using Docker Deployment
60 60 
@@ -18,11 +18,11 @@ This section introduces common sparseModes and their corresponding scenario desc
18 18 
19The working principle of attenMask is to mask the value of the query (Q) and key (K) transpose matrix product at the position where Mask is True, as shown below:19The working principle of attenMask is to mask the value of the query (Q) and key (K) transpose matrix product at the position where Mask is True, as shown below:
20 20 
21-<!--![Schematic](../figures/QK转置图.png)-->21+![Schematic](../figures/QK_transpose_diagram.png)
22 22 
23The $QK^T$ matrix will be masked at the position where attenMask is True, with the following effect:23The $QK^T$ matrix will be masked at the position where attenMask is True, with the following effect:
24 24 
25-<!--![Schematic](../figures/遮挡QK图.png)-->25+![Schematic](../figures/masked_QK_diagram.png)
26 26 
27## sparseMode=027## sparseMode=0
28 28 
@@ -30,43 +30,43 @@ When sparseMode is 0, it represents the defaultMask mode.
30 30 
31- No mask passed: If attenMask is not passed, no mask operation is performed. attenMask takes the value None, and preTokens and nextTokens values are ignored. The Masked $QK^T$ matrix is shown below:31- No mask passed: If attenMask is not passed, no mask operation is performed. attenMask takes the value None, and preTokens and nextTokens values are ignored. The Masked $QK^T$ matrix is shown below:
32 32 
33- <!--![Schematic](../figures/sparsemode为0遮挡矩阵.png)-->33+ ![Schematic](../figures/sparsemode_0_masked_matrix.png)
34 34 
35- nextTokens is 0, preTokens is greater than or equal to Sq, indicating a causal scenario sparse. attenMask should pass a lower triangular matrix. At this time, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ matrix is shown below:35- nextTokens is 0, preTokens is greater than or equal to Sq, indicating a causal scenario sparse. attenMask should pass a lower triangular matrix. At this time, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ matrix is shown below:
36 36 
37- <!--![Schematic](../figures/sparsemode为0遮挡矩阵1.png)--> 37+ ![Schematic](../figures/sparsemode_0_masked_matrix_1.png)
38 38 
39 attenMask should pass a lower triangular matrix, as shown below:39 attenMask should pass a lower triangular matrix, as shown below:
40- 40+ 
41- <!--![Schematic](../figures/attenmask下三角.png)-->41+ ![Schematic](../figures/attenmask_lower_triangle.png)
42 42 
43- preTokens is less than Sq, nextTokens is less than Skv, and both are greater than or equal to 0, indicating a band scenario. At this time, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ matrix is shown below:43- preTokens is less than Sq, nextTokens is less than Skv, and both are greater than or equal to 0, indicating a band scenario. At this time, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ matrix is shown below:
44 44 
45- <!--![Schematic](../figures/sparsemode为0遮挡矩阵2.png)--> 45+ ![Schematic](../figures/sparsemode_0_masked_matrix_2.png)
46- 46+ 
47 attenMask should pass a band-shaped matrix, as shown below:47 attenMask should pass a band-shaped matrix, as shown below:
48 48 
49- <!--![Schematic](../figures/attenmask_band形状矩阵.png)-->49+ ![Schematic](../figures/attenmask_band_matrix.png)
50 50 
51- nextTokens is negative. Taking preTokens=9, nextTokens=-3 as an example, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ is shown below:51- nextTokens is negative. Taking preTokens=9, nextTokens=-3 as an example, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ is shown below:
52 52 
53 **Note: When nextTokens is negative, preTokens must be greater than or equal to the absolute value of nextTokens, and the absolute value of nextTokens must be less than Skv.**53 **Note: When nextTokens is negative, preTokens must be greater than or equal to the absolute value of nextTokens, and the absolute value of nextTokens must be less than Skv.**
54- 54+ 
55- <!--![Schematic](../figures/sparsemode为0遮挡矩阵3.png)--> 55+ ![Schematic](../figures/sparsemode_0_masked_matrix_3.png)
56 56 
57- preTokens is negative. Taking nextTokens=7, preTokens=-3 as an example, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ is shown below:57- preTokens is negative. Taking nextTokens=7, preTokens=-3 as an example, the part between preTokens and nextTokens needs to be calculated. The Masked $QK^T$ is shown below:
58 58 
59 **Note: When preTokens is negative, nextTokens must be greater than or equal to the absolute value of preTokens, and the absolute value of preTokens must be less than Sq.**59 **Note: When preTokens is negative, nextTokens must be greater than or equal to the absolute value of preTokens, and the absolute value of preTokens must be less than Sq.**
60 60 
61- <!--![Schematic](../figures/sparsemode为0遮挡矩阵4.png)--> 61+ ![Schematic](../figures/sparsemode_0_masked_matrix_4.png)
62- 62+ 
63## sparseMode=163## sparseMode=1
64 64 
65When sparseMode is 1, it represents allMask, that is, passing the complete attenMask matrix.65When sparseMode is 1, it represents allMask, that is, passing the complete attenMask matrix.
66 66 
67In this scenario, nextTokens and preTokens values are ignored. The Masked $QK^T$ matrix is shown below:67In this scenario, nextTokens and preTokens values are ignored. The Masked $QK^T$ matrix is shown below:
68 68 
69-<!--![Schematic](../figures/sparsemode为1遮挡矩阵.png)--> 69+![Schematic](../figures/sparsemode_1_masked_matrix.png)
70 70 
71## sparseMode=271## sparseMode=2
72 72 
@@ -74,11 +74,11 @@ When sparseMode is 2, it represents the leftUpCausal mode mask, corresponding to
74 74 
75In this scenario, preTokens and nextTokens values are ignored. The Masked $QK^T$ matrix is shown below:75In this scenario, preTokens and nextTokens values are ignored. The Masked $QK^T$ matrix is shown below:
76 76 
77-<!--![Schematic](../figures/sparsemode为2遮挡矩阵.png)--> 77+![Schematic](../figures/sparsemode_2_masked_matrix.png)
78 78 
79The passed attenMask is an optimized compressed lower triangular matrix (2048\*2048). The compressed lower triangular matrix is shown below (same below):79The passed attenMask is an optimized compressed lower triangular matrix (2048\*2048). The compressed lower triangular matrix is shown below (same below):
80 80 
81-<!--![Schematic](../figures/attenmask压缩下三角.png) --> 81+![Schematic](../figures/attenmask_compressed_lower_triangle.png)
82 82 
83## sparseMode=383## sparseMode=3
84 84 
@@ -86,13 +86,13 @@ When sparseMode is 3, it represents the rightDownCausal mode mask, corresponding
86 86 
87In this scenario, preTokens and nextTokens values are ignored. attenMask is an optimized compressed lower triangular matrix (2048\*2048). The Masked $QK^T$ matrix is shown below:87In this scenario, preTokens and nextTokens values are ignored. attenMask is an optimized compressed lower triangular matrix (2048\*2048). The Masked $QK^T$ matrix is shown below:
88 88 
89-<!--![Schematic](../figures/sparsemode为3遮挡矩阵.png)--> 89+![Schematic](../figures/sparsemode_3_masked_matrix.png)
90 90 
91## sparseMode=491## sparseMode=4
92 92 
93When sparseMode is 4, it represents the band scenario, that is, calculating the part between preTokens and nextTokens. The parameter starting point is the lower-right corner, and there must be an intersection between preTokens and nextTokens. attenMask is an optimized compressed lower triangular matrix (2048\*2048). The Masked $QK^T$ matrix is shown below:93When sparseMode is 4, it represents the band scenario, that is, calculating the part between preTokens and nextTokens. The parameter starting point is the lower-right corner, and there must be an intersection between preTokens and nextTokens. attenMask is an optimized compressed lower triangular matrix (2048\*2048). The Masked $QK^T$ matrix is shown below:
94 94 
95-<!--![Schematic](../figures/sparsemode为4遮挡矩阵.png)--> 95+![Schematic](../figures/sparsemode_4_masked_matrix.png)
96 96 
97## sparseMode=597## sparseMode=5
98 98 
@@ -100,17 +100,17 @@ When sparseMode is 5, it represents the prefix non-compressed scenario, that is,
100 100 
101In this scenario, preTokens and nextTokens values are ignored. The attenMask matrix data format must be BNSS or B1SS. The Masked $QK^T$ matrix is shown below:101In this scenario, preTokens and nextTokens values are ignored. The attenMask matrix data format must be BNSS or B1SS. The Masked $QK^T$ matrix is shown below:
102 102 
103-<!--![Schematic](../figures/sparsemode为5遮挡矩阵.png)--> 103+![Schematic](../figures/sparsemode_5_masked_matrix.png)
104 104 
105attenMask should pass a matrix as shown below:105attenMask should pass a matrix as shown below:
106 106 
107-<!--![Schematic](../figures/attenmask矩阵.png)--> 107+![Schematic](../figures/attenmask_matrix.png)
108 108 
109## sparseMode=6109## sparseMode=6
110 110 
111When sparseMode is 6, it represents the prefix compressed scenario, that is, in the prefix scenario, attenMask is an optimized compressed lower triangular + rectangular matrix (3072\*2048): the upper part is a [2048, 2048] lower triangular matrix, and the lower part is a [1024, 2048] rectangular matrix. The left half of the rectangular matrix is all 0, and the right half is all 1. attenMask should pass a matrix as shown below. In this scenario, preTokens and nextTokens values are ignored.111When sparseMode is 6, it represents the prefix compressed scenario, that is, in the prefix scenario, attenMask is an optimized compressed lower triangular + rectangular matrix (3072\*2048): the upper part is a [2048, 2048] lower triangular matrix, and the lower part is a [1024, 2048] rectangular matrix. The left half of the rectangular matrix is all 0, and the right half is all 1. attenMask should pass a matrix as shown below. In this scenario, preTokens and nextTokens values are ignored.
112 112 
113-<!--![Schematic](../figures/sparsemode为6遮挡矩阵.png)--> 113+![Schematic](../figures/sparsemode_6_masked_matrix.png)
114 114 
115## sparseMode=7115## sparseMode=7
116 116 
@@ -121,7 +121,7 @@ The Masked $QK^T$ matrix is shown below. In the second batch, the query is slice
121- The last mask block of card 1 is a band-type mask. Configure preTokens=6 (ensure it is greater than or equal to the last Skv), nextTokens=-2. actual_seq_qlen should pass {3,5}, and actual_seq_kvlen should pass {3,9}.121- The last mask block of card 1 is a band-type mask. Configure preTokens=6 (ensure it is greater than or equal to the last Skv), nextTokens=-2. actual_seq_qlen should pass {3,5}, and actual_seq_kvlen should pass {3,9}.
122- The mask type of card 2 remains unchanged after slicing. sparseMode is 3. actual_seq_qlen should pass {2,7,11}, and actual_seq_kvlen should pass {6,11,15}.122- The mask type of card 2 remains unchanged after slicing. sparseMode is 3. actual_seq_qlen should pass {2,7,11}, and actual_seq_kvlen should pass {6,11,15}.
123 123 
124-<!--![Schematic](../figures/sparsemode为7遮挡矩阵.png)--> 124+![Schematic](../figures/sparsemode_7_masked_matrix.png)
125 125 
126**Note**:126**Note**:
127 127 
@@ -141,7 +141,7 @@ The Masked $QK^T$ matrix is shown below. In the second batch, the query is slice
141- The mask type of card 1 remains unchanged after slicing. sparseMode is 2. actual_seq_qlen should pass {3,5}, and actual_seq_kvlen should pass {3,7}.141- The mask type of card 1 remains unchanged after slicing. sparseMode is 2. actual_seq_qlen should pass {3,5}, and actual_seq_kvlen should pass {3,7}.
142- The first mask block of card 2 is a band-type mask. Configure preTokens=4 (ensure it is greater than or equal to the first Skv), nextTokens=1. actual_seq_qlen should pass {3,8,12}, and actual_seq_kvlen should pass {4,9,13}.142- The first mask block of card 2 is a band-type mask. Configure preTokens=4 (ensure it is greater than or equal to the first Skv), nextTokens=1. actual_seq_qlen should pass {3,8,12}, and actual_seq_kvlen should pass {4,9,13}.
143 143 
144-<!--![Schematic](../figures/sparsemode为8遮挡矩阵.png)--> 144+![Schematic](../figures/sparsemode_8_masked_matrix.png)
145 145 
146**Note**:146**Note**:
147 147 
@@ -150,4 +150,3 @@ The Masked $QK^T$ matrix is shown below. In the second batch, the query is slice
150 - preTokens >= first_Skv.150 - preTokens >= first_Skv.
151 - nextTokens >= first_Sq - first_Skv, configure according to the actual situation.151 - nextTokens >= first_Sq - first_Skv, configure according to the actual situation.
152 - The current mode does not support the optional input pse.152 - The current mode does not support the optional input pse.
153-
@@ -161,7 +161,7 @@ Table 1 Simulation Result Analysis Parameter Description
161 161 
162 ```bash162 ```bash
163 Generate a performance analysis report in the current directory (default: analyze only core 0)163 Generate a performance analysis report in the current directory (default: analyze only core 0)
164- cannsim report -e /path/to/cannsim_{timestamp}_${user_app} 164+ cannsim report -e /path/to/cannsim_{timestamp}_${user_app}
165 165 
166 Generate performance analysis reports for core 0, core 1, core 11, and core 12 in the specified directory166 Generate performance analysis reports for core 0, core 1, core 11, and core 12 in the specified directory
167 cannsim report -e /path/to/cannsim_{timestamp}_${user_app} -o /path/to/report -n '0-1, 11-12'167 cannsim report -e /path/to/cannsim_{timestamp}_${user_app} -o /path/to/report -n '0-1, 11-12'
@@ -177,7 +177,7 @@ Table 1 Simulation Result Analysis Parameter Description
177 177 
1784. View simulation results1784. View simulation results
179 Enter "chrome://tracing" in the Chrome browser and drag the generated instruction pipeline diagram file (trace.json) to the blank area to open it. Use keyboard shortcuts (W: zoom in, S: zoom out, A: move left, D: move right) to view the results.179 Enter "chrome://tracing" in the Chrome browser and drag the generated instruction pipeline diagram file (trace.json) to the blank area to open it. Use keyboard shortcuts (W: zoom in, S: zoom out, A: move left, D: move right) to view the results.
180- <!--![Instruction Pipeline Diagram](../figures/指令流水图.png)-->180+ ![Instruction Pipeline Diagram](../figures/Instruction_pipeline.png)
181 181 
182 Table 2 Key Field Description182 Table 2 Key Field Description
183 183 
@@ -13,7 +13,7 @@ Operators can be invoked through multiple methods. This chapter uses the `AddExa
13 13 
14### Invocation Process14### Invocation Process
15 15 
16-<!--![Schematic Diagram](../figures/aclnn调用.png)-->16+![Schematic Diagram](../figures/aclnn_calling.png)
17 17 
18### Sample Code18### Sample Code
19 19 
@@ -226,7 +226,7 @@ int main()
226 226 
227### Invocation Process227### Invocation Process
228 228 
229-<!--![Schematic Diagram](../figures/IR调用.png)-->229+![Schematic Diagram](../figures/IR_call.png)
230 230 
231### Sample Code231### Sample Code
232 232