昇腾 AI 集群基于 910B/910C NPU、HCCL 集合通信、MindSpore/MindFormers 构建分布式训练底座。大模型训练普遍采用多维混合并行,融合数据并行(DP)、张量并行(TP)、流水线并行(PP)、专家并行(EP),解决单卡显存不足、通信瓶颈、算力利用率低等痛点。

多维混合并行依托集群服务器网络(RoCE v2)、HCCL 跨机通信、框架分布式原语协同调度。本文基于昇腾集群、MindSpore 分布式接口,提供并行配置、初始化代码、通信调试脚本。

硬件环境:昇腾 910B 集群,MindSpore 2.3,CANN 8.x,HCCL,RoCE 高速网络

一、多维混合并行基础架构

多维并行维度定义:

TP 张量并行:单层 Transformer 切分到多个 NPU,层内横向拆分;单机内为主,低延迟通信;

PP 流水线并行:模型纵向分层切分,多卡串联执行;缓解单卡显存压力;

EP 专家并行:MoE 模型专家路由拆分;

DP 数据并行:完整模型副本,分发不同训练样本;

全局并行关系:WorldSize = DP * TP * PP * EP。

昇腾集群中,TP 优先单机内部署,PP/DP 跨服务器依托 RoCE+HCCL 通信。

二、MindSpore 多维混合并行初始化代码

import mindspore as ms
from mindspore.communication import init, get_rank, get_group_size
from mindspore.parallel import set_algo_parameters
from mindspore.context import ParallelMode

# ========== 1. 多维并行超参配置 ==========

# 根据昇腾集群拓扑设置
DP_SIZE = 2 # 数据并行维度
TP_SIZE = 2 # 张量并行维度
PP_SIZE = 2 # 流水线并行维度
EP_SIZE = 1 # MoE专家并行,非MoE模型置1
WORLD_SIZE = DP_SIZE * TP_SIZE * PP_SIZE * EP_SIZE
def init_ascend_mixed_parallel():

# 昇腾NPU设备设置
ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")

# 初始化通信域 HCCL
init()
rank_id = get_rank()
world_size = get_group_size()
print(f"Global rank:{rank_id}, world size:{world_size}")

# 校验集群启动进程数量匹配多维配置
assert world_size == WORLD_SIZE, f"进程数{world_size} != DP*TP*PP={WORLD_SIZE}"

# 设置自动并行策略,开启多维混合并行
ms.set_auto_parallel_context(
parallel_mode=ParallelMode.AUTO_PARALLEL,
gradients_mean=True,
full_batch=True,
enable_parallel_optimizer=True,
search_mode="sharding_propagation"
)

# 多维并行切分参数
set_algo_parameters(
fully_use_devices=True,
tensor_parallel=TP_SIZE,
pipeline_parallel=PP_SIZE,
data_parallel=DP_SIZE
)
return rank_id

# 执行初始化
if __name__ == "__main__":
    rank = init_ascend_mixed_parallel()

三、Transformer 模型多维切分示例(MindSpore)

import mindspore as ms
from mindspore.communication import init, get_rank, get_group_size
from mindspore.parallel import set_algo_parameters
from mindspore.context import ParallelMode
# ========== 1. 多维并行超参配置 ==========
# 根据昇腾集群拓扑设置
DP_SIZE = 2    # 数据并行维度
TP_SIZE = 2    # 张量并行维度
PP_SIZE = 2    # 流水线并行维度
EP_SIZE = 1    # MoE专家并行,非MoE模型置1
WORLD_SIZE = DP_SIZE * TP_SIZE * PP_SIZE * EP_SIZE
def init_ascend_mixed_parallel():
    # 昇腾NPU设备设置
    ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
    # 初始化通信域 HCCL
    init()
    rank_id = get_rank()
    world_size = get_group_size()
    print(f"Global rank:{rank_id}, world size:{world_size}")
    # 校验集群启动进程数量匹配多维配置
    assert world_size == WORLD_SIZE, f"进程数{world_size} != DP*TP*PP={WORLD_SIZE}"
    # 设置自动并行策略,开启多维混合并行
    ms.set_auto_parallel_context(
        parallel_mode=ParallelMode.AUTO_PARALLEL,
        gradients_mean=True,
        full_batch=True,
        enable_parallel_optimizer=True,
        search_mode="sharding_propagation"
    )
    # 多维并行切分参数
    set_algo_parameters(
        fully_use_devices=True,
        tensor_parallel=TP_SIZE,
        pipeline_parallel=PP_SIZE,
        data_parallel=DP_SIZE
    )
    return rank_id
# 执行初始化
if __name__ == "__main__":
    rank = init_ascend_mixed_parallel()

MindSpore 自动并行模块根据多维配置,自动完成:张量权重切分、流水线 stage 分配、梯度聚合、HCCL 通信域创建。

四、昇腾集群启动脚本(msrun 分布式拉起)

start_cluster.sh,适配多服务器昇腾集群,RoCE 网络 + HCCL:

#!/bin/bash
# 昇腾集群多维混合并行启动脚本
export HCCL_IF_IP=192.168.1.0/24       # RoCE网卡网段
export HCCL_ALLOW_P2P_WITH_MULTI_STREAM=1
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
# 全局总卡数 DP*TP*PP = 2*2*2=8卡
msrun --worker_num=8 \
      --local_worker_num=4 \
      --master_addr="192.168.1.10" \
      --master_port=29500 \
      --log_dir=./parallel_log \
      python train_mixed_parallel.py

关键环境变量:

HCCL_IF_IP 指定 RoCE 网卡,跨机并行必须配置;

多机集群所有节点执行该脚本,自动构建全局通信域。

五、HCCL 通信调试脚本(定位集群并行通信瓶颈)

# hccl_check.sh 检测集群NPU间通信连通性
#!/bin/bash
export HCCL_IF_IP=192.168.1.0/24
# HCCL单机/跨机带宽测试
ascend-samples hccl_test \
    --device_num=8 \
    --test_type=allreduce \
    --data_size=102400000

多维混合并行场景,TP 依赖单机 AllReduce;DP/PP 依赖跨机 AllGather、Send/Recv。通信测试用于判断 RoCE 网络是否成为并行训练瓶颈。

六、多维并行负载与拓扑优化代码(约束策略)

# 并行拓扑约束:TP尽量限制单机内,减少跨机通信开销
from mindspore.parallel import set_parallel_constraint
def set_ascend_topology_constraint():
    # 张量并行维度不跨服务器,优化通信时延
    set_algo_parameters(tensor_parallel_within_server=True)
    # 流水线Stage均衡分配,避免部分NPU空闲
    set_algo_parameters(pipeline_balance_virtual_pipeline=True)
    # 开启虚拟流水线,提升PP利用率
    ms.set_auto_parallel_context(
        pipeline_stages=PP_SIZE,
        virtual_pipeline=2
    )
set_ascend_topology_constraint()

昇腾集群实践规范:TP 布局单机内部;PP 可以跨节点;DP 维度全局扩展。违背该拓扑会引发 RoCE 流量暴涨,训练吞吐量暴跌。

七、典型问题与集群架构调优要点

通信域冲突

多维并行会创建多个 HCCL 子通信组,MindSpore 自动管理;旧版本框架建议手动划分通信域,避免集合通信互相抢占带宽。

显存不均衡

PP 流水线并行不同 stage 计算量不均,启用virtual_pipeline虚拟流水线,提升昇腾 NPU 利用率。

网络瓶颈

TP 优先单机,减少跨机 AllReduce;超大模型 PP 跨节点时,RoCE 交换机开启优先级队列。

启动进程匹配

WorldSize严格等于 DP×TP×PP,进程数量不匹配直接触发并行初始化失败。

八、总结

昇腾 AI 集群服务器依托 NPU 硬件、HCCL 高速通信、MindSpore 自动并行框架,实现 DP/TP/PP/EP 多维混合并行架构。多维并行解决超大模型训练显存墙问题,合理的维度切分与集群拓扑布局,平衡算力、显存、通信带宽三者关系。

从工程落地角度,开发者通过 MindSpore 并行接口配置多维参数,配合 msrun 集群调度脚本拉起分布式任务;依托 HCCL 环境变量绑定 RoCE 网卡,保障跨服务器通信性能。多维并行不是维度越大越好,需要结合昇腾服务器单机卡数、交换机组网结构调整 TP/PP/DP 配比。

在千亿大模型训练场景,多维混合并行是昇腾集群标准部署方案,配合集群负载调度、通信性能监控,充分释放集群整体算力。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐