清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

機器之心報道

繼 Theano、Caffe 之後,又一個由高校主導的深度學習框架開源了,而且還是國產。

深度學習框架越來越多,主導的團隊也從高校研究機構漸漸轉向了科技巨頭。但是,學界在這一領域的力量不容忽視。今日。清華大學開發了一個名為計圖(Jittor)的深度學習框架。這一框架有望為深度學習社區提供新的方案,也能夠推動深度學習框架國產化的進程。

據悉,計圖(Jittor:Just in Time)是一個採用元算子表達神經網絡計算單元、完全基於動態編譯(Just-in-Time)的深度學習框架,其主要特性為元算子和統一計算圖。

據官網介紹說:「研究團隊將神經網絡所需的基本算子定義為元算子」,元算子非常底層,通過相互融合可以完成複雜的深度學習計算,體現出了易於使用的特點。並且研發團隊表示,採用元算子的 Jittor 已超越 Numpy,能夠實現更復雜更高效的操作。

而另一層面,統一計算圖則是融合了靜態計算圖和動態計算圖的諸多優點,在易於使用的同時,提供高性能的優化。基於元算子開發的深度學習模型,可以被計圖實時地自動優化並且運行在指定的硬件上,如 CPU、GPU。

目前 Jittor 已開源,用戶可以採用 pip 等方法下載使用。

Jittor 官網:https://cg.cs.tsinghua.edu.cn/jittor/

項目地址:https://github.com/Jittor/jittor


即時、易用、可定製:實現和優化分離的框架

據官網介紹,Jittor 在設計時秉持易用、靈活、即時的設計理念:

  • 易用且可定製:只需要數行代碼,就可定義新的算子和模型。
  • 實現與優化分離:可以通過前端接口專注於實現,而實現自動被後端優化。
  • 所有都是即時的:Jittor 的所有代碼都是即時編譯並且運行的,包括 Jittor 本身。用戶可以隨時對 Jittor 的所有代碼進行修改,並且動態運行。

Jittor 作為全新的深度學習框架,有幾大新特性值得關注。首先,Jittor 採用了元算子的概念,將各種基本計算定義為元算子,並通過結合不同元算子,實現深度學習中的各項算子功能。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

元算子融合。

其次,在算子的設置上,團隊將元算子的反向傳播進行了閉包,即元算子的反向傳播也是元算子。這樣避免了重複開發。此外,還支持計算任意高階導數。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

高階導數及反向傳播閉包。

然後,在編程語言上,Jittor 採用了靈活而易用的 Python。用戶可以使用它,編寫元算子計算的 Python 代碼,然後 Jittor

將其動態編譯為 C++,實現高性能。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

算子動態編譯。

更重要的是,Jittor 內置了優化編譯遍(complier pass)功能,和 LLVM 兼容。優化過程會根據運行的硬件而定,以下為已支持的優化編譯遍。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

自動優化。

在內存管理上,CPU 和 GPU 內存統一管理。GPU 內存不夠的時候會調用 GPU。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

統一內存管理。

而在接口方面,Jittor 同時提供了同步和異步接口,切換不會造成性能損失。從而帶來了易用性和高效率。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

高效同步異步接口。

最後值得注意的是,為了幫助 Jittor 的發展,並吸收優秀框架的特性。Jittor 採用了和 PyTorch 相似的模塊化接口,並有輔助轉換腳本,還有和 PyTorch 一樣的 Numpy+pickle 協議,使得兩者的模型可以互相加載和使用。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch

模型遷移。

有了如此眾多的特性,估計用來寫模型會有非常好的體驗。此外,Jittor 使用 Python 和 C ++編寫,也支持 GPU 與 CUDA。

測評結果

Jittor 的性能如何,官方也提供了測評結果進行參考。目前 ResNet、VGG、SSD、DeepLab、LSGAN 等多個網絡模型已經在 Jittor 平臺實現,可供用戶使用。與同類型框架相比,Jittor 在收斂精度一致情況下,推理速度取得了 10%-50% 的性能提升。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch


示例代碼

Jittor 前端語言為 Python。前端使用模塊化的設計,類似於 PyTorch,Keras,後端則使用高性能語言編寫,如 CUDA,C++。Jittor 官網目前已提供了示例代碼,我們可以來分析一下。

下面的代碼演示瞭如何一步一步使用 Python 代碼,從頭對一個雙層神經網絡建模。

import jittor as jt
from jittor import Module
from jittor import nn
class Model(Module):
def __init__(self):
self.layer1 = nn.Linear(1, 10)
self.relu = nn.Relu()
self.layer2 = nn.Linear(10, 1)
def execute (self,x) :
x = self.layer1(x)
x = self.relu(x)
x = self.layer2(x)
return x
def get_data(n): # generate random data for training test.
for i in range(n):
x = np.random.rand(batch_size, 1)
y = x*x
yield jt.float32(x), jt.float32(y)
model = Model()
learning_rate = 0.1
optim = nn.SGD(model.parameters(), learning_rate)
for i,(x,y) in enumerate(get_data(n)):
pred_y = model(x)
loss = ((pred_y - y)**2)
loss_mean = loss.mean()
optim.step (loss_mean)
print(f"step {i}, loss = {loss_mean.data.sum()}")

以上為實現一個簡單的全連接神經網絡的代碼。可以看到,類似於 PyTorch,只需要導入包,採用類繼承的方式定義模型、數據處理(分批等)方式,並設置訓練循環即可。從上手難度來看,熟悉 PyTorch 的用戶可以直接上手,甚至沒有因為變量名不同而帶來影響。

研究團隊

據官網介紹,Jittor 的開發團隊來自清華大學計算機系的圖形學實驗室,實驗室負責人為胡事民教授。

清華開源Jittor:首個國內高校自研深度學習框架,一鍵轉換PyTorch


該實驗室成立於 1998 年 3 月,2007 年發展成為清華大學可視媒體研究中心,2010 年獲批成為北京市工程技術研究中心,同年和騰訊公司合作成立清華-騰訊互聯網創新技術聯合實驗室,並於 2018 年,成立北京信息科學與技術國家研究中心下的可視媒體智能計算團隊。目前有教授 2 名、副教授 3 名、助理研究員 1 名、博士後 4 名和研究生 50 多名。

Jittor 項目的主要研發主力為實驗室的梁盾、楊國燁、楊國煒和周文洋等等博士生,此外該項目也得到了清華-騰訊聯合實驗室的資助和支持。


分享到:


相關文章: