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


    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 接口返回它在当前节点的本地分量。

  • 相关阅读:
    Optica数据库 (原OSA美国光学学会电子期刊)文献去哪里查找下载
    如何配置群辉相册Synology Photos实现公网访问并与朋友共享照片
    基础课24——开放域QA问答
    软考:信息安全工程师4(系统安全)
    SpringBoot集成Swagger
    【mongo 系列】聚合知识点梳理
    MySQL-多表查询
    事务的七种传播行为
    图形渲染基础学习
    基于Ascend910+PyTorch1.11.0+CANN6.3.RC2的YoloV5训练推理一体化解决方案
  • 原文地址:https://blog.csdn.net/OneFlow_Official/article/details/124011823