可用于大语言模型、多模态大模型训练及强化学习等场景,提供昇腾超节点亲和的分布式并行加速能力,支持资源池化管理、拓扑感知调度、FP8混合精度训练,实现模型与系统优化解耦,保障全流程确定性和训推一体。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 6 个月前 | ||
| 10 个月前 | ||
| 7 个月前 | ||
| 9 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 7 个月前 | ||
| 6 个月前 | ||
| 7 个月前 | ||
| 8 个月前 | ||
| 7 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 9 个月前 | ||
| 7 个月前 |
HyperParallel
昇腾超节点亲和的分布式并行加速库,简化超节点编程,释放算力潜能。
HyperParallel提供昇腾超节点亲和的分布式并行加速能力,在保障易用性的前提下,针对昇腾超节点资源池化、对等架构、网路拓扑分层多样、FP8低精格式等架构特点,实现了集群的分布式并行到芯片内多核并行,支持CPU DRAM和NPU HBM的池化统一管理,支持拓扑感知调度和通信路径规划,支持FP8混合精度训练等昇腾超节点亲和的加速能力。
关键设计思路:
模型和系统优化解耦:随着LLM和多模态算法新架构的不断演进,性能优化技术也随之向前持续创新,传统的算法和系统优化融合架构给算法迭代和系统长期维护带来了困难。我们希望通过HyperParallel,支持编程模型从系统优化内嵌到模型脚本演进到模型和系统优化解耦,隐式注入并行、重计算、offload等系统优化;支持并行范式从SPMD演进到MPMD,进一步支持集群MPMD和多核MPMD协同优化;支持存算关系从Stateful演进到Stateless计算状态分离。支持大语言模型、多模态大模型训练及强化学习等能力。
全流程确定性:为了进一步保障训练稳定性和精度可复现性,HyperPrallel支持了全流程的确定性,包括高性能确定性计算、通信、数据预处理、以及随机数的确定性,支持浮点bitwise对齐,所有支持的模型均会用确定性进行验证。虽然有部分的性能劣化,但出于对训练精度可复现性、SDC的快速发现、bug识别,我们仍然建议训练开启确定性。
训推一体:随着Reasoning RL和Agentic RL任务越来越复杂,训推不一致问题导致强化学习训练难以收敛的问题愈发突出。HyperParallel会探索训推一体架构,通过一套加速框架同时实现训练和推理的性能优化,加强训推一致性,保障RL收敛。
动静混合:基于静态图的优化是进一步提升性能的重要手段,比如基于静态图的通算并发、内存分析、执行序编排等能力可以有效优化性能,在动态图模式下并不容易实现。但动转静的编译支持难度非常大,目前还不能实现完全的动转静。HyperParallel会通过一些语法的约束,支持局部的动转静,使用MindSpore高阶图优化能力,进一步提升性能。
本项目正在快速迭代,相关特性会持续开源,欢迎共建。
架构简介
HyperShard:编程模型演进,系统优化内嵌到模型 -> 模型和系统优化解耦
- SuperPoD Layout:Tensor切分、Device映射、通信路径统一建模,实现超节点单卡抽象;
- 声明式HSDP/TP/CP/EP:并行、重计算、offload等优化隐式注入到模型,实现模型代码和系统优化代码解耦,提高算法开发效率;
HyperMPMD:并行范式演进,SPMD -> 集群MPMD -> 集群+多核MPMD
- 分布式MPMD:支持异构模型切分,支持模型切片任意分配卡数;
- 多核MPMD:芯片内多核MPMD并行,结合核级内存语义单边通信,增强通算掩盖和MAC利用率;
HyperOffload:算存关系演进,Stateful -> Stateless计算状态分离
- 远端和本地Tensor统一编程:支持tensor位置分配,隐藏远端数据传输,提升集群内存利用率;
- 远端Tensor预取和缓存,全模型Offload:DDP/HSDP+Offload替换DP/TP/PP/CP/SP/EP等复杂并行模式,简化系统设计,提升性能;
关键特性
-
Models
-
HyperShard
- DTensor
- HSDP
- Shard
- TP
- EP
- CP
- TP
- 分布式随机数
- DTensor
-
HyperMPMD
- PipeLine并行
- 子图切分
- 多核并行
- PipeLine并行
-
HyperOffload
-
AutoParallel
-
单边通信
-
故障快恢
-
-
工具
-
精度监控
-
DryRun
-
安装教程
当前仅支持从源码安装,你需要执行:
git clone https://gitcode.com/mindspore/hyper-parallel.git
cd hyper-parallel
pip install .
HyperParallel 依赖深度学习框架,在使用HyperParallel前,你需要:
- 安装深度学习框架
- 推荐安装的MindSpore版本 >= 2.8,最好使用最新的MindSpore版本,参考此处
使用说明
- 使用hsdp进行数据并行或zero切分优化
from hyper_parallel import hsdp
# 配置数据并行
model = hsdp(model, shard_size=1)
# 或者配置zero切分
model = hsdp(model, shard_size=dp_size, optimizer_level="level1")
- 使用shard进行张量并行
from mindspore.nn.utils import no_init_parameters
from hyper_parallel import DTensor, Layout, hsdp, init_parameters, shard
# 定义张量排布
layout = Layout((dp, mp), ("dp", "mp"))
x_layout = layout("dp", "mp")
w_layout = layout("mp", "None")
out_layout = layout()
# 网络权重延后初始化
with no_init_parameters():
model = SimpleModel()
# 对网络输入/输出/权重做切分配置
sharding_plan = { "forward": { "input": (x_layout,), "output": (out_layout,)},
"parameter": {"weight": w_layout}}
model = shard(model, sharding_plan)
# 可以进一步配置hsdp
model = hsdp(model, shard_size=hsdp_shard_size, threshold=0)
# 权重分片初始化
model = init_parameters(model)
# 执行
x = DTensor.from_local(local_x, x_layout)
run_model(x, model)
- 使用PipelineStage和PipelineSchedule进行流水线并行
from hyper_parallel import PipelineStage, Schedule1F1B
# 将切分后的module封装成PipelineStage
stage = PipelineStage(splited_model, stage_index, stage_num=4)
# 选择流水线并行的调度
schedule = Schedule1F1B(stage, micro_batch_num=8)
# 执行
x = DTensor.from_local(local_x, x_layout)
schedule.run(x)
参与贡献
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
如果您对HyperParallel有任何建议,请通过issue与我们联系,我们将及时处理。 如果对HyperParallel的技术感兴趣,或者想参与贡献代码,欢迎加入Parallel Training System SIG。