TensorFlow 源代碼初讀感受


把自己微博發的文章:http://www.weibo.com/1804230372/En7PdlgLb?from=page_1005051804230372_profile&wvr=6&mod=weibotime&type=comment 也轉到博客來,算是自己寫的很短的一篇博客了。

花了一些時間看了一下TensorFlow 核心(core)部分的源代碼,主要是C++的部分。除了C++ 11的代碼實在有些燒腦以外,感嘆一下TensorFlow的架構設計得真不錯:

首先TensorFlow core要解決的問題全部集中在了圖上:每個節點(node)就是一個操作(op),比如說矩陣乘法,每條邊(edge)就是操作的輸入也就是數據或者依賴關系(稱為control edge)。每個op對應了不同的實現,也被稱為kernel,比如說用GPU去做矩陣運算的實現,或者FPGA去做加法的實現等等。

然后就是如何優化了:

  1. 首先是一個圖的變換操作:用戶輸入的圖根據op、kernel和輸入/中間數據,被分布到不同的機器的硬件(device)上。這樣把一個大圖分拆成為了幾個子圖(每個device上一個?)。
  2. 然后對分拆之后的子圖再進行進一步的優化,比如說把那些無法訪問的節點(dead node)刪掉,把那些輸入、輸出、操作都一樣的子圖找出來防止重復計算 (Common Subexpression Elimination)等等
    3)最后就是一些下層模塊的優化,比如說RPC怎么做更快,Kernel怎么實現更優化等等。

這樣的架構設計基本上能保證
1)不同層級之間的耦合很小,不至於一個改動牽一而發動全身。
2)項目的擴展性很好,有很少的瓶頸。比如說完全可以有一個小團隊專門進行RPC的實現(RDMA),或者說用FPGA來實現不同op的kernel等等。這樣可以完全讓一個上百人的團隊來並行的開發kernel和周邊的東西。

目前讀下來唯一覺得可能會導致擴展性的地方是Session還有圖優化部分的實現,很難讓大團隊能夠在這個部分並行工作,不過這部分代碼也不是勞動密集型的改動,所以看起來也沒什么大問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM