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.

pad_ops.h 8.6 kB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. /*!
  17. * \file pad_ops.h
  18. * \brief
  19. */
  20. #ifndef GE_OP_PAD_OPS_H
  21. #define GE_OP_PAD_OPS_H
  22. #include "graph/operator_reg.h"
  23. namespace ge {
  24. /**
  25. *@brief Creates a tensor filled with a scalar value.
  26. * This operation creates a tensor of shape "dims" and fills it with "value".
  27. *
  28. *@par Inputs:
  29. *@li dims: A 1D tensor of types int32 or int64. Represents the shape of the output tensor.
  30. *@li value: A 0D scalar. Specifies the value to fill the returned tensor.
  31. * Must be one of the following types:
  32. * float16, float32, double, int32, uint8, int16, int8, complex64, int64,
  33. * qint8, quint8, qint32, uint16, complex128, uint32, uint64.
  34. *
  35. *@par Outputs:
  36. * y: A tensor. Has the same type as "value".
  37. *
  38. *@par Third-party framework compatibility
  39. *@li Compatible with the TensorFlow operator Fill.
  40. *@li Compatible with the Caffe operator Filler.
  41. *
  42. */
  43. REG_OP(Fill)
  44. .INPUT(dims, TensorType::IndexNumberType())
  45. .INPUT(value, TensorType::BasicType())
  46. .OUTPUT(y, TensorType::BasicType())
  47. .OP_END_FACTORY_REG(Fill)
  48. /**
  49. *@brief Creates a tensor filled with a scalar value.
  50. * This operation creates a tensor of shape "dims" and fills it with "value".
  51. *
  52. *@par Inputs:
  53. * value: A 0D scalar for the value to fill the returned tensor. Must be one of
  54. * the following types:
  55. * float16, float32, uint8, int8, int16, int32, int64, quint8, qint8, qint32
  56. *
  57. *@par Attributes:
  58. * dims: A tensor. Must be one of the following types:"int32"
  59. * 1-D. Represents the shape of the output tensor.
  60. *
  61. *@par Outputs:
  62. * y: A tensor. Has the same type as "value".
  63. *
  64. */
  65. REG_OP(FillD)
  66. .INPUT(value, TensorType({DT_FLOAT, DT_FLOAT16, DT_INT8, DT_INT16,
  67. DT_UINT16, DT_UINT8, DT_INT32, DT_INT64,
  68. DT_UINT32, DT_UINT64, DT_BOOL, DT_DOUBLE}))
  69. .OUTPUT(y, TensorType({DT_FLOAT, DT_FLOAT16, DT_INT8, DT_INT16, DT_UINT16,
  70. DT_UINT8, DT_INT32, DT_INT64, DT_UINT32,
  71. DT_UINT64, DT_BOOL, DT_DOUBLE}))
  72. .REQUIRED_ATTR(dims, ListInt)
  73. .OP_END_FACTORY_REG(FillD)
  74. /**
  75. *@brief Broadcasts an array for a compatible shape.
  76. * Broadcasting is the process of making arrays to have compatible shapes
  77. * for arithmetic operations. Two shapes are compatible if for each
  78. * dimension pair they are either equal or one of them is one. When trying
  79. * to broadcast a Tensor to a shape, it starts with the trailing dimensions,
  80. * and works its way forward.
  81. *
  82. *@par Inputs:
  83. *@li x: A tensor.
  84. *@li shape: A tensor of type int32.
  85. * A 1D tensor of type int32, for the shape of the desired output.
  86. *
  87. *@par Outputs:
  88. * y: A tensor. Has the same type as "x".
  89. *
  90. *@par Third-party framework compatibility
  91. *Compatible with the TensorFlow operator BroadcastTo.
  92. *
  93. */
  94. REG_OP(BroadcastTo)
  95. .INPUT(x, TensorType::BasicType())
  96. .INPUT(shape, TensorType({DT_INT32}))
  97. .OUTPUT(y, TensorType::BasicType())
  98. .OP_END_FACTORY_REG(BroadcastTo)
  99. /**
  100. *@brief Broadcasts an array for a compatible shape.
  101. * Broadcasting is the process of making arrays to have compatible shapes
  102. * for arithmetic operations. Two shapes are compatible if for each
  103. * dimension pair they are either equal or one of them is one. When trying
  104. * to broadcast a Tensor to a shape, it starts with the trailing dimensions,
  105. * and works its way forward.
  106. *
  107. *@par Inputs:
  108. * x: A tensor. A tensor to broadcast.
  109. *
  110. *@par Attributes:
  111. * shape: A tensor of type int32.
  112. * A 1D tensor of type int32, for the shape of the desired output.
  113. *
  114. *@par Outputs:
  115. * y: A tensor. Has the same type as "x".
  116. *
  117. *@par Third-party framework compatibility
  118. *Compatible with the TensorFlow operator BroadcastTo.
  119. *
  120. */
  121. REG_OP(BroadcastToD)
  122. .INPUT(x, TensorType::BasicType())
  123. .OUTPUT(y, TensorType::BasicType())
  124. .REQUIRED_ATTR(shape, ListInt)
  125. .OP_END_FACTORY_REG(BroadcastToD)
  126. /**
  127. *@brief Pads a tensor.
  128. *@par Inputs:
  129. *Two inputs, including:
  130. * @li x: A Tensor. Must be one of the following types: float16, float32, double, int32,
  131. * uint8, int16, int8, complex64, int64, qint8, quint8, qint32, qint16, quint16, uint16,
  132. * complex128, uint32, uint64.
  133. * @li paddings: A Tensor of type int32 or int64.
  134. *@par Outputs:
  135. *y: A Tensor of the same type as "x".
  136. *@par Third-party framework compatibility:
  137. * Compatible with TensorFlow operator Pad.
  138. */
  139. REG_OP(Pad)
  140. .INPUT(x, TensorType::BasicType())
  141. .INPUT(paddings, TensorType::IndexNumberType())
  142. .OUTPUT(y, TensorType::BasicType())
  143. .OP_END_FACTORY_REG(Pad)
  144. /**
  145. *@brief Pads a tensor.
  146. *@par Inputs:
  147. *x: A Tensor. Must be one of the following types: float16, float32, int8, uint8, int32.
  148. *@par Attributes:
  149. *paddings: An optional "vector<vector<int>>". Defaults to "{}".
  150. * For each dimension D of input, paddings[D, 0] indicates how many
  151. * values to add before the contents of tensor in that dimension,
  152. * and paddings[D, 1] indicates how many values to add after the
  153. * contents of tensor in that dimension.
  154. *@par Outputs:
  155. *y: A Tensor of the same type as "x".
  156. *@par Third-party framework compatibility:
  157. * Compatible with TensorFlow operator Pad.
  158. */
  159. REG_OP(PadD)
  160. .INPUT(x, TensorType({DT_FLOAT16, DT_FLOAT, DT_INT8, DT_UINT8, DT_FLOAT}))
  161. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_INT8, DT_UINT8, DT_FLOAT}))
  162. .REQUIRED_ATTR(paddings, ListListInt)
  163. .OP_END_FACTORY_REG(PadD)
  164. /**
  165. *@brief Create a diagonal tensor
  166. *@par Inputs:
  167. *Two inputs, including:
  168. * @li x: A mutable Tensor. Must be one of the following types:
  169. * float16, float32, int32.
  170. * @li assist: A mutable Tensor with rank k is at most 1,
  171. * Has the same type as "x".
  172. *@par Outputs:
  173. *y: A mutable Tensor. Has the same type as "x".
  174. *@see Diag()
  175. *@par Third-party framework compatibility
  176. * Compatible with the TensorFlow operator Diag.
  177. */
  178. REG_OP(DiagD)
  179. .INPUT(x, TensorType({DT_FLOAT16, DT_FLOAT, DT_INT32}))
  180. .INPUT(assist, TensorType({DT_FLOAT16, DT_FLOAT, DT_INT32}))
  181. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_INT32}))
  182. .OP_END_FACTORY_REG(DiagD)
  183. /**
  184. *@brief Create a diagonal tensor
  185. *@par Inputs:
  186. *One input, include:
  187. * x: A mutable Tensor with rank k, where k is at most 1. Must be one of the
  188. * following types:
  189. * float16, float32, double, int32, int64, complex64, complex128.
  190. *@par Outputs:
  191. *y: A mutable Tensor. Has the same type as "x".
  192. *@see DiagD()
  193. *@par Third-party framework compatibility
  194. * Compatible with the TensorFlow operator Diag.
  195. */
  196. REG_OP(Diag)
  197. .INPUT(x, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE, DT_INT32,
  198. DT_INT64, DT_COMPLEX64, DT_COMPLEX128}))
  199. .OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT, DT_DOUBLE, DT_INT32,
  200. DT_INT64, DT_COMPLEX64, DT_COMPLEX128}))
  201. .OP_END_FACTORY_REG(Diag)
  202. /**
  203. *@brief Ascend Padding, pad the last dimension of input
  204. *@par Inputs:
  205. *One input, include:
  206. *x: Tensor which last dimension must be 1. For example: [624000, 1].
  207. *@par Outputs:
  208. *y: Padding the last dimension of x to padDimSize, [624000, padDimSize].
  209. *@par Third-party framework compatibility
  210. * Compatible with the TensorFlow operator Diag.
  211. */
  212. REG_OP(AscendPadding)
  213. .INPUT(x, TensorType::BasicType())
  214. .OUTPUT(y, TensorType::BasicType())
  215. .ATTR(pad_dim_size, Int, 8)
  216. .OP_END_FACTORY_REG(AscendPadding)
  217. /**
  218. *@brief EmbeddingRankId, traverse the index calculation server and its position in the server.
  219. *@par Inputs:
  220. *One input, include:
  221. *addr_table: Tensor which last dimension must be 3. For example: [8, 3].
  222. *index: Tensor For example: [640000].
  223. *@par Outputs:
  224. *rank_id: Tensor the first dimension of index to Size, [size, 3].
  225. Tensor which last dimension must be 3.For example: [640000, 3]
  226. *@par Third-party framework compatibility
  227. * Compatible with the TensorFlow operator Diag.
  228. */
  229. REG_OP(EmbeddingRankId)
  230. .INPUT(addr_table, TensorType({DT_UINT64}))
  231. .INPUT(index, TensorType({DT_UINT32}))
  232. .OUTPUT(rank_id, TensorType({DT_UINT64}))
  233. .ATTR(row_memory, Int, 320)
  234. .ATTR(mode, String, "mod")
  235. .OP_END_FACTORY_REG(EmbeddingRankId)
  236. } // namespace ge
  237. #endif //GE_OP_PAD_OPS_H

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