OneFlow v0.5.0 预览版发布,通用深度学习框架

来源: 投稿
2021-09-22

今天是 OneFlow 开源的第 410 天,OneFlow 0.5.0 预览版发布。

本次版本更新包含以下重点:

  • 新增动态图特性:OneFlow 默认以动态图模式(eager)运行,与静态图模式(graph)相比,更容易搭建网络、调试和验证算法。

  • 面向对象式的动态图接口 nn.Module,熟悉 PyTorch 的用户可以轻松上手。

  • “一行代码转换 OneFlow 与 PyTorch 网络”:与 PyTorch 对齐的算子数目增加至200+。在 ResNet50、AlexNet 等常用网络上已通过 import oneflow as torch 和 import torch as flow 验证。注意:此特性是为方便用户由 PyTorch 迁移至 OneFlow 而设计,并不是承诺完全兼容 PyTorch。

  • 面向对象式的静态图接口:新增面向对象的静态图接口 nn.Graph。保留了 OneFlow 静态图性能优势的同时,让静态图的编程门槛与动态图接近,期待更多的算法工程师把 OneFlow 的高性能优势玩起来。附一个用 nn.Graph 搭建的ResNet50示例:https://github.com/Oneflow-Inc/models/tree/main/resnet50)

  • 易用高效的分布式训练:分布式训练是大势所趋,此版本新增的 Consistent Tensor,让用户可以像操作单机单卡一样操作整个集群,并立即看到效果。新增的 launch 模块、DDP 模块配合 OneFlow 的一致性视角让用户轻松启动分布式训练,无论是数据并行、模型并行、还是流水并行,OneFlow 均原生支持,易用高效。

1、新增动态图功能

新增与 PyTorch 兼容的动态图模式,原 PyTorch 用户可直接上手体验,无额外的学习成本和迁移成本。

https://docs.oneflow.org/master/basics/01_quickstart.html

2、nn.Module 接口

提供面向对象式的接口 nn.Module,使得搭建神经网络更简单。

https://docs.oneflow.org/master/basics/04_build_network.html

3、nn.Graph

长时间以来,动态图的性能、部署短板让人遗憾;静态图的编程门槛让人望而生畏。OneFlow 推出 nn.Graph 方案。 

nn.Graph 和 nn.Module 一样,也是面向对象式的接口,并且可以大量复用 nn.Module 中的功能。同时 nn.Graph 保留了 OneFlow 一贯的静态图的高效性能。用户只做少量的改动,就可以将 nn.Module 转为高性能的静态图。如以下示例。

class NeuralGraph(flow.nn.Graph):
    def __init__(self):
        super().__init__()
        self.model = model # model是 nn.Module 对象

    def build(self, x):
        y_pred = self.model(x)
        return y_pred

graph = NeuralGraph() # Graph 对象
y_pred = graph(x) # 首次调用会编译计算图并运行,后续调用都是直接运行

用户使用 nn.Module,可以快速验证想法,解决正确性、模型效果的问题。

需要优化性能时,再花很少的精力转为 nn.Graph。

https://docs.oneflow.org/master/basics/08_nn_graph.html

4、易用高效的分布式训练

对不少工程师而言,可能还不熟悉分布式训练,为此我们整理了分布式训练专题,它既可以作为用 OneFlow 做分布式训练的用户手册,也可以作为深度学习分布式入门的一手资料。

https://docs.oneflow.org/master/parallelism/01_introduction.html

5、Consistent Tensor

新增动态图模式下的 Consistent Tensor,用户第一次可以简单直观地看到张量在集群中如何被自动分发、组合。OneFlow 提供的一致性视角,让 OneFlow 不借助插件,就能轻松配置各种并行策略。

https://docs.oneflow.org/master/parallelism/03_consistent_tensor.html

6、DDP 模块

新增 DDP模块用于做分布式数据并行。它使得用户只需要改动极少的代码,就能将单机训练脚本扩充为分布式脚本。

https://docs.oneflow.org/master/parallelism/05_ddp.html

7、易用、原生的流水并行支持

使用 nn.Graph,通过设置 Consistent Tensor 的 placement 和 sbp 属性,用户只需要关注流水并行的逻辑。支持高效流水所需的 micro batch、张量缓存分配等问题都由 OneFlow 自动解决。

查看流水并行示例代码:

https://docs.oneflow.org/master/parallelism/06_pipeline.html

其他人都在看

展开阅读全文
4 收藏
分享
加载中
更多评论
0 评论
4 收藏
分享
返回顶部
顶部