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 8.8 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
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
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. mindspore.communication
  2. ========================
  3. 集合通信接口。
  4. 注意,集合通信接口需要预先设置环境变量。对于Ascend,用户需要配置rank_table,设置rank_id和device_id,相关教程可参考:
  5. `Ascend指导文档 <https://www.mindspore.cn/docs/programming_guide/zh-CN/master/distributed_training_ascend.html>`_。
  6. 对于GPU,用户需要预先配置host_file以及mpi,相关教程参考:
  7. `GPU指导文档 <https://www.mindspore.cn/docs/programming_guide/zh-CN/master/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. .. py:function:: mindspore.communication.init(backend_name=None)
  14. 初始化通信服务需要的分布式后端,例如 `HCCL` 或 `NCCL` 服务。
  15. .. note::
  16. HCCL的全称是华为集合通信库(Huawei Collective Communication Library),NCCL的全称是英伟达集合通信库(NVIDIA Collective Communication Library)。 `init` 方法应该在 `set_context` 方法之后使用。
  17. **参数:**
  18. - **backend_name** (str) – 分布式后端的名称,可选HCCL或NCCL。如果未设置则根据硬件平台类型(device_target)进行推断,默认值为None。
  19. **异常:**
  20. - **TypeError** – 参数 `backend_name` 不是字符串。
  21. - **RuntimeError** – 1)硬件设备类型无效;2)后台服务无效;3)分布式计算初始化失败;4)未设置环境变量 `RANK_ID` 或 `MINDSPORE_HCCL_CONFIG_PATH` 的情况下初始化HCCL服务。
  22. .. py:class:: mindspore.communication.release()
  23. 释放分布式资源,例如 `HCCL` 或 `NCCL` 服务。
  24. .. note:: `release` 方法应该在 `init` 方法之后使用。
  25. **异常:**
  26. - **RuntimeError** - 在释放分布式资源失败时抛出。
  27. .. py:class:: mindspore.communication.get_rank(group=GlobalComm.WORLD_COMM_GROUP)
  28. 在指定通信组中获取当前的设备序号。
  29. .. note::`get_rank` 方法应该在 `init` 方法之后使用。
  30. **参数:**
  31. - **group** (str) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。默认值: `GlobalComm.WORLD_COMM_GROUP` 。
  32. **返回:**
  33. int, 调用该方法的进程对应的组内序号。
  34. **异常:**
  35. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  36. - **ValueError** – 在后台不可用时抛出。
  37. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用时抛出。
  38. .. py:class:: mindspore.communication.get_group_size(group=GlobalComm.WORLD_COMM_GROUP)
  39. 获取指定通信组实例的rank_size。
  40. .. note:: `get_group_size` 方法应该在 `init` 方法之后使用。在跑用例之前用户需要预先配置通信相关的环境变量。
  41. **参数:**
  42. - **group** (str) - 指定工作组实例(由 create_group 方法创建)的名称,支持数据类型为str,默认值为 `WORLD_COMM_GROUP` 。
  43. **返回:**
  44. 指定通信组实例的rank_size,数据类型为int。
  45. **异常:**
  46. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  47. - **ValueError** – 在后台不可用时抛出。
  48. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用时抛出。
  49. .. py:class:: mindspore.communication.get_world_rank_from_group_rank(group, group_rank_id)
  50. 由指定通信组中的设备序号获取通信集群中的全局设备序号。
  51. .. note::
  52. - GPU 版本的MindSpore不支持此方法;
  53. - 参数 `group` 不能是 `hccl_world_group`;
  54. - `get_world_rank_from_group_rank` 方法应该在 `init` 方法之后使用。
  55. **参数:**
  56. - **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建。
  57. - **group_rank_id** (int) - 通信组内的设备序号。
  58. **返回:**
  59. int, 通信集群中的全局设备序号。
  60. **异常:**
  61. - **TypeError** – 参数 `group` 不是字符串或参数 `group_rank_id` 不是数字。
  62. - **ValueError** – 参数 `group` 是 `hccl_world_group` 或后台不可用。
  63. - **RuntimeError** – `HCCL` 或 `NCCL` 服务不可用,以及使用CPU版本的MindSpore。
  64. .. py:class:: mindspore.communication.get_group_rank_from_world_rank(world_rank_id, group)
  65. 由通信集群中的全局设备序号获取指定用户通信组中的rank ID。
  66. .. note::
  67. - GPU 版本的MindSpore不支持此方法;
  68. - 参数 `group` 不能是 `hccl_world_group`;
  69. - `get_group_rank_from_world_rank` 方法应该在 `init` 方法之后使用。
  70. **参数:**
  71. - **world_rank_id** (`int`) - 通信集群内的全局rank ID。
  72. - **group** (`str`) - 指定通信组实例(由 create_group 方法创建)的名称。
  73. **返回:**
  74. 当前通信组内的rank_ID,数据类型为int。
  75. **异常:**
  76. - **TypeError** – 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
  77. - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。
  78. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用,以及使用GPU版本的MindSpore时抛出。
  79. .. py:class:: mindspore.communication.create_group(group, rank_ids)
  80. 创建用户自定义的通信组实例。
  81. .. note::
  82. - GPU 版本的MindSpore不支持此方法;
  83. - 列表rank_ids的长度应大于1;
  84. - 列表rank_ids内不能有重复数据;
  85. - `create_group` 方法应该在 `init` 方法之后使用。
  86. **参数:**
  87. - **group** (str) - 输入用户自定义的通信组实例名称,支持数据类型为str。
  88. - **rank_ids** (list) - 设备编号列表。
  89. **异常:**
  90. - **TypeError** – 参数 `group_rank_id` 不是数字或参数 `group` 不是字符串。
  91. - **ValueError** – 列表rank_ids的长度小于1,或列表rank_ids内有重复数据,以及后台无效。
  92. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用,以及使用CPU版本的MindSpore。
  93. .. py:class:: mindspore.communication.get_local_rank(group=GlobalComm.WORLD_COMM_GROUP)
  94. 获取指定通信组中当前设备的本地设备序号。
  95. .. note::
  96. - GPU 版本的MindSpore不支持此方法;
  97. - `get_local_rank` 方法应该在 `init` 方法之后使用。
  98. **参数:**
  99. - **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组名称。默认值: `WORLD_COMM_GROUP` 。
  100. **返回:**
  101. int, 调用该方法的进程对应的通信组内本地设备序号。
  102. **异常:**
  103. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  104. - **ValueError** – 在后台不可用时抛出。
  105. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用时抛出。
  106. .. py:class:: mindspore.communication.get_local_rank_size(group=GlobalComm.WORLD_COMM_GROUP)
  107. 获取指定通信组的本地设备总数。
  108. .. note::
  109. - GPU 版本的MindSpore不支持此方法;
  110. - `get_local_rank_size` 方法应该在 `init` 方法之后使用。
  111. **参数:**
  112. - **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建,或默认使用 `WORLD_COMM_GROUP` 。
  113. **返回:**
  114. int, 调用该方法的进程对应的通信组设备总数。
  115. **异常:**
  116. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  117. - **ValueError** – 在后台不可用时抛出。
  118. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用时抛出。
  119. .. py:class:: mindspore.communication.destroy_group(group)
  120. 注销用户通信组。
  121. .. note::
  122. - GPU 版本的MindSpore不支持此方法;
  123. - 参数 `group` 不能是 `hccl_world_group`;
  124. - `destroy_group` 方法应该在 `init` 方法之后使用。
  125. **参数:**
  126. - **group** (str) - 被注销通信组实例(通常由 create_group 方法创建)的名称。
  127. **异常:**
  128. - **TypeError** – 在参数 `group` 不是字符串时抛出。
  129. - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。
  130. - **RuntimeError** – 在 `HCCL` 或 `NCCL` 服务不可用时抛出。
  131. .. py:data:: mindspore.communication.HCCL_WORLD_COMM_GROUP
  132. "hccl_world_group"字符串,指的是由HCCL创建的默认通信组。
  133. .. py:data:: mindspore.communication.NCCL_WORLD_COMM_GROUP
  134. "nccl_world_group"字符串,指的是由NCCL创建的默认通信组。