TF程式設計框架原理筆記

2021-10-09 01:40:58 字數 2652 閱讀 5637

1、tf設計原則

(1)高效能

針對tf中的運算元,設計過程中對底層硬體進行優化;可以併發執行沒有資料依賴的節點;針對生成的計算圖,也提供了一系列的優化操作。

(2)易開發

(3)可移植

可工作於各種型別的異構系統;每個運算元提供在不同裝置上的不同底層實現;

2、計算圖機制

(1)自動求導:框架自動推斷反向計算圖,完成導數計算。

常用求導方法包括手動求解法、數值求導法、符號求導法和自動求導法。

手動求解法是傳統的反向傳播演算法,採用鏈式法則手動求解梯度公式,但不適合神經網路。數值求導法是用導數的原始定義求解(求lim),一開始就帶入數值求近似計算,優點是易操作,且可對使用者隱藏求解過程,缺點是計算量大,求解速度慢,且可能引起捨入誤差和截斷誤差。符號求導法即用表示式來進行自動操作,例如d/dx (f(x)+g(x)) = d/dx f(x) + d/dx g(x),直接對代數表示式進行求解,最後才帶入數字,但容易帶來表示式膨脹的問題。tf所用的自動求導法是將符號求導法應用於最基本的運算元,如加減乘除sin等,然後兩次符號求導之間做數值代入。具體計算方法如鏈結所示。

(2)控制流

switch,merge,enter,exit,nextiteration

(3)計算圖執行模式

client:通過session介面與master和worker介面通訊。worker可以是乙個,也可以是多個。類似與使用者介面。

master:控制所有的worker按照計算圖執行。

worker:每個worker負責乙個或者多個裝置的仲裁訪問,並根據master指令,執行計算裝置中的計算圖節點。

(4)計算圖本地執行

剪枝、分配、優化、切分。

剪枝:得到本地執行的最小子圖。包括為輸入輸出建立與外界的互動,去除與最終輸出節點無關的節點和邊。

通過functioncallframe函式呼叫幀來解決輸入輸出值傳遞的問題,)在每個輸入節點前插入arg節點,所有的輸入節點連線到source節點上,並通過控制依賴邊相連;在每個輸出節點後面加入retval節點,所有的輸出節點連線到sink節點上,也通過控制依賴邊相連,最終形成完整的計算圖。

從輸出節點開始進行寬度搜尋遍歷,刪除沒有接觸到的節點和邊,將每個連通圖中入度為0的節點通過控制依賴邊與source節點相連,出度為0的節點通過控制依賴邊和sink節點相連上。

分配:在多裝置環境中,對計算圖中的每個節點如何分配裝置,來保證計算的快速執行

演算法輸入: cost model。 包含圖中每個節點的輸入輸出tensor的資料量、每個節點的預計計算時間

演算法執行過程:

1、從計算圖起始點開始遍歷;2、對於遍歷中的每個節點,考慮其可行的裝置集合;3、如果裝置不提供實現特定操作的核心,則裝置不可行;4、如果某個節點具有多個可行裝置,則採用貪心演算法,檢查該節點在所有可行裝置上的完成時間(包括執行和傳輸時間),將最快完成的裝置分配給該節點;5、重複2-4直到遍歷完成整個圖。

優化:

計算圖切分和本地通訊

完成每個節點裝置分配後,將整個計算圖按照所分配裝置分成若干子圖,每個裝置一張子圖。

(5)計算圖分布式執行

分布式通訊分為點到點通訊和集合通訊。

3、tf系統實現

(1)裝置抽象和管理

tf將裝置分為本地和遠端裝置兩類。

tf使用註冊機制來管理裝置,每個裝置負責乙個子圖的運算,可自定義裝置,裝置繼承devicebase類,進一步設計localdevice類,本地裝置基於localdevice建立自己的裝置類,再通過註冊機制將裝置註冊到tf執行時。

(2)網路和通訊

tf的裝置間通訊由send和receive節點進行,使用rendezvous機制(生產者消費者模型)完成資料互動。

對於本地傳輸來說,tf提供了localrendezvous實現類,對於使用跨程序通訊場景來說,tf提供了remoterendezous實現系列。(這裡講得有點寬泛,後續考慮看原始碼)

(3)運算元實現

opkernel是運算元的特定執行,依賴於底層硬體。

TF學習筆記1

一 關於tensorflow的基本概念 tensorflow的計算模型 資料模型 執行模型,主要是一些理論概念的整理。1 tensorflow的計算模型 計算圖 tensor 張量,即可簡單理解為多維陣列,表明其資料結構。flow 流,直觀的表達了張量之間通過計算相互轉化的過程,體現其計算模型。te...

3 30學習筆記 tf2 0

keras 初始化 不同的層可能使用不同的關鍵字來傳遞初始化方法,一般來說指定初始化方法的關鍵字是kernel initializer 和 bias initializer from keras import initializers model.add dense 64,kernel initia...

springMVC 框架原理

springmvc是spring框架的乙個模組,springmvc和spring無需通過中間整合層進行整合 springmvc是基於mvc的web框架。第一步 發起請求到前端控制器 dispatcherservlet 第四步 前端控制器呼叫處理器介面卡去執行handler 第五步 處理器介面卡去執行...