mindspore/docs/api/api_python/mindspore.communication.rst

250 lines
9.6 KiB
ReStructuredText
Raw Normal View History

2021-12-04 16:32:24 +08:00
mindspore.communication
========================
2022-01-10 16:58:33 +08:00
集合通信接口。
2022-12-29 11:02:03 +08:00
注意,集合通信接口需要先配置好通信环境变量。
2022-11-10 15:06:38 +08:00
针对Ascend设备用户需要准备rank表设置rank_id和device_id详见 `Ascend指导文档 <https://www.mindspore.cn/tutorials/experts/zh-CN/master/parallel/train_ascend.html#准备环节>`_
针对GPU设备用户需要准备host文件和mpi详见 `GPU指导文档 <https://www.mindspore.cn/tutorials/experts/zh-CN/master/parallel/train_gpu.html#准备环节>`_
2022-01-10 16:58:33 +08:00
2021-12-04 16:32:24 +08:00
.. py:class:: mindspore.communication.GlobalComm
2022-09-09 14:31:17 +08:00
GlobalComm 是一个储存通信信息的全局类。成员包含BACKEND、WORLD_COMM_GROUP。
2021-12-04 16:32:24 +08:00
- BACKEND使用的通信库HCCL或者NCCL。
2021-12-13 18:05:59 +08:00
- WORLD_COMM_GROUP全局通信域。
2021-12-04 20:36:47 +08:00
.. py:function:: mindspore.communication.init(backend_name=None)
2021-12-04 16:32:24 +08:00
2022-09-27 15:49:59 +08:00
初始化通信服务需要的分布式后端,例如 `HCCL``NCCL` 服务。通常在分布式并行场景下使用,并在使用通信服务前设置。
2021-12-04 20:36:47 +08:00
2022-03-01 19:51:54 +08:00
.. note::
2022-08-22 15:03:37 +08:00
- HCCL的全称是华为集合通信库Huawei Collective Communication Library
- NCCL的全称是英伟达集合通信库NVIDIA Collective Communication Library
- MCCL的全称是MindSpore集合通信库MindSpore Collective Communication Library
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
参数:
2022-09-27 15:49:59 +08:00
- **backend_name** (str) - 分布式后端的名称可选HCCL或NCCL。在Ascend硬件平台下应使用HCCL在GPU硬件平台下应使用NCCL。如果未设置则根据硬件平台类型device_target自动进行推断默认值为None。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 参数 `backend_name` 不是字符串。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - 1硬件设备类型无效2后台服务无效3分布式计算初始化失败4后端是HCCL的情况下未设置环境变量 `RANK_ID``MINDSPORE_HCCL_CONFIG_PATH` 的情况下初始化HCCL服务。
2021-12-04 20:36:47 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.release()
2021-12-04 16:32:24 +08:00
2022-03-01 19:51:54 +08:00
释放分布式资源,例如 `HCCL``NCCL` 服务。
2021-12-04 20:36:47 +08:00
2022-06-22 09:31:41 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- `release` 方法应该在 `init` 方法之后使用。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **RuntimeError** - 在释放分布式资源失败时抛出。
2021-12-04 20:36:47 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.get_rank(group=GlobalComm.WORLD_COMM_GROUP)
2021-12-04 16:32:24 +08:00
在指定通信组中获取当前的设备序号。
2021-12-04 20:36:47 +08:00
2022-06-22 09:31:41 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- `get_rank` 方法应该在 `init` 方法之后使用。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **group** (str) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。默认值: `GlobalComm.WORLD_COMM_GROUP`
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
返回:
int调用该方法的进程对应的组内序号。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 在参数 `group` 不是字符串时抛出。
- **ValueError** - 在后台不可用时抛出。
- **RuntimeError** - 在 `HCCL``NCCL` 服务不可用时抛出。
2021-12-04 20:36:47 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.get_group_size(group=GlobalComm.WORLD_COMM_GROUP)
2021-12-04 16:32:24 +08:00
2021-12-18 22:53:06 +08:00
获取指定通信组实例的rank_size。
2021-12-04 20:36:47 +08:00
2022-07-21 22:27:27 +08:00
.. note::
- `get_group_size` 方法应该在 `init` 方法之后使用。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **group** (str) - 指定工作组实例(由 create_group 方法创建的名称支持数据类型为str默认值为 `WORLD_COMM_GROUP`
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
返回:
指定通信组实例的rank_size数据类型为int。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 在参数 `group` 不是字符串时抛出。
- **ValueError** - 在后台不可用时抛出。
- **RuntimeError** - 在 `HCCL``NCCL` 服务不可用时抛出。
2021-12-04 16:32:24 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.get_world_rank_from_group_rank(group, group_rank_id)
2021-12-04 16:32:24 +08:00
由指定通信组中的设备序号获取通信集群中的全局设备序号。
2021-12-04 20:36:47 +08:00
2021-12-04 16:32:24 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- GPU 版本的MindSpore不支持此方法。
- 参数 `group` 不能是 `hccl_world_group`
- `get_world_rank_from_group_rank` 方法应该在 `init` 方法之后使用。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建。
- **group_rank_id** (int) - 通信组内的设备序号。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
返回:
int通信集群中的全局设备序号。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 参数 `group` 不是字符串或参数 `group_rank_id` 不是数字。
- **ValueError** - 参数 `group``hccl_world_group` 或后台不可用。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - `HCCL` 服务不可用时或者使用了GPU版本的MindSpore。
2021-12-04 16:32:24 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.get_group_rank_from_world_rank(world_rank_id, group)
2021-12-04 16:32:24 +08:00
2021-12-18 22:53:06 +08:00
由通信集群中的全局设备序号获取指定用户通信组中的rank ID。
2021-12-04 20:36:47 +08:00
2021-12-04 16:32:24 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- GPU 版本的MindSpore不支持此方法。
- 参数 `group` 不能是 `hccl_world_group`
2021-12-04 16:32:24 +08:00
- `get_group_rank_from_world_rank` 方法应该在 `init` 方法之后使用。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **world_rank_id** (`int`) - 通信集群内的全局rank ID。
- **group** (`str`) - 指定通信组实例(由 create_group 方法创建)的名称。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
返回:
当前通信组内的rank_ID数据类型为int。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** - 在参数 `group``hccl_world_group` 或后台不可用时抛出。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - `HCCL` 服务不可用时或者使用了GPU版本的MindSpore。
2021-12-04 20:36:47 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.create_group(group, rank_ids)
2021-12-04 16:32:24 +08:00
2021-12-18 22:53:06 +08:00
创建用户自定义的通信组实例。
2021-12-04 20:36:47 +08:00
2021-12-04 16:32:24 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- GPU 版本的MindSpore不支持此方法。
- 列表rank_ids的长度应大于1。
- 列表rank_ids内不能有重复数据。
- `create_group` 方法应该在 `init` 方法之后使用。
- 如果没有使用mpirun启动PyNative模式下仅支持全局单通信组。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **group** (str) - 输入用户自定义的通信组实例名称支持数据类型为str。
- **rank_ids** (list) - 设备编号列表。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 参数 `group_rank_id` 不是数字或参数 `group` 不是字符串。
- **ValueError** - 列表rank_ids的长度小于1或列表rank_ids内有重复数据以及后台无效。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - `HCCL` 服务不可用时或者使用了GPU版本的MindSpore。
2021-12-04 20:36:47 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.get_local_rank(group=GlobalComm.WORLD_COMM_GROUP)
2021-12-04 16:32:24 +08:00
获取指定通信组中当前设备的本地设备序号。
2021-12-04 20:36:47 +08:00
2021-12-04 16:32:24 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- GPU 版本的MindSpore不支持此方法。
- `get_local_rank` 方法应该在 `init` 方法之后使用。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组名称。默认值: `WORLD_COMM_GROUP`
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
返回:
int调用该方法的进程对应的通信组内本地设备序号。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 在参数 `group` 不是字符串时抛出。
- **ValueError** - 在后台不可用时抛出。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - `HCCL` 服务不可用时或者使用了GPU版本的MindSpore。
2021-12-04 16:32:24 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.get_local_rank_size(group=GlobalComm.WORLD_COMM_GROUP)
2021-12-04 16:32:24 +08:00
获取指定通信组的本地设备总数。
2021-12-04 20:36:47 +08:00
2021-12-04 16:32:24 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- GPU 版本的MindSpore不支持此方法。
2021-12-04 16:32:24 +08:00
- `get_local_rank_size` 方法应该在 `init` 方法之后使用。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
参数:
- **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建,或默认使用 `WORLD_COMM_GROUP`
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
返回:
int调用该方法的进程对应的通信组设备总数。
2021-12-04 20:36:47 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 在参数 `group` 不是字符串时抛出。
- **ValueError** - 在后台不可用时抛出。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - `HCCL` 服务不可用时或者使用了GPU版本的MindSpore。
2021-12-04 20:36:47 +08:00
2022-12-29 11:02:03 +08:00
样例:
.. note::
.. include:: ops/mindspore.ops.comm_note.rst
2022-06-16 16:03:13 +08:00
.. py:function:: mindspore.communication.destroy_group(group)
2021-12-04 16:32:24 +08:00
2021-12-18 22:53:06 +08:00
注销用户通信组。
2021-12-04 20:36:47 +08:00
2021-12-04 16:32:24 +08:00
.. note::
2022-07-21 22:27:27 +08:00
- GPU 版本的MindSpore不支持此方法。
- 参数 `group` 不能是 `hccl_world_group`
2021-12-04 20:36:47 +08:00
- `destroy_group` 方法应该在 `init` 方法之后使用。
2022-07-26 16:39:37 +08:00
参数:
- **group** (str) - 被注销通信组实例(通常由 create_group 方法创建)的名称。
2021-12-04 16:32:24 +08:00
2022-07-26 16:39:37 +08:00
异常:
- **TypeError** - 在参数 `group` 不是字符串时抛出。
- **ValueError** - 在参数 `group``hccl_world_group` 或后台不可用时抛出。
2022-07-21 22:27:27 +08:00
- **RuntimeError** - `HCCL` 服务不可用时或者使用了GPU版本的MindSpore。
2022-06-22 09:31:41 +08:00
2022-03-09 17:18:59 +08:00
.. py:data:: mindspore.communication.HCCL_WORLD_COMM_GROUP
"hccl_world_group"字符串指的是由HCCL创建的默认通信组。
2022-06-22 09:31:41 +08:00
2022-03-09 17:18:59 +08:00
.. py:data:: mindspore.communication.NCCL_WORLD_COMM_GROUP
2022-03-15 09:57:09 +08:00
"nccl_world_group"字符串指的是由NCCL创建的默认通信组。