You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.h 16 kB

6 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. /**
  2. * Copyright 2019 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. #ifndef MINDSPORE_CCSRC_UTILS_UTILS_H_
  17. #define MINDSPORE_CCSRC_UTILS_UTILS_H_
  18. #include <unistd.h>
  19. #include <fcntl.h>
  20. #include <sys/stat.h>
  21. #include <string>
  22. #include <vector>
  23. #include <set>
  24. #include "utils/log_adapter.h"
  25. #include "ir/dtype/type.h"
  26. namespace mindspore {
  27. // op name. Op which not exists in operator/ops.h, so define it's name here
  28. constexpr auto kFour2FiveOpName = "Four2Five";
  29. constexpr auto kFive2FourOpName = "Five2Four";
  30. constexpr auto kConvBN1OpName = "ConvBN1";
  31. constexpr auto kBN2AddReluOpName = "BN2AddRelu";
  32. constexpr auto kBN2ReLUOpName = "BN2Relu";
  33. constexpr auto kBN2OpName = "BN2";
  34. constexpr auto kFusedBN1OpName = "FusedBN1";
  35. constexpr auto kFusedBN2OpName = "FusedBN2";
  36. constexpr auto kFusedBN3OpName = "FusedBN3";
  37. constexpr auto kBNGrad1OpName = "BNGrad1";
  38. constexpr auto kBNGrad2OpName = "BNGrad2";
  39. constexpr auto kBNGrad3OpName = "BNGrad3";
  40. constexpr auto kClearZeroOpName = "ClearZero";
  41. constexpr auto kAtomicAddrCleanOpName = "AtomicAddrClean";
  42. constexpr auto kGetNextOpName = "GetNext";
  43. constexpr auto kEndOfSequence = "EndOfSequence";
  44. constexpr auto kAllReduceOpName = "AllReduce";
  45. constexpr auto kAllGatherOpName = "AllGather";
  46. constexpr auto kHostAllGatherOpName = "HostAllGather";
  47. constexpr auto kBroadcastOpName = "Broadcast";
  48. constexpr auto kReduceScatterOpName = "ReduceScatter";
  49. constexpr auto kHostReduceScatterOpName = "HostReduceScatter";
  50. constexpr auto kMemCpyAsyncOpName = "memcpy_async";
  51. constexpr auto kTopKOpName = "TopK";
  52. constexpr auto kExtractImagePatchesOpName = "ExtractImagePatches";
  53. constexpr auto kBNTrainingReduceOpName = "BNTrainingReduce";
  54. constexpr auto kBNTrainingUpdateOpName = "BNTrainingUpdate";
  55. constexpr auto kBNTrainingUpdateV2OpName = "BNTrainingUpdateV2";
  56. constexpr auto kBNTrainingUpdateV3OpName = "BNTrainingUpdateV3";
  57. constexpr auto kSimpleMeanGradOpName = "SimpleMeanGrad";
  58. constexpr auto kMeanGradOpName = "MeanGrad";
  59. constexpr auto kSliceOpName = "Slice";
  60. constexpr auto kSliceGradOpName = "SliceGrad";
  61. constexpr auto kTileOpName = "Tile";
  62. constexpr auto kScatterNdOpName = "ScatterNd";
  63. constexpr auto kStridedSliceAssignOpName = "StridedSliceAssign";
  64. constexpr auto kStridedSliceOpName = "StridedSlice";
  65. constexpr auto kStridedSliceGradOpName = "StridedSliceGrad";
  66. constexpr auto kSparseGatherV2 = "SparseGatherV2";
  67. constexpr auto kUnsortedSegmentProdOpName = "UnsortedSegmentProd";
  68. constexpr auto kUnsortedSegmentMinOpName = "UnsortedSegmentMin";
  69. constexpr auto kFlattenGradOpName = "FlattenGrad";
  70. constexpr auto kExpandDimsOpName = "ExpandDims";
  71. constexpr auto kSplitOpName = "Split";
  72. constexpr auto kSplitVOpName = "SplitV";
  73. constexpr auto kSparseApplyAdagradOpName = "SparseApplyAdagrad";
  74. constexpr auto kMomentumOpName = "Momentum";
  75. constexpr auto kApplyMomentumOpName = "ApplyMomentum";
  76. constexpr auto kApplyAdadeltaOpName = "ApplyAdadelta";
  77. constexpr auto kApplyAdagradOpName = "ApplyAdagrad";
  78. constexpr auto kApplyAdagradDAName = "ApplyAdagradDA";
  79. constexpr auto kApplyAdamOpName = "Adam";
  80. constexpr auto kApplyAdaMaxOpName = "ApplyAdaMax";
  81. constexpr auto kApplyAddSignOpName = "ApplyAddSign";
  82. constexpr auto kApplyCenteredRMSPOpName = "ApplyCenteredRMSP";
  83. constexpr auto kApplyCenteredRMSPropOpName = "ApplyCenteredRMSProp";
  84. constexpr auto kApplyFtrlOpName = "ApplyFtrl";
  85. constexpr auto kApplyFtrlV2OpName = "ApplyFtrlV2";
  86. constexpr auto kApplyGradientDescentOpName = "ApplyGradientDescent";
  87. constexpr auto kApplyPowerSignOpName = "ApplyPowerSign";
  88. constexpr auto kApplyProximalAdagradOpName = "ApplyProximalAdagrad ";
  89. constexpr auto kApplyProximalGradientDescentOpName = "ApplyProximalGradientDescent";
  90. constexpr auto kApplyRMSPropOpName = "ApplyRMSProp";
  91. constexpr auto kTransDataOpName = "TransData";
  92. constexpr auto kBNTrainingUpdateGradOpName = "BNTrainingUpdateGrad";
  93. constexpr auto kBNTrainingReduceGradOpName = "BNTrainingReduceGrad";
  94. constexpr auto kSquareSumV1OpName = "SquareSumV1";
  95. constexpr auto kSquareSumV2OpName = "SquareSumV2";
  96. constexpr auto kClipByNormNoDivSumOpName = "ClipByNormNoDivSum";
  97. constexpr auto kGreaterOpName = "Greater";
  98. constexpr auto kSqrtOpName = "Sqrt";
  99. constexpr auto kRsqrtOpName = "Rsqrt";
  100. constexpr auto kErfOpName = "Erf";
  101. constexpr auto kRealDivOpName = "RealDiv";
  102. constexpr auto kLambUpdateWithLROpName = "LambUpdateWithLR";
  103. constexpr auto kLambNextMVWithDecayOpName = "LambNextMVWithDecay";
  104. constexpr auto kLambNextMVWithDecayV1OpName = "LambNextMVWithDecayV1";
  105. constexpr auto kClipByValueOpName = "ClipByValue";
  106. constexpr auto kLambNextRightOpName = "LambNextRight";
  107. constexpr auto kConfusionSoftmaxGradOpName = "ConfusionSoftmaxGrad";
  108. constexpr auto kLambUpdateWithLrV2OpName = "LambUpdateWithLrV2";
  109. constexpr auto kLayerNormXBackpropOpName = "LayerNormXBackprop";
  110. constexpr auto kLayerNormBetaGammaBackpropOpName = "LayerNormBetaGammaBackprop";
  111. constexpr auto kLambNextMVOpName = "LambNextMV";
  112. constexpr auto kConfusionTransposeDOpName = "ConfusionTransposeD";
  113. constexpr auto kAdamApplyOneWithDecayOpName = "AdamApplyOneWithDecay";
  114. constexpr auto kBatchNormGradOpName = "BatchNormGrad";
  115. constexpr auto kBNInferOpName = "BNInfer";
  116. constexpr auto kAdamApplyOneOpName = "AdamApplyOne";
  117. constexpr auto kResizeNearestNeighborGradOpName = "ResizeNearestNeighborGrad";
  118. constexpr auto kFusedMulAddOpName = "FusedMulAdd";
  119. constexpr auto kFusedMulAddNOpName = "FusedMulAddN";
  120. constexpr auto kFusedMulApplyMomentumOpName = "FusedMulApplyMomentum";
  121. constexpr auto kBiasAddOpName = "BiasAdd";
  122. constexpr auto kConfusionMulGradOpName = "ConfusionMulGrad";
  123. constexpr auto kStreamSwitchOpName = "StreamSwitch";
  124. constexpr auto kStreamActiveOpName = "StreamActive";
  125. constexpr auto kAssignAddOpName = "AssignAdd";
  126. constexpr auto kSendOpName = "Send";
  127. constexpr auto kRecvOpName = "Recv";
  128. constexpr auto kReluV2OpName = "ReLUV2";
  129. constexpr auto kReluGradV2OpName = "ReluGradV2";
  130. constexpr auto kAddNOpName = "AddN";
  131. constexpr auto kResizeNearestNeighborV2OpName = "ResizeNearestNeighborV2";
  132. constexpr auto kResizeNearestNeighborV2GradOpName = "ResizeNearestNeighborV2Grad";
  133. constexpr auto kApplyRMSPropOpname = "ApplyRMSProp";
  134. constexpr auto kCumsumOpName = "Cumsum";
  135. constexpr auto kInplaceAddOpName = "InplaceAdd";
  136. constexpr auto kInplaceSubOpName = "InplaceSub";
  137. constexpr auto kResizeBilinearV2OpName = "kResizeBilinearV2";
  138. constexpr auto kReduceProdOpName = "ReduceProd";
  139. constexpr auto kCumprodOpName = "Cumprod";
  140. constexpr auto kSpaceToBatchOpName = "SpaceToBatch";
  141. constexpr auto kBatchToSpaceOpName = "BatchToSpace";
  142. constexpr auto kPadOpName = "Pad";
  143. constexpr auto kConv2DBackpropInputOpName = "Conv2DBackpropInput";
  144. constexpr auto kFusionOpConv2DBackpropInputReluGradV2Name = "FusionOp_Conv2DBackpropInput_ReluGradV2";
  145. constexpr auto kFusionOpConv2DBackpropInputAddNReluGradV2Name = "FusionOp_Conv2DBackpropInput_AddN_ReluGradV2";
  146. constexpr auto kLabelSetOpName = "LabelSet";
  147. constexpr auto kLabelSwitchOpName = "LabelSwitch";
  148. constexpr auto kLabelGotoOpName = "LabelGoto";
  149. constexpr auto kBNInferGradOpName = "BNInferGrad";
  150. constexpr auto kCallOpName = "call";
  151. constexpr auto kPartialOpName = "partial";
  152. constexpr auto kSwitchOpName = "switch";
  153. constexpr auto kReturnOpName = "return";
  154. constexpr auto kLarsV2OpName = "LarsV2";
  155. constexpr auto kLarsV2UpdateOpName = "LarsV2Update";
  156. constexpr auto kSquareSumAllOpName = "SquareSumAll";
  157. constexpr auto kNMSWithMaskOpName = "NMSWithMask";
  158. constexpr auto kSoftmaxGradExtOpName = "SoftmaxGradExt";
  159. constexpr auto kStridedReadOpName = "StridedRead";
  160. constexpr auto kStridedWriteOpName = "StridedWrite";
  161. constexpr auto kFusedAdamWeightDecayName = "FusedAdamWeightDecay";
  162. constexpr auto kFusedAdamName = "FusedAdam";
  163. constexpr auto kApplyAdagradV2OpName = "ApplyAdagradV2";
  164. constexpr auto kSparseApplyAdagradV2OpName = "SparseApplyAdagradV2";
  165. constexpr auto kSparseApplyFtrlOpName = "SparseApplyFtrl";
  166. constexpr auto kSparseApplyFtrlV2OpName = "SparseApplyFtrlV2";
  167. constexpr auto kApplyKerasMomentumOpName = "ApplyKerasMomentum";
  168. constexpr auto kSparseApplyProximalAdagradOpName = "SparseApplyProximalAdagrad";
  169. constexpr auto kSparseApplyRMSPropOpName = "SparseApplyRMSProp";
  170. constexpr auto kSparseApplyAdadeltaOpName = "SparseApplyAdadelta";
  171. constexpr auto kApplyAdamWithAmsgradOpName = "ApplyAdamWithAmsgrad";
  172. constexpr auto kTensorMoveOpName = "TensorMove";
  173. constexpr auto kTensorScatterUpdateOpName = "TensorScatterUpdate";
  174. constexpr auto kScatterNdUpdateOpName = "ScatterNdUpdate";
  175. constexpr auto kPushOpName = "Push";
  176. constexpr auto kPullOpName = "Pull";
  177. constexpr auto kEmbeddingLookupOpName = "EmbeddingLookup";
  178. constexpr auto kEmbeddingLookupProxyOpName = "EmbeddingLookupProxy";
  179. // attr key name
  180. constexpr auto kAttrInputNames = "input_names";
  181. constexpr auto kAttrIsAICPUKernel = "is_AICPU_kernel";
  182. constexpr auto kIsBackendCast = "is_backed_cast";
  183. constexpr auto kAttrOutputNames = "output_names";
  184. constexpr auto kAttrVisited = "visited";
  185. constexpr auto kAttrShape = "shape";
  186. constexpr auto kAttrMomentum = "momentum";
  187. constexpr auto kAttrEps = "eps";
  188. constexpr auto kAttrEpsilon = "epsilon";
  189. constexpr auto kAttrFactor = "factor";
  190. constexpr auto kAttrIsRef = "isRef";
  191. constexpr auto kAttrDataShape = "data_shape";
  192. constexpr auto kAttrAxis = "axis";
  193. constexpr auto kAttrKeepDims = "keep_dims";
  194. constexpr auto kAttrShapeGamma = "shape_gamma";
  195. constexpr auto kAttrPerm = "perm";
  196. constexpr auto kAttrTransposeFirst = "transpose_first";
  197. constexpr auto kAttrAtomicAddMemSize = "automic_add_mem_size";
  198. constexpr auto kAttrAtomicOutputIndexs = "atomic_output_clean_indexs";
  199. constexpr auto kAttrAtomicWorkspaceIndexs = "atomic_workspace_clean_indexs";
  200. constexpr auto kAttrSwitchCondition = "switch_condition";
  201. constexpr auto kAttrDataType = "data_type";
  202. constexpr auto kAttrActiveTarget = "active_target";
  203. constexpr auto kAttrActiveStreamList = "active_stream_list";
  204. constexpr auto kAttrTrueBranchStream = "true_branch_stream";
  205. constexpr auto kAttrEventId = "event_id";
  206. constexpr auto kAttrDynInput = "dynamic";
  207. constexpr auto kAttrDynInputSizes = "dyn_input_sizes";
  208. constexpr auto kAttrSrcFormat = "src_format";
  209. constexpr auto kAttrMultiples = "multiples";
  210. constexpr auto kAttrFixPrecision = "fix_precision";
  211. constexpr auto kAttrOutputPrecision = "output_precision";
  212. constexpr auto kAttrOutputUsedNum = "output_used_num";
  213. constexpr auto kAttrHasBias = "has_bias";
  214. constexpr auto kAttrN = "n";
  215. constexpr auto kAttrLabelForInsertStreamActive = "label_for_insert_stream_active";
  216. constexpr auto kAttrFusion = "fusion";
  217. constexpr auto kAttrGroup = "group";
  218. constexpr auto kAttrOp = "op";
  219. constexpr auto kAttrIsTraining = "is_training";
  220. constexpr auto kAttrFusionId = "fusion_id";
  221. constexpr auto kAttrLabelIndex = "label_index";
  222. constexpr auto kAttrLabelSwitchList = "label_switch_list";
  223. constexpr auto kAttrNewAxisMask = "new_axis_mask";
  224. constexpr auto kAttrShrinkAxisMask = "shrink_axis_mask";
  225. constexpr auto kAttrDatadumpOriginalNames = "_datadump_original_names";
  226. constexpr auto kAttrDatadumpIsMultiop = "_datadump_is_multiop";
  227. constexpr auto kAttrStreamId = "stream_id";
  228. constexpr auto kAttrRecordEvent = "record_event";
  229. constexpr auto kAttrWaitEvent = "wait_event";
  230. constexpr auto kAttrRecordEventStream = "record_event_stream";
  231. constexpr auto kAttrWaitEventStream = "wait_event_stream";
  232. constexpr auto kAttrIndex = "index";
  233. constexpr auto kAttrSplitDim = "split_dim";
  234. constexpr auto kAttrNumSplit = "num_split";
  235. constexpr auto kAttrOutputNum = "output_num";
  236. constexpr auto kAttrSizeSplits = "size_splits";
  237. constexpr auto kAttrOutputDefault = "output_default";
  238. constexpr auto kAttrPrimitiveTarget = "primitive_target";
  239. constexpr auto kAttrUseLocking = "use_locking";
  240. constexpr auto kAttrReduceScatterFlag = "reduce_scatter_flag";
  241. constexpr auto kAttrOffset = "offset";
  242. constexpr auto kAttrPsKey = "ps_key";
  243. constexpr auto kAttrOptimizerType = "optim_type";
  244. constexpr auto kAttrChildGraph = "child_graph";
  245. constexpr auto kAttrInputNums = "inputNums";
  246. constexpr auto kAttrT = "T";
  247. constexpr auto kAttrNum = "num";
  248. constexpr auto kAttrRankSize = "rank_size";
  249. // attr value
  250. constexpr auto kValueTargetSwitch = "target_switch";
  251. constexpr auto kValueTargetOther = "target_other";
  252. // some size
  253. const size_t kShape4dDims = 4;
  254. const size_t kShape2dDims = 2;
  255. const size_t kShape5dDims = 5;
  256. const size_t kShape1dDims = 1;
  257. const size_t kCubeSize = 16;
  258. const size_t kMemAlignSize = 512;
  259. const int kParameterDataTensorMask = 0;
  260. const int kParameterWeightTensorMask = 1;
  261. const int kValueNodeTensorMask = 2;
  262. // define special index in special node
  263. constexpr auto kAnfPrimitiveIndex = 0;
  264. constexpr auto kFirstDataInputIndex = 1;
  265. constexpr auto kAnfPartialFuncGraphIndex = 1;
  266. constexpr auto kRealInputNodeIndexInTupleGetItem = 1;
  267. constexpr auto kInputNodeOutputIndexInTupleGetItem = 2;
  268. constexpr auto kTupleGetItemInputSize = 3;
  269. constexpr auto kSwitchInputSize = 4;
  270. // index define of control depend
  271. constexpr auto kControlDependPriorIndex = 1;
  272. constexpr auto kControlDependBehindIndex = 2;
  273. constexpr auto kControlDependMode = "depend_mode";
  274. // index define of depend
  275. constexpr auto kRealInputIndexInDepend = 1;
  276. constexpr auto kDependAttachNodeIndex = 2;
  277. constexpr auto kDependInputSize = 3;
  278. // format
  279. constexpr auto kOpFormat_DEFAULT = "DefaultFormat";
  280. constexpr auto kOpFormat_NC1KHKWHWC0 = "NC1KHKWHWC0";
  281. constexpr auto kOpFormat_ND = "ND";
  282. constexpr auto kOpFormat_NCHW = "NCHW";
  283. constexpr auto kOpFormat_NHWC = "NHWC";
  284. constexpr auto kOpFormat_HWCN = "HWCN";
  285. constexpr auto kOpFormat_NC1HWC0 = "NC1HWC0";
  286. constexpr auto kOpFormat_FRAC_Z = "FracZ";
  287. constexpr auto kOpFormat_FRAC_NZ = "FRACTAL_NZ";
  288. constexpr auto kOpFormat_C1HWNCoC0 = "C1HWNCoC0";
  289. constexpr auto kOpFormat_NC1HWC0_C04 = "NC1HWC0_C04";
  290. constexpr auto kOpFormat_FRACTAL_Z_C04 = "FRACTAL_Z_C04";
  291. constexpr auto kOpFormat_NDHWC = "NDHWC";
  292. const std::set<std::string> kOpFormatList = {
  293. kOpFormat_DEFAULT, kOpFormat_NC1KHKWHWC0, kOpFormat_ND, kOpFormat_NCHW, kOpFormat_NHWC,
  294. kOpFormat_HWCN, kOpFormat_NC1HWC0, kOpFormat_FRAC_Z, kOpFormat_C1HWNCoC0, kOpFormat_FRAC_NZ,
  295. kOpFormat_NC1HWC0_C04, kOpFormat_FRACTAL_Z_C04, kOpFormat_NDHWC};
  296. const std::set<std::string> kDefaultCompatibleFormat = {kOpFormat_ND, kOpFormat_NCHW, kOpFormat_NHWC, kOpFormat_HWCN};
  297. const std::set<std::string> kOptOperatorSet = {
  298. kMomentumOpName,
  299. kApplyMomentumOpName,
  300. kApplyAdadeltaOpName,
  301. kApplyAdagradOpName,
  302. kApplyAdagradDAName,
  303. kApplyAdamOpName,
  304. kApplyAdaMaxOpName,
  305. kApplyAddSignOpName,
  306. kApplyCenteredRMSPOpName,
  307. kApplyFtrlOpName,
  308. kApplyFtrlV2OpName,
  309. kApplyGradientDescentOpName,
  310. kApplyPowerSignOpName,
  311. kApplyProximalAdagradOpName,
  312. kApplyProximalGradientDescentOpName,
  313. kApplyRMSPropOpName,
  314. kPullOpName,
  315. };
  316. const std::set<std::string> kHWSpecialFormatSet = {kOpFormat_FRAC_Z, kOpFormat_NC1KHKWHWC0, kOpFormat_NC1HWC0,
  317. kOpFormat_FRAC_NZ, kOpFormat_C1HWNCoC0, kOpFormat_NC1HWC0_C04,
  318. kOpFormat_FRACTAL_Z_C04};
  319. const std::set<TypeId> kFloatDataTypeSet = {kNumberTypeFloat16, kNumberTypeFloat32};
  320. static inline void ChangeFileMode(const std::string &file_name, mode_t mode) {
  321. try {
  322. if (chmod(file_name.c_str(), mode) != 0) {
  323. MS_LOG(DEBUG) << "Change file `" << file_name << "` to mode " << std::oct << mode << " fail.";
  324. }
  325. } catch (std::exception &e) {
  326. MS_LOG(DEBUG) << "File `" << file_name << "` change mode failed! May be not exist.";
  327. }
  328. }
  329. } // namespace mindspore
  330. #endif // MINDSPORE_CCSRC_UTILS_UTILS_H_