OneFlow v0.5.0 預覽版釋出,通用深度學習框架

2021-09-22 21:00:08

今天是 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

其他人都在看

展開閱讀全文