1 /**
2 * Copyright 2021 Huawei Technologies Co., Ltd
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "backend/kernel_compiler/tbe/tbe_json/single_tbe_json_creator.h"
18 #include "frontend/parallel/ops_info/ops_utils.h"
19 #include "backend/session/anf_runtime_algorithm.h"
20 #include "backend/kernel_compiler/tbe/tbe_adapter.h"
21 #include "backend/kernel_compiler/tbe/tbe_convert_utils.h"
22 #include "backend/kernel_compiler/tbe/tbe_dynaminc_shape_util.h"
23 #include "backend/kernel_compiler/tbe/tbe_utils.h"
24 #include "runtime/dev.h"
25 #include "utils/ms_utils.h"
26 #include "utils/json_operation_utils.h"
27 #include "backend/kernel_compiler/tbe/tbe_json/tbe_json_utils.h"
28
29 namespace mindspore::kernel {
30 using mindspore::kernel::tbe::TbeAdapter;
GenJson(const AnfNodePtr & anf_node,nlohmann::json * kernel_json)31 bool SingleTbeJsonCreator::GenJson(const AnfNodePtr &anf_node, nlohmann::json *kernel_json) {
32 MS_EXCEPTION_IF_NULL(anf_node);
33 MS_EXCEPTION_IF_NULL(kernel_json);
34 auto op_name = AnfAlgo::GetCNodeName(anf_node);
35 MS_LOG(DEBUG) << "Start, node [ " << op_name << " ].";
36 nlohmann::json soc_info_json = kernel::tbe::TbeUtils::GenSocInfo();
37 std::vector<nlohmann::json> op_list;
38 if (!GenOpListJson(anf_node, &op_list)) {
39 MS_LOG(ERROR) << "Anf Node [" << op_name << "] generate op_list json failed";
40 return false;
41 }
42 (*kernel_json)[kJSocInfo] = soc_info_json;
43 (*kernel_json)[kJOpList] = op_list;
44 GenFusionOpName(kernel_json);
45 AddOpNameForComputeNode(kernel_json);
46 (*kernel_json)[kJFullName] = anf_node->fullname_with_scope();
47 (*kernel_json)[kJGraphName] = "";
48 (*kernel_json)[kJScopeID] = -1;
49 (*kernel_json)[kJL1Size] = -1;
50 MS_LOG(DEBUG) << "Json info name is : " << GetJsonName() << ", kernel json:" << kernel_json->dump();
51 return true;
52 }
53
GenOpListJson(const AnfNodePtr & anf_node,std::vector<nlohmann::json> * op_list_json)54 bool SingleTbeJsonCreator::GenOpListJson(const AnfNodePtr &anf_node, std::vector<nlohmann::json> *op_list_json) {
55 MS_EXCEPTION_IF_NULL(anf_node);
56 MS_EXCEPTION_IF_NULL(op_list_json);
57 MS_LOG(DEBUG) << "Start.";
58 nlohmann::json compute_json;
59 if (!GenComputeJson(anf_node, &compute_json)) {
60 MS_LOG(ERROR) << "Anf Node [" << AnfAlgo::GetCNodeName(anf_node) << "] generate compute json failed";
61 return false;
62 }
63 GenDataJson(anf_node, compute_json, op_list_json);
64 (*op_list_json).push_back(compute_json);
65 MS_LOG(DEBUG) << "End.";
66 return true;
67 }
68
GenDataJson(const AnfNodePtr & anf_node,const nlohmann::json & compute_json,std::vector<nlohmann::json> * op_list_json)69 void SingleTbeJsonCreator::GenDataJson(const AnfNodePtr &anf_node, const nlohmann::json &compute_json,
70 std::vector<nlohmann::json> *op_list_json) {
71 MS_EXCEPTION_IF_NULL(anf_node);
72 MS_EXCEPTION_IF_NULL(op_list_json);
73 MS_LOG(DEBUG) << "Start";
74 auto op_name = AnfAlgo::GetCNodeName(anf_node);
75 auto op_info_ptr = mindspore::kernel::tbe::TbeDynamicShapeUtil::FindOp(op_name, anf_node);
76 auto inputs_ptr = op_info_ptr->inputs_ptr();
77 auto inputs_json = GetJsonValue<std::vector<nlohmann::json>>(compute_json, kJInputDesc);
78 for (size_t i = 0; i < inputs_ptr.size(); i++) {
79 auto input_json = inputs_json.at(i);
80 auto input_ptr = inputs_ptr[i];
81 MS_EXCEPTION_IF_NULL(input_ptr);
82 nlohmann::json data_json;
83 std::vector<nlohmann::json> output_desc;
84 if (input_json.is_array()) {
85 data_json[kJName] = input_ptr->name() + "_dynamic";
86 auto tmp_inputs = input_json.get<std::vector<nlohmann::json>>();
87 std::copy(tmp_inputs.begin(), tmp_inputs.end(), std::back_inserter(output_desc));
88 } else {
89 data_json[kJName] = GetJsonValue<std::string>(input_json, kJName);
90 output_desc.push_back(input_json);
91 }
92 data_json[kJOutputDesc] = output_desc;
93 data_json[kJType] = kJData;
94 (*op_list_json).push_back(data_json);
95 }
96 MS_LOG(DEBUG) << "End";
97 }
98
GenInputsJson(const AnfNodePtr & anf_node,nlohmann::json * compute_json)99 bool SingleTbeJsonCreator::GenInputsJson(const AnfNodePtr &anf_node, nlohmann::json *compute_json) {
100 MS_EXCEPTION_IF_NULL(anf_node);
101 MS_EXCEPTION_IF_NULL(compute_json);
102 MS_LOG(DEBUG) << "Start.";
103 auto op_name = AnfAlgo::GetCNodeName(anf_node);
104 auto op_info_ptr = mindspore::kernel::tbe::TbeDynamicShapeUtil::FindOp(op_name, anf_node);
105 MS_EXCEPTION_IF_NULL(op_info_ptr);
106 std::vector<OpIOInfoPtr> inputs_ptr = op_info_ptr->inputs_ptr();
107 std::vector<nlohmann::json> inputs_json;
108 if (inputs_ptr.empty()) {
109 MS_LOG(DEBUG) << op_name << " registration info has no input info.";
110 (*compute_json)[kJInputDesc] = inputs_json;
111 return true;
112 }
113 std::vector<size_t> inputs_tensor_num;
114 if (!TbeJsonUtils::GetInputsRealNum(anf_node, inputs_ptr, &inputs_tensor_num)) {
115 return false;
116 }
117
118 std::vector<nlohmann::json> inputs_desc;
119 size_t real_input_num = AnfAlgo::GetInputTensorNum(anf_node);
120 for (size_t i = 0; i < real_input_num; i++) {
121 nlohmann::json input_desc;
122 GenInputDescJson(anf_node, i, &input_desc);
123 inputs_desc.emplace_back(input_desc);
124 }
125
126 size_t need_input_num = std::accumulate(inputs_tensor_num.begin(), inputs_tensor_num.end(), static_cast<size_t>(0));
127 // gen optional desc
128 for (size_t i = AnfAlgo::GetInputTensorNum(anf_node); i < need_input_num; i++) {
129 nlohmann::json input_desc;
130 input_desc[kJValid] = false;
131 input_desc[kJShape] = kJNull;
132 input_desc[kJDataType] = 0;
133 inputs_desc.emplace_back(input_desc);
134 }
135
136 std::vector<nlohmann::json> inputs_list;
137 if (!AssignInputsJson(anf_node, inputs_desc, inputs_tensor_num, inputs_ptr, &inputs_list)) {
138 return false;
139 }
140
141 TbeAdapter::InputOrderPass<nlohmann::json>(anf_node, inputs_list, &inputs_json);
142 (*compute_json)[kJInputDesc] = inputs_json;
143 MS_LOG(DEBUG) << "End.";
144 return true;
145 }
146
GenInputDescJson(const AnfNodePtr & anf_node,size_t real_input_index,nlohmann::json * input_desc)147 void SingleTbeJsonCreator::GenInputDescJson(const AnfNodePtr &anf_node, size_t real_input_index,
148 nlohmann::json *input_desc) {
149 MS_EXCEPTION_IF_NULL(anf_node);
150 MS_EXCEPTION_IF_NULL(input_desc);
151 GenDesJsonCommon(input_desc);
152 auto shape = TbeJsonUtils::GetInputDeviceShapeForTbeBuild(anf_node, real_input_index);
153 auto ori_shape = TbeJsonUtils::GetInputOriShapeForTbeBuild(anf_node, real_input_index);
154 if (shape.empty()) {
155 shape.emplace_back(1);
156 }
157 if (ori_shape.empty()) {
158 ori_shape.emplace_back(1);
159 }
160
161 auto def_format = TbeJsonUtils::IsNeedChangeDefaultFormat(anf_node) ? kOpFormat_NCDHW : kOpFormat_NCHW;
162 auto format = AnfAlgo::GetInputFormat(anf_node, real_input_index);
163 format = TbeAdapter::FormatPass(format, ori_shape.size());
164 format =
165 (def_format == kOpFormat_NCDHW && k3DFormatSet.find(format) == k3DFormatSet.end()) ? kOpFormat_NCDHW : format;
166 (*input_desc)[kJDtype] = tbe::TypeIdToString(AnfAlgo::GetInputDeviceDataType(anf_node, real_input_index));
167 (*input_desc)[kJDataType] = GetJsonValue<std::string>(*input_desc, kJDtype);
168 (*input_desc)[kJOriShape] = ori_shape;
169 (*input_desc)[kJOriFormat] = def_format;
170 (*input_desc)[kJShape] = shape;
171 (*input_desc)[kJFormat] = format;
172 (*input_desc)[kJValid] = true;
173 (*input_desc)[kJRange] = tbe::TbeDynamicShapeUtil::GetInputDynamicRange(anf_node, real_input_index, format);
174 GenInputConstValue(anf_node, real_input_index, input_desc);
175 }
176
GenOutputDescJson(const AnfNodePtr & anf_node,size_t node_out_idx,nlohmann::json * output_desc)177 void SingleTbeJsonCreator::GenOutputDescJson(const AnfNodePtr &anf_node, size_t node_out_idx,
178 nlohmann::json *output_desc) {
179 MS_EXCEPTION_IF_NULL(anf_node);
180 GenDescJson(anf_node, node_out_idx, node_out_idx, output_desc);
181 output_desc->erase(kJOutputIndex);
182 (*output_desc)[kJValid] = true;
183 (*output_desc)[kJRange] =
184 tbe::TbeDynamicShapeUtil::GetOutputDynamicRange(anf_node, node_out_idx, (*output_desc)[kJFormat]);
185 }
186
AssignInputsJson(const AnfNodePtr & anf_node,const std::vector<nlohmann::json> & inputs_desc,const std::vector<size_t> & inputs_tensor_num,const std::vector<OpIOInfoPtr> & inputs_ptr,std::vector<nlohmann::json> * inputs_json)187 bool SingleTbeJsonCreator::AssignInputsJson(const AnfNodePtr &anf_node, const std::vector<nlohmann::json> &inputs_desc,
188 const std::vector<size_t> &inputs_tensor_num,
189 const std::vector<OpIOInfoPtr> &inputs_ptr,
190 std::vector<nlohmann::json> *inputs_json) {
191 MS_EXCEPTION_IF_NULL(anf_node);
192 MS_EXCEPTION_IF_NULL(inputs_json);
193 MS_LOG(DEBUG) << "Start.";
194 size_t inputs_desc_index = 0;
195 for (size_t i = 0; i < inputs_tensor_num.size(); i++) {
196 auto input_ptr = inputs_ptr[i];
197 MS_EXCEPTION_IF_NULL(input_ptr);
198 auto param_type = input_ptr->param_type();
199 if (param_type == kJParamOptional) {
200 nlohmann::json current_input_desc;
201 // DynamicRnn and DynamicGRUV2 exist placeholder input
202 current_input_desc = inputs_desc.at(inputs_desc_index);
203 if (TbeAdapter::IsPlaceHolderInput(anf_node, input_ptr)) {
204 current_input_desc[kJValid] = false;
205 }
206 current_input_desc[kJName] = input_ptr->name() + "_optional_";
207 current_input_desc[kJParamType] = input_ptr->param_type();
208 (*inputs_json).emplace_back(current_input_desc);
209 inputs_desc_index++;
210 } else if (param_type == kJParamDynamic) {
211 std::vector<nlohmann::json> dynamic_inputs_desc;
212 for (size_t j = 0; j < inputs_tensor_num[i]; j++) {
213 auto current_input_desc = inputs_desc.at(inputs_desc_index);
214 current_input_desc[kJName] = input_ptr->name() + "_dynamic_" + std::to_string(j);
215 current_input_desc[kJParamType] = input_ptr->param_type();
216 dynamic_inputs_desc.emplace_back(current_input_desc);
217 inputs_desc_index++;
218 }
219 (*inputs_json).emplace_back(dynamic_inputs_desc);
220 } else if (param_type == kJParamRequred) {
221 auto current_input_desc = inputs_desc.at(inputs_desc_index);
222 current_input_desc[kJName] = input_ptr->name() + "_0";
223 current_input_desc[kJParamType] = input_ptr->param_type();
224 (*inputs_json).emplace_back(current_input_desc);
225 inputs_desc_index++;
226 } else {
227 MS_LOG(ERROR) << "Unsupported input param type:[" << param_type
228 << "], supported list: {optional, dynamic, required}.";
229 return false;
230 }
231 }
232 MS_LOG(DEBUG) << "End.";
233 return true;
234 }
235
GenOutputsJson(const AnfNodePtr & anf_node,nlohmann::json * compute_json)236 bool SingleTbeJsonCreator::GenOutputsJson(const AnfNodePtr &anf_node, nlohmann::json *compute_json) {
237 MS_EXCEPTION_IF_NULL(anf_node);
238 MS_EXCEPTION_IF_NULL(compute_json);
239 MS_LOG(DEBUG) << "Start.";
240 auto op_name = AnfAlgo::GetCNodeName(anf_node);
241 auto op_info_ptr = mindspore::kernel::tbe::TbeDynamicShapeUtil::FindOp(op_name, anf_node);
242 MS_EXCEPTION_IF_NULL(op_info_ptr);
243 std::vector<size_t> outputs_tensor_num;
244 auto outputs_ptr = op_info_ptr->outputs_ptr();
245 if (!TbeJsonUtils::GetOutputsRealNum(anf_node, outputs_ptr, &outputs_tensor_num)) {
246 return false;
247 }
248
249 size_t sum_outputs_num =
250 std::accumulate(outputs_tensor_num.begin(), outputs_tensor_num.end(), static_cast<size_t>(0));
251 size_t real_output_num = AnfAlgo::GetOutputTensorNum(anf_node);
252 std::vector<nlohmann::json> outputs_desc;
253 for (size_t i = 0; i < real_output_num; i++) {
254 nlohmann::json output_desc;
255 GenOutputDescJson(anf_node, i, &output_desc);
256 outputs_desc.emplace_back(output_desc);
257 }
258
259 for (size_t i = real_output_num; i < sum_outputs_num; i++) {
260 nlohmann::json output_desc;
261 output_desc[kJValid] = false;
262 output_desc[kJShape] = kJNull;
263 outputs_desc.emplace_back(output_desc);
264 }
265
266 std::vector<nlohmann::json> outputs_json;
267 if (!AssignOutputsJson(anf_node, outputs_desc, outputs_tensor_num, outputs_ptr, &outputs_json)) {
268 return false;
269 }
270 (*compute_json)[kJOutputDesc] = outputs_json;
271 MS_LOG(DEBUG) << "End.";
272 return true;
273 }
274
AssignOutputsJson(const AnfNodePtr & anf_node,const std::vector<nlohmann::json> & outputs_desc,const std::vector<size_t> & outputs_tensor_num,const std::vector<OpIOInfoPtr> & outputs_ptr,std::vector<nlohmann::json> * outputs_json)275 bool SingleTbeJsonCreator::AssignOutputsJson(const AnfNodePtr &anf_node,
276 const std::vector<nlohmann::json> &outputs_desc,
277 const std::vector<size_t> &outputs_tensor_num,
278 const std::vector<OpIOInfoPtr> &outputs_ptr,
279 std::vector<nlohmann::json> *outputs_json) {
280 MS_EXCEPTION_IF_NULL(anf_node);
281 MS_LOG(DEBUG) << "Start.";
282 size_t outputs_desc_index = 0;
283 for (size_t i = 0; i < outputs_tensor_num.size(); i++) {
284 auto output_ptr = outputs_ptr[i];
285 MS_EXCEPTION_IF_NULL(output_ptr);
286 auto param_type = output_ptr->param_type();
287 if (param_type == kJParamDynamic) {
288 std::vector<nlohmann::json> dynamic_outputs_desc;
289 for (size_t j = 0; j < outputs_tensor_num[i]; j++) {
290 auto current_input_desc = outputs_desc.at(outputs_desc_index);
291 current_input_desc[kJName] = output_ptr->name();
292 current_input_desc[kJParamType] = output_ptr->param_type();
293 dynamic_outputs_desc.emplace_back(current_input_desc);
294 outputs_desc_index++;
295 }
296 (*outputs_json).emplace_back(dynamic_outputs_desc);
297 } else if (param_type == kJParamRequred || param_type == kJParamOptional) {
298 auto current_input_desc = outputs_desc.at(outputs_desc_index);
299 current_input_desc[kJName] = output_ptr->name();
300 current_input_desc[kJParamType] = output_ptr->param_type();
301 (*outputs_json).emplace_back(current_input_desc);
302 outputs_desc_index++;
303 } else {
304 MS_LOG(ERROR) << "Unsupported output param type:[" << param_type
305 << "], supported list: {required, dynamic, optional}.";
306 return false;
307 }
308 }
309 MS_LOG(DEBUG) << "End.";
310 return true;
311 }
312
GenOtherJson(const AnfNodePtr & anf_node,nlohmann::json * compute_json)313 void SingleTbeJsonCreator::GenOtherJson(const AnfNodePtr &anf_node, nlohmann::json *compute_json) {
314 MS_EXCEPTION_IF_NULL(anf_node);
315 MS_EXCEPTION_IF_NULL(compute_json);
316 MS_LOG(DEBUG) << "Start.";
317 (*compute_json)[kJOriName] = {anf_node->fullname_with_scope()};
318 (*compute_json)[kJBuildType] = kAccuratelyBuild;
319 (*compute_json)[kJMissSupportInfo] = "";
320 (*compute_json)[kJMaxKernelID] = kJMaxKernelIDValue;
321 (*compute_json)[kJUnknowShape] = tbe::TbeDynamicShapeUtil::GetDynamicShapeAttr(anf_node);
322 MS_LOG(DEBUG) << "End.";
323 }
324
GenDescJson(const AnfNodePtr & anf_node,size_t node_out_idx,size_t desc_output_idx,nlohmann::json * output_desc)325 void SelectTbeJsonCreator::GenDescJson(const AnfNodePtr &anf_node, size_t node_out_idx, size_t desc_output_idx,
326 nlohmann::json *output_desc) {
327 MS_EXCEPTION_IF_NULL(anf_node);
328 GenDesJsonCommon(output_desc);
329 std::vector<int64_t> shape;
330 std::vector<int64_t> ori_shape;
331 ori_shape = TbeJsonUtils::GetOutputOriShapeForTbeBuild(anf_node, node_out_idx);
332 if (ori_shape.empty()) {
333 ori_shape.emplace_back(1);
334 }
335 shape = ori_shape;
336
337 auto def_format = TbeJsonUtils::IsNeedChangeDefaultFormat(anf_node) ? kOpFormat_NCDHW : kOpFormat_NCHW;
338 auto format = def_format;
339
340 (*output_desc)[kJDataType] = tbe::TypeIdToString(AnfAlgo::GetOutputInferDataType(anf_node, node_out_idx));
341 (*output_desc)[kJDtype] = GetJsonValue<std::string>(*output_desc, kJDataType);
342 (*output_desc)[kJFormat] = format;
343 (*output_desc)[kJOriFormat] = def_format;
344 (*output_desc)[kJOriShape] = ori_shape;
345 (*output_desc)[kJShape] = shape;
346 (*output_desc)[kJOutputIndex] = desc_output_idx;
347 }
348
GenInputDescJson(const AnfNodePtr & anf_node,size_t real_input_index,nlohmann::json * input_desc)349 void SelectTbeJsonCreator::GenInputDescJson(const AnfNodePtr &anf_node, size_t real_input_index,
350 nlohmann::json *input_desc) {
351 MS_EXCEPTION_IF_NULL(anf_node);
352 GenDesJsonCommon(input_desc);
353 auto ori_shape = TbeJsonUtils::GetInputOriShapeForTbeBuild(anf_node, real_input_index);
354 if (ori_shape.empty()) {
355 ori_shape.emplace_back(1);
356 }
357 auto shape = ori_shape;
358
359 auto def_format = TbeJsonUtils::IsNeedChangeDefaultFormat(anf_node) ? kOpFormat_NCDHW : kOpFormat_NCHW;
360 auto format = def_format;
361 (*input_desc)[kJDtype] = tbe::TypeIdToString(AnfAlgo::GetPrevNodeOutputInferDataType(anf_node, real_input_index));
362 (*input_desc)[kJDataType] = GetJsonValue<std::string>(*input_desc, kJDtype);
363 (*input_desc)[kJOriShape] = ori_shape;
364 (*input_desc)[kJOriFormat] = def_format;
365 (*input_desc)[kJShape] = shape;
366 (*input_desc)[kJFormat] = format;
367 (*input_desc)[kJValid] = true;
368 (*input_desc)[kJRange] = tbe::TbeDynamicShapeUtil::GetInputDynamicRange(anf_node, real_input_index, format);
369 }
AttrsJsonPostProcessing(const AnfNodePtr & anf_node,const OpInfoPtr & op_info_ptr,nlohmann::json * attrs_json)370 bool SelectTbeJsonCreator::AttrsJsonPostProcessing(const AnfNodePtr &anf_node, const OpInfoPtr &op_info_ptr,
371 nlohmann::json *attrs_json) {
372 MS_EXCEPTION_IF_NULL(anf_node);
373 MS_EXCEPTION_IF_NULL(op_info_ptr);
374 MS_EXCEPTION_IF_NULL(attrs_json);
375 tbe::TbeAdapter::LayerNormAttrJsonPost(anf_node, attrs_json);
376 return true;
377 }
378
GenDescJson(const AnfNodePtr & anf_node,size_t node_out_idx,size_t desc_output_idx,nlohmann::json * output_desc)379 void CheckTbeJsonCreator::GenDescJson(const AnfNodePtr &anf_node, size_t node_out_idx, size_t desc_output_idx,
380 nlohmann::json *output_desc) {
381 MS_EXCEPTION_IF_NULL(anf_node);
382 GenDesJsonCommon(output_desc);
383 std::vector<int64_t> shape;
384 std::vector<int64_t> ori_shape;
385 ori_shape = TbeJsonUtils::GetOutputOriShapeForTbeBuild(anf_node, node_out_idx);
386 if (ori_shape.empty()) {
387 ori_shape.emplace_back(1);
388 }
389 shape = ori_shape;
390 auto def_format = TbeJsonUtils::IsNeedChangeDefaultFormat(anf_node) ? kOpFormat_NCDHW : kOpFormat_NCHW;
391 auto format = def_format;
392
393 (*output_desc)[kJDataType] = tbe::TypeIdToString(AnfAlgo::GetOutputDeviceDataType(anf_node, node_out_idx));
394 (*output_desc)[kJDtype] = GetJsonValue<std::string>(*output_desc, kJDataType);
395 (*output_desc)[kJFormat] = format;
396 (*output_desc)[kJOriFormat] = def_format;
397 (*output_desc)[kJOriShape] = ori_shape;
398 (*output_desc)[kJShape] = shape;
399 (*output_desc)[kJOutputIndex] = desc_output_idx;
400 }
401
GenInputDescJson(const AnfNodePtr & anf_node,size_t real_input_index,nlohmann::json * input_desc)402 void CheckTbeJsonCreator::GenInputDescJson(const AnfNodePtr &anf_node, size_t real_input_index,
403 nlohmann::json *input_desc) {
404 MS_EXCEPTION_IF_NULL(anf_node);
405 GenDesJsonCommon(input_desc);
406 auto ori_shape = TbeJsonUtils::GetInputOriShapeForTbeBuild(anf_node, real_input_index);
407 if (ori_shape.empty()) {
408 ori_shape.emplace_back(1);
409 }
410 auto shape = ori_shape;
411
412 auto def_format = TbeJsonUtils::IsNeedChangeDefaultFormat(anf_node) ? kOpFormat_NCDHW : kOpFormat_NCHW;
413 auto format = def_format;
414 (*input_desc)[kJDtype] = tbe::TypeIdToString(AnfAlgo::GetInputDeviceDataType(anf_node, real_input_index));
415 (*input_desc)[kJDataType] = GetJsonValue<std::string>(*input_desc, kJDtype);
416 (*input_desc)[kJOriShape] = ori_shape;
417 (*input_desc)[kJOriFormat] = def_format;
418 (*input_desc)[kJShape] = shape;
419 (*input_desc)[kJFormat] = format;
420 (*input_desc)[kJValid] = true;
421 (*input_desc)[kJRange] = tbe::TbeDynamicShapeUtil::GetInputDynamicRange(anf_node, real_input_index, format);
422 GenInputConstValue(anf_node, real_input_index, input_desc);
423 }
424 } // namespace mindspore::kernel
425