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.

mindspore.communication.rst 10 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. mindspore.communication
  2. ========================
  3. 集合通信接口。
  4. 注意,集合通信接口需要预先设置环境变量。对于Ascend,用户需要配置rank_table,设置rank_id和device_id,相关教程可参考:
  5. <https://www.mindspore.cn/tutorials/zh-CN/master/intermediate/distributed_training/distributed_training_ascend.html>`_。
  6. 对于GPU,用户需要预先配置host_file以及mpi,相关教程参考:
  7. <https://www.mindspore.cn/tutorials/zh-CN/master/intermediate/distributed_training/distributed_training_gpu.html>`_。
  8. 目前尚不支持CPU。
  9. .. py:class:: mindspore.communication.GlobalComm
  10. GlobalComm 是一个储存通信信息的全局类。 成员包含:BACKEND、WORLD_COMM_GROUP。
  11. - BACKEND:使用的通信库,HCCL或者NCCL。
  12. - WORLD_COMM_GROUP:全局通信域。
  13. **样例:**
  14. >>> from mindspore.context import set_context
  15. >>> set_context(device_target="Ascend")
  16. >>> init()
  17. >>> GlobalComm.BACKEND
  18. .. py:method:: mindspore.communication.init(backend_name=None)
  19. 初始化通信服务需要的分布式后端,例如‘HCCL’或‘NCCL’服务。
  20. .. note::HCCL的全称是华为集合通信库(Huawei Collective Communication Library),NCCL的全称是英伟达集合通信库(NVIDIA Collective Communication Library)。`init` 方法应该在 `set_context` 方法之后使用。
  21. **参数:**
  22. - **backend_name** (str) – 分布式后端的名称,可选HCCL或NCCL。如果未设置则根据硬件平台类型(device_target)进行推断,默认值为None。
  23. **异常:**
  24. - **TypeError** – 参数 `backend_name` 不是字符串。
  25. - **RuntimeError** – 1)硬件设备类型无效;2)后台服务无效;3)分布式计算初始化失败;4)未设置环境变量 `RANK_ID` 或 `MINDSPORE_HCCL_CONFIG_PATH` 的情况下初始化HCCL服务。
  26. - **ValueError** – 环境变量 `RANK_ID` 设置成非数字。
  27. **样例:**
  28. >>> from mindspore.context import set_context
  29. >>> set_context(device_target="Ascend")
  30. >>> init()
  31. .. py:class:: mindspore.communication.release()
  32. 释放分布式资源,例如‘HCCL’或‘NCCL’服务。
  33. .. note:: `release` 方法应该在 `init` 方法之后使用。
  34. **异常:**
  35. - **RuntimeError** - 在释放分布式资源失败时抛出。
  36. .. py:class:: mindspore.communication.get_rank(group=GlobalComm.WORLD_COMM_GROUP)
  37. 在指定通信组中获取当前的设备序号。
  38. .. note::`get_rank` 方法应该在 `init` 方法之后使用。
  39. **参数:**
  40. - **group** (str) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。默认值:‘GlobalComm.WORLD_COMM_GROUP’。
  41. **返回:**
  42. int, 调用该方法的进程对应的组内序号。
  43. **异常:**
  44. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  45. - **ValueError** – 在后台不可用时抛出。
  46. - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。
  47. .. py:class:: mindspore.communication.get_group_size(group=GlobalComm.WORLD_COMM_GROUP)
  48. 获取指定通信组实例的rank_size。
  49. .. note:: `get_group_size` 方法应该在 `init` 方法之后使用。在跑用例之前用户需要预先配置通信相关的环境变量。
  50. **参数:**
  51. - **group** (str) - 指定工作组实例(由 create_group 方法创建)的名称,支持数据类型为str,默认值为‘WORLD_COMM_GROUP’。
  52. **返回:**
  53. 指定通信组实例的rank_size,数据类型为int。
  54. **异常:**
  55. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  56. - **ValueError** – 在后台不可用时抛出。
  57. - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。
  58. **样例:**
  59. >>> from mindspore.context import set_context
  60. >>> set_context(device_target="Ascend")
  61. >>> init()
  62. >>> group = "0-4"
  63. >>> rank_ids = [0,4]
  64. >>> create_group(group, rank_ids)
  65. >>> group_size = get_group_size(group)
  66. >>> print("group_size is: ", group_size)
  67. >>> group_size is:2
  68. .. py:class:: mindspore.communication.get_world_rank_from_group_rank(group, group_rank_id)
  69. 由指定通信组中的设备序号获取通信集群中的全局设备序号。
  70. .. note::
  71. - GPU 版本的MindSpore不支持此方法;
  72. - 参数 `group` 不能是 `hccl_world_group`;
  73. - `get_world_rank_from_group_rank` 方法应该在 `init` 方法之后使用。
  74. **参数:**
  75. - **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建。
  76. - **group_rank_id** (int) - 通信组内的设备序号。
  77. **返回:**
  78. int, 通信集群中的全局设备序号。
  79. **异常:**
  80. - **TypeError** – 参数 `group` 不是字符串或参数 `group_rank_id` 不是数字。
  81. - **ValueError** – 参数 `group` 是 `hccl_world_group` 或后台不可用。
  82. - **RuntimeError** – ‘HCCL’或‘NCCL’服务不可用,以及使用CPU版本的MindSpore。
  83. **样例:**
  84. >>> from mindspore.context import set_context
  85. >>> set_context(device_target="Ascend")
  86. >>> init()
  87. >>> group = "0-4"
  88. >>> rank_ids = [0,4]
  89. >>> create_group(group, rank_ids)
  90. >>> world_rank_id = get_world_rank_from_group_rank(group, 1)
  91. >>> print("world_rank_id is: ", world_rank_id) # 全局设备序号为4
  92. .. py:class:: mindspore.communication.get_group_rank_from_world_rank(world_rank_id, group)
  93. 由通信集群中的全局设备序号获取指定用户通信组中的rank ID。
  94. .. note::
  95. - GPU 版本的MindSpore不支持此方法;
  96. - 参数 `group` 不能是 `hccl_world_group`;
  97. - `get_group_rank_from_world_rank` 方法应该在 `init` 方法之后使用。
  98. **参数:**
  99. - **world_rank_id** (`int`) - 通信集群内的全局rank ID。
  100. - **group** (`str`) - 指定通信组实例(由 create_group 方法创建)的名称。
  101. **返回:**
  102. 当前通信组内的rank_ID,数据类型为int。
  103. **异常:**
  104. - **TypeError** – 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
  105. - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。
  106. - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用,以及使用GPU版本的MindSpore时抛出。
  107. **样例:**
  108. >>> from mindspore.context import set_context
  109. >>> set_context(device_target="Ascend")
  110. >>> init()
  111. >>> group = "0-4"
  112. >>> rank_ids = [0,4]
  113. >>> create_group(group, rank_ids)
  114. >>> group_rank_id = get_group_rank_from_world_rank(4, group)
  115. >>> print("group_rank_id is: ", group_rank_id) # 组内设备序号是1
  116. .. py:class:: mindspore.communication.create_group(group, rank_ids)
  117. 创建用户自定义的通信组实例。
  118. .. note::
  119. - GPU 版本的MindSpore不支持此方法;
  120. - 列表rank_ids的长度应大于1;
  121. - 列表rank_ids内不能有重复数据;
  122. - `create_group` 方法应该在 `init` 方法之后使用。
  123. **参数:**
  124. - **group** (str) - 输入用户自定义的通信组实例名称,支持数据类型为str。
  125. - **rank_ids** (list) - 设备编号列表。
  126. **异常:**
  127. - **TypeError** – 参数 `group_rank_id` 不是数字或参数 `group` 不是字符串。
  128. - **ValueError** – 列表rank_ids的长度小于1,或列表rank_ids内有重复数据,以及后台无效。
  129. - **RuntimeError** – 在‘HCCL’或‘NCCL’ 服务不可用,以及使用CPU版本的MindSpore。
  130. **样例:**
  131. >>> from mindspore.context import set_context
  132. >>> set_context(device_target="Ascend")
  133. >>> init()
  134. >>> group = "0-8"
  135. >>> rank_ids = [0,8]
  136. >>> create_group(group, rank_ids)
  137. .. py:class:: mindspore.communication.get_local_rank(group=GlobalComm.WORLD_COMM_GROUP)
  138. 获取指定通信组中当前设备的本地设备序号。
  139. .. note::
  140. - GPU 版本的MindSpore不支持此方法;
  141. - `get_local_rank` 方法应该在 `init` 方法之后使用。
  142. **参数:**
  143. - **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组名称。默认值:‘WORLD_COMM_GROUP’。
  144. **返回:**
  145. int, 调用该方法的进程对应的通信组内本地设备序号。
  146. **异常:**
  147. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  148. - **ValueError** – 在后台不可用时抛出。
  149. - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。
  150. .. py:class:: mindspore.communication.get_local_rank_size(group=GlobalComm.WORLD_COMM_GROUP)
  151. 获取指定通信组的本地设备总数。
  152. .. note::
  153. - GPU 版本的MindSpore不支持此方法;
  154. - `get_local_rank_size` 方法应该在 `init` 方法之后使用。
  155. **参数:**
  156. - **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建,或默认使用‘WORLD_COMM_GROUP’。
  157. **返回:**
  158. int, 调用该方法的进程对应的通信组设备总数。
  159. **异常:**
  160. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  161. - **ValueError** – 在后台不可用时抛出。
  162. - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。
  163. .. py:class:: mindspore.communication.destroy_group(group)
  164. 注销用户通信组。
  165. .. note::
  166. - GPU 版本的MindSpore不支持此方法;
  167. - 参数 `group` 不能是 `hccl_world_group`;
  168. - `destroy_group` 方法应该在 `init` 方法之后使用。
  169. **参数:**
  170. - **group** (str) - 被注销通信组实例(通常由 create_group 方法创建)的名称。
  171. **异常:**
  172. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  173. - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。
  174. - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。
  175. **样例:**
  176. >>> from mindspore.context import set_context
  177. >>> set_context(device_target="Ascend")
  178. >>> init()
  179. >>> group = "0-8"
  180. >>> rank_ids = [0,8]
  181. >>> create_group(group, rank_ids)
  182. >>> destroy_group(group)