mindspore.communication ======================== 集合通信接口的类。 .. py:class:: mindspore.communication.GlobalComm 全局通信信息。GlobalComm 是一个全局类。 成员包含:BACKEND、WORLD_COMM_GROUP。 - BACKEND:使用的通信库,HCCL或者NCCL。 - WORLD_COMM_GROUP:全局通信域。 .. py:method:: mindspore.communication.init(backend_name=None) 初始化通信服务需要的分布式后端,例如‘HCCL’或‘NCCL’服务。 .. note::HCCL的全称是华为集合通信库(Huawei Collective Communication Library),NCCL的全称是英伟达集合通信库(NVIDIA Collective Communication Library)。`init` 方法应该在 `set_context` 方法之后使用。 **参数:** - **backend_name** (str) – 后台服务的名称,可选HCCL或NCCL。如果未设置则根据硬件平台类型(device_target)进行推断,默认值为None。 **异常:** - **TypeError** – 在参数 `backend_name` 不是字符串时抛出。 - **RuntimeError** – 在以下情况将抛出:1)硬件设备类型无效;2)后台服务无效;3)分布式计算初始化失败;4)未设置环境变量 `RANK_ID` 或 `MINDSPORE_HCCL_CONFIG_PATH` 的情况下初始化HCCL服务。 - **ValueError** – 在环境变量 `RANK_ID` 设置成非数字时抛出。 **样例:** >>> from mindspore.context import set_context >>> set_context(device_target="Ascend") >>> init() .. py:class:: mindspore.communication.release() 释放分布式资源,例如‘HCCL’或‘NCCL’服务。 .. note:: `release` 方法应该在 `init` 方法之后使用。 **异常:** - **RuntimeError** - 在释放分布式资源失败时抛出。 .. py:class:: mindspore.communication.get_rank(group=GlobalComm.WORLD_COMM_GROUP) 在指定通信组中获取当前的设备序号。 .. note::`get_rank` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (str) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。默认值:‘GlobalComm.WORLD_COMM_GROUP’。 **返回:** int, 调用该方法的进程对应的组内序号。 **异常:** - **TypeError** – 在参数 `group` 不是字符串时抛出。 - **ValueError** – 在后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。 .. py:class:: mindspore.communication.get_group_size(group=GlobalComm.WORLD_COMM_GROUP) 获取指定通信组的设备总数。 .. note:: `get_group_size` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (str) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。默认值:‘WORLD_COMM_GROUP’。 **返回:** int, 指定通信组的设备总数。 **异常:** - **TypeError** – 在参数 `group` 不是字符串时抛出。 - **ValueError** – 在后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。 .. py:class:: mindspore.communication.get_world_rank_from_group_rank(group, group_rank_id) 由指定通信组中的设备序号获取通信集群中的全局设备序号。 .. note:: - GPU 版本的MindSpore不支持此方法; - 参数 `group` 不能是 `hccl_world_group`; - `get_world_rank_from_group_rank` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建。 - **group_rank_id** (int) - 通信组内的设备序号。 **返回:** int, 通信集群中的全局设备序号。 **异常:** - **TypeError** – 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。 - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用,以及使用GPU版本的MindSpore时抛出。 **样例:** >>> from mindspore.context import set_context >>> set_context(device_target="Ascend") >>> init() >>> group = "0-4" >>> rank_ids = [0,4] >>> create_group(group, rank_ids) >>> world_rank_id = get_world_rank_from_group_rank(group, 1) >>> print("world_rank_id is: ", world_rank_id) # 全局设备序号为4 .. py:class:: mindspore.communication.get_group_rank_from_world_rank(world_rank_id, group) 由通信集群中的全局设备序号获取指定用户通信组中的设备序号。 .. note:: - GPU 版本的MindSpore不支持此方法; - 参数 `group` 不能是 `hccl_world_group`; - `get_group_rank_from_world_rank` 方法应该在 `init` 方法之后使用。 **参数:** - **world_rank_id** (`int`) - 通信集群内的全局设备序号。 - **group** (`str`) - 传入的通信组名称,通常由 `create_group` 方法创建。 **返回:** int, 当前用户通信组中的设备序号。 **异常:** - **TypeError** – 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。 - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用,以及使用GPU版本的MindSpore时抛出。 **样例:** >>> from mindspore.context import set_context >>> set_context(device_target="Ascend") >>> init() >>> group = "0-4" >>> rank_ids = [0,4] >>> create_group(group, rank_ids) >>> group_rank_id = get_group_rank_from_world_rank(4, group) >>> print("group_rank_id is: ", group_rank_id) # 组内设备序号是1 .. py:class:: mindspore.communication.create_group(group, rank_ids) 创建用户通信组。 .. note:: - GPU 版本的MindSpore不支持此方法; - 列表rank_ids的长度应大于1; - 列表rank_ids内不能有重复数据; - `create_group` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (str) - 将被创建的通信组名称。 - **rank_ids** (list) - 设备编号列表。 **异常:** - **TypeError** – 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。 - **ValueError** – 在列表rank_ids的长度小于1,或列表rank_ids内有重复数据,以及后台无效时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’ 服务不可用,以及使用GPU版本的MindSpore时抛出。 **样例:** >>> from mindspore.context import set_context >>> set_context(device_target="Ascend") >>> init() >>> group = "0-8" >>> rank_ids = [0,8] >>> create_group(group, rank_ids) .. py:class:: mindspore.communication.get_local_rank(group=GlobalComm.WORLD_COMM_GROUP) 获取指定通信组中当前设备的本地设备序号。 .. note:: - GPU 版本的MindSpore不支持此方法; - `get_local_rank` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组名称。默认值:‘WORLD_COMM_GROUP’。 **返回:** int, 调用该方法的进程对应的通信组内本地设备序号。 **异常:** - **TypeError** – 在参数 `group` 不是字符串时抛出。 - **ValueError** – 在后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。 .. py:class:: mindspore.communication.get_local_rank_size(group=GlobalComm.WORLD_COMM_GROUP) 获取指定通信组的本地设备总数。 .. note:: - GPU 版本的MindSpore不支持此方法; - `get_local_rank_size` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建,或默认使用‘WORLD_COMM_GROUP’。 **返回:** int, 调用该方法的进程对应的通信组设备总数。 **异常:** - **TypeError** – 在参数 `group` 不是字符串时抛出。 - **ValueError** – 在后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。 .. py:class:: mindspore.communication.destroy_group(group) 销毁用户通信组。 .. note:: - GPU 版本的MindSpore不支持此方法; - 参数 `group` 不能是 `hccl_world_group`; - `destroy_group` 方法应该在 `init` 方法之后使用。 **参数:** - **group** (str) - 将被销毁的通信组,通常由 `create_group` 方法创建。 **异常:** - **TypeError** – 在参数 `group` 不是字符串时抛出。 - **ValueError** – 在参数 `group` 是 `hccl_world_group` 或后台不可用时抛出。 - **RuntimeError** – 在‘HCCL’或‘NCCL’服务不可用时抛出。