推出全新分布式计算接口,OneFlow v0.7.0发布,LiBai代码库、Serving、MLIR一应俱全...

OneFlow开源项目迎来v0.7.0版本,引入Global Tensor分布式计算接口,简化多机多卡执行。此次更新还包括nn.Graph功能完善,Eager性能深度优化,算子兼容性提升,支持Einsum和View机制。此外,OneFlow接入MLIR编译器生态,发布OneFlow-Serving v0.1.0和LiBai v0.1.0代码库,提供高效分布式训练解决方案。
摘要由CSDN通过智能技术生成

f57a62a84ea8cbd36312e0f2a3f294e2.png

今天是 OneFlow 开源的 610 天,OneFlow v0.7.0 正式发布。欢迎下载体验最新版本:https://github.com/Oneflow-Inc/oneflow

本次更新包含以下重点:

  1. 完善地提供了一种可以帮助用户轻松使用多机多卡执行的机制 :Global Tensor是 OneFlow 为社区带来的分布式执行的易用方案,用它可以方便地实现各种分布式并行策略,极大提高分布式实现的灵活性和易用性。基于 Global Tensor,OneFlow已支持 ResNet50、Wide and Deep、GPT、Bert、Swin-Transformer、InsightFace 等模型的并行化。

  2. 持续完善 nn.Graph 功能,支持包括 ZeRO 、GradAcc、Checkpointing、Pipeline 相关的高级功能,丰富了 graph.debug 模式。新增支持任意 2D SBP 转换、支持 2D SBP 的半自动推导、支持断点续训等。 新增 OneFlow Feature Stages 标识,并给 nn.Graph 所提供的每一个功能都增加该标识。就 nn.Graph 整体而言, 基础功能进入 Beta Stage,可以支持对该功能的大部分需求;高级功能进入 Alpha Stage,可支持对该功能的标准需求。

  3. 深度优化 Eager 性能, 在 V100 显卡上测试 Swin-Transformer 模型的单卡性能相比 v0.6.0 提升 3 倍。

  4. 算子相关进展:在单机单卡场景下,OneFlow 对 PyTorch 的兼容性进一步完善,OneFlow 已经支持的算子都保证和 PyTorch 的接口、语义、结果一致;另外设计了一套自动测试框架来验证一致性,常见网络可以做到import oneflow as torch  来完成迁移。相较于 v0.6.0, OneFlow 新增 16 个算子,优化 6 个算子的性能,修复 16 个算子存在的 bug。

  5. 支持 Einsum 算子和 View 机制。

  6. OneFlow 正式接入 MLIR 编译器生态。

  7. 发布 OneFlow-Serving v0.1.0,提供了开箱即用的 Triton OneFlow backend 镜像(https://github.com/Oneflow-Inc/serving)。

  8. 发布 LiBai(李白) v0.1.0:这是一个针对 Transformer 的大规模分布式并行训练代码库,相比 Megatron-LM 等定制化代码库,基于模块化设计的 LiBai 为分布式训练提供了一系列模型和训练组件,让分布式下的模型训练像单卡一样方便(https://github.com/Oneflow-Inc/libai)。

  9. 发布 Flow-Vision v0.1.0:新增 DeiT、ConvNeXt、ReXNet 等模型,完善了使用教程和文档(https://github.com/Oneflow-Inc/vision

以下为版本更新详情。

1

分布式

Global Tensor

Global Tensor 是OneFlow发布的一套全新的分布式计算接口,可以很方便地支持包括数据并行、模型并行和流水并行在内的任意并行方式。不同于普通 Tensor(下文叫 Local Tensor),Global Tensor 是一种全局视角下的 Tensor, 它的数据以特定方式分布在集群中的一组计算节点上,每个节点存储了该 Tensor 的部分或全部数据。placement 和 SBP 是每个 Global Tensor 的基本属性,描述了其数据在集群中的分布方式。

Global Tensor 的数据分布方式

Global Tensor 支持三种不同的数据分布方式,我们将其统称为 SBP。

  • Split (dim):数据以dim 维度平均切分并分布到每一个计算节点上。

  • Broadcast:数据在每一个计算节点间进行复制。

  • PartialSum:数据为每一个计算节点的 element-wise 加和。

统一的计算接口

Global Tensor 具有和 Local Tensor 基本一致的计算接口,支持以很少的改动就可以将一个单卡的代码转换成分布式方式执行。

b6ce976936f57d5dcbae968c311ff936.png

支持 Local Tensor 与 Global Tensor 的转换

  • Local Tensor 可以使用 Tensor.to_global 接口创建一个 Global Tensor,并将该 Local Tensor 作为它在当前节点的本地分量。

  • Global Tensor 可以使用 Tensor.to_local 接口返回它在当前节点的本地分量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值