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.

random_ops.h 5.3 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /**
  2. * Copyright 2019-2020 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 GE_OP_RANDOM_OPS_H_
  17. #define GE_OP_RANDOM_OPS_H_
  18. #include <vector>
  19. #include "graph/operator_reg.h"
  20. namespace ge {
  21. REG_OP(Multinomial)
  22. .INPUT(logits, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  23. .INPUT(num_samples, TensorType({DT_INT32}))
  24. .OUTPUT(y, TensorType({DT_INT32, DT_INT64}))
  25. .ATTR(output_dtype, Type, DT_INT64)
  26. .ATTR(seed, Int, 0)
  27. .ATTR(seed2, Int, 0)
  28. .OP_END_FACTORY_REG(Multinomial)
  29. REG_OP(ParameterizedTruncatedNormal)
  30. .INPUT(shape, TensorType({DT_INT32}))
  31. .INPUT(means, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  32. .INPUT(stdevs, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  33. .INPUT(min, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  34. .INPUT(max, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  35. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  36. .ATTR(seed, Int, 0)
  37. .ATTR(seed2, Int, 0)
  38. .OP_END_FACTORY_REG(ParameterizedTruncatedNormal)
  39. REG_OP(RandomGammaGrad)
  40. .INPUT(alpha, TensorType({DT_FLOAT, DT_DOUBLE}))
  41. .INPUT(sample, TensorType({DT_FLOAT, DT_DOUBLE}))
  42. .OUTPUT(y, TensorType({DT_FLOAT, DT_DOUBLE}))
  43. .OP_END_FACTORY_REG(RandomGammaGrad)
  44. REG_OP(RandomGamma)
  45. .INPUT(shape, TensorType({DT_INT32, DT_INT64}))
  46. .INPUT(alpha, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  47. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  48. .ATTR(seed, Int, 0)
  49. .ATTR(seed2, Int, 0)
  50. .OP_END_FACTORY_REG(RandomGamma)
  51. REG_OP(RandomPoisson)
  52. .INPUT(shape, TensorType({DT_INT32, DT_INT64}))
  53. .INPUT(rate, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE, \
  54. DT_INT32, DT_INT64}))
  55. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE, \
  56. DT_INT32, DT_INT64}))
  57. .ATTR(dtype, Type, DT_INT64)
  58. .ATTR(seed, Int, 0)
  59. .ATTR(seed2, Int, 0)
  60. .OP_END_FACTORY_REG(RandomPoisson)
  61. REG_OP(RandomShuffle)
  62. .INPUT(x, TensorType({DT_FLOAT, DT_FLOAT16, DT_INT8, DT_INT16, \
  63. DT_UINT16, DT_UINT8, DT_INT32, DT_INT64, DT_UINT32, \
  64. DT_UINT64, DT_BOOL, DT_DOUBLE}))
  65. .OUTPUT(y, TensorType({DT_FLOAT, DT_FLOAT16, DT_INT8, DT_INT16, \
  66. DT_UINT16, DT_UINT8, DT_INT32, DT_INT64, DT_UINT32, \
  67. DT_UINT64, DT_BOOL, DT_DOUBLE}))
  68. .ATTR(seed, Int, 0)
  69. .ATTR(seed2, Int, 0)
  70. .OP_END_FACTORY_REG(RandomShuffle)
  71. REG_OP(RandomStandardNormal)
  72. .INPUT(shape, TensorType({DT_INT32, DT_INT64}))
  73. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  74. .REQUIRED_ATTR(dtype, Type)
  75. .ATTR(seed, Int, 0)
  76. .ATTR(seed2, Int, 0)
  77. .OP_END_FACTORY_REG(RandomStandardNormal)
  78. REG_OP(RandomUniformInt)
  79. .INPUT(shape, TensorType({DT_INT32, DT_INT64}))
  80. .INPUT(min, TensorType({DT_INT32, DT_INT64}))
  81. .INPUT(max, TensorType({DT_INT32, DT_INT64}))
  82. .OUTPUT(y, TensorType({DT_INT32, DT_INT64}))
  83. .ATTR(seed, Int, 0)
  84. .ATTR(seed2, Int, 0)
  85. .OP_END_FACTORY_REG(RandomUniformInt)
  86. REG_OP(RandomUniform)
  87. .INPUT(shape, TensorType({DT_INT32, DT_INT64}))
  88. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE}))
  89. .REQUIRED_ATTR(dtype, Type)
  90. .ATTR(seed, Int, 0)
  91. .ATTR(seed2, Int, 0)
  92. .OP_END_FACTORY_REG(RandomUniform)
  93. REG_OP(TruncatedNormal)
  94. .INPUT(shape, TensorType({ DT_INT32, DT_INT64 }))
  95. .OUTPUT(y, TensorType({ DT_FLOAT16, DT_FLOAT, DT_DOUBLE }))
  96. .ATTR(seed, Int, 0)
  97. .ATTR(seed2, Int, 0)
  98. .OP_END_FACTORY_REG(TruncatedNormal)
  99. REG_OP(DropOutGenMask)
  100. .INPUT(shape, TensorType({ DT_INT32, DT_INT64 }))
  101. .INPUT(prob, TensorType({ DT_FLOAT16, DT_FLOAT }))
  102. .OUTPUT(y, TensorType({ DT_UINT8 }))
  103. .ATTR(seed, Int, 0)
  104. .ATTR(seed2, Int, 0)
  105. .OP_END_FACTORY_REG(DropOutGenMask)
  106. REG_OP(LinSpaceD)
  107. .INPUT(assist, TensorType({DT_FLOAT}))
  108. .INPUT(start, TensorType({DT_FLOAT}))
  109. .INPUT(stop, TensorType({DT_FLOAT}))
  110. .INPUT(num, TensorType::IndexNumberType())
  111. .OUTPUT(output, TensorType({DT_FLOAT}))
  112. .OP_END_FACTORY_REG(LinSpaceD)
  113. REG_OP(LinSpace)
  114. .INPUT(start, TensorType({DT_FLOAT, DT_DOUBLE}))
  115. .INPUT(stop, TensorType({DT_FLOAT, DT_DOUBLE}))
  116. .INPUT(num, TensorType::IndexNumberType())
  117. .OUTPUT(output, TensorType({DT_FLOAT, DT_DOUBLE}))
  118. .OP_END_FACTORY_REG(LinSpace)
  119. REG_OP(Dropout)
  120. .INPUT(x, TensorType{DT_FLOAT})
  121. .OUTPUT(y, TensorType{DT_FLOAT})
  122. .ATTR(dropout_ratio, Float, 0.5)
  123. .ATTR(scale_train, Bool, true)
  124. .ATTR(alpha, Float, 1.0)
  125. .ATTR(beta, Float, 0.0)
  126. .OP_END_FACTORY_REG(Dropout)
  127. REG_OP(RandomChoiceWithMask)
  128. .INPUT(x, TensorType({DT_BOOL}))
  129. .OUTPUT(y, TensorType({DT_INT32}))
  130. .OUTPUT(mask, TensorType({DT_BOOL}))
  131. .ATTR(count, Int, 0)
  132. .ATTR(seed, Int, 0)
  133. .ATTR(seed2, Int, 0)
  134. .OP_END_FACTORY_REG(RandomChoiceWithMask)
  135. } // namespace ge
  136. #endif // GE_OP_RANDOM_OPS_H_

图引擎模块(GE)是MindSpore的一个子模块,其代码由C++实现,位于前端模块ME和底层硬件之间,起到承接作用。图引擎模块以ME下发的图作为输入,然后进行一系列的深度图优化操作,最后输出一张可以在底层硬件上高效运行的图。GE针对昇腾AI处理器的硬件结构特点,做了特定的优化工作,以此来充分发挥出昇腾AI处理器的强大算力。在进行模型训练/推理时,GE会被自动调用而用户并不感知。GE主要由GE API和GE Core两部分组成,详细的架构图如下所示