早餐 | 第二十八期 · Graph Transformation(一)

2021-02-26 OpenVINO 中文社區

內容來源| 曹慧燕

內容排版| 張洺瑄

*music by audionautix.com

新年好!今天是牛年的第一期早餐,新的一年,希望大家跟我一起來像勤懇的牛一樣踏踏實實地學習OpenVINO,也希望OpenVINO加入更多新的Feature,不斷成為滿足大家各種需求的OpenVINew,越來越OpenVINiu!今天我們一起來學習MO Extension中的Graph Transformation。在模型轉換的Pipeline中,有Front Phrase, Middle Phrase 以及 Back Phrase的Graph Transformation。MO中提供了不同的基類來實現這些Transformation,這些基類都有一些共同的屬性和方法。今天我們一起來學習MO Extension中的Graph Transformation。在模型轉換的Pipeline中,有Front Phrase, Middle Phrase 以及 Back Phrase的Graph Transformation。MO中提供了不同的基類來實現這些Transformation,這些基類都有一些共同的屬性和方法。

今天我們一起來學習MO Extension中的Graph Transformation。在模型轉換的Pipeline中,有Front Phrase, Middle Phrase 以及 Back Phrase的Graph Transformation。MO中提供了不同的基類來實現這些Transformation,這些基類都有一些共同的屬性和方法。

●enabled屬性指定該Transformation是否開啟。在模型轉換的過程中,該值可以在運行期動態修改。默認值為True。

●id屬性唯一標識每個Transformation。除了可以通過enabled屬性來設置Transforamtion是否開啟以外,還可以通過以逗號分隔的id列表來設置環境變量MO_ENABLED_TRANSFORMS (MO_DISABLED_TRANSFORMS),從而決定這些Transformation是否開啟。環境變量的值會覆蓋enabled屬性。id屬性是Optional屬性。

●run_not_recursively屬性指定該Transformation是否在sub-graphs中被執行,比如TensorIterator 和 Loop 的body。默認值為 True。

●force_clean_up屬性指定在該Transformation之後是否立即清理graph。清理graph會移除graph中所有從model inputs到達不了的節點。默認值為False。

●force_shape_inference屬性指定在該Transformation之後,need_shape_inference屬性值為True的節點是否需要重新執行shape inference。模型優化器為在轉換過程中inputs發生改變的節點自動設置此屬性,或者開發人員可以在轉換過程中為特定節點手動設置此屬性。默認值為False。

●graph_condition 屬性指定一組函數,改組函數都只有一個參數 - Graph對象。只有所有的函數都返回True以後該Transformation才會執行。如果這個屬性沒有設置值,則不做任何check。

●run_before()方法返回一組該Transformation必須在其之前執行Transformations。

●run_after()方法返回一組該Transformation必須在其之後執行的Transformations。

為了保證不同階段的Transformation的執行順序,模型優化器定義了一些Anchor Transformation,這些Anchor Transformation並沒有任何實際的操作。用戶自定義的transformations默認在對應的Start 和Finish anchor transformations之間執行(如果run_before() 和run_after()沒有被重寫的話 )。

Front Phase Transformations

●Pattern-Defined Front Phase Transformations – 當sub-graph匹配定義的Pattern時會觸發。

●Specific Operation Front Phase Transformations – 當節點匹配指定op 屬性值時會觸發。

●Generic Front Phase Transformations

●在JSON配置文件中定義Transformation,並通過命令行參數 --transformations_config指定,從而手動開啟Transformation。(僅支持TensorFlow*, ONNX* 和MXNet*模型)

○Node Name Pattern Front Phase Transformations○Front Phase Transformations Using Start and End Points○Generic Front Phase Transformations Enabled with Transformations Configuration File

Pattern-Defined Front Phase Transformations

模型優化器中定義了mo.front.common.replacement.FrontReplacementSubgraph 和mo.front.common.replacement.FrontReplacementPattern 作為該類Transformation 的基類,工作方式如下:

1. 開發者定義一個需要被轉換的sub-graph pattern,該sub-graph由一組節點和邊組成。

2. 模型優化器會在原始圖中查找所有匹配的sub-graph。

3. 模型優化器執行開發者自定義的函數對每個匹配到的sub-graph進行graph transformation。開發者可以重載基類中不同的函數:

a. 重載replace_sub_graph(self, graph, match)方法。這種情況下,模型優化器僅執行重載函數,傳入graph對象及描述sub-graph pattern的dictionary。開發者需要自己實現transformation並將新生成的節點連接到graph中。

b. 重載generate_sub_graph(self, graph, match) 方法。該方式太複雜,不推薦使用。

要匹配的sub-graph的pattern在pattern()函數中定義,該函數返回一個dictionary,dictionary中包含兩個key:nodes 和edges:

●Nodes的value是一組包含兩個elements的tuples

○第一個element是node的別名,在定義edges及transformation函數中會使用。

○第二個element是一個node屬性的dictionary。Key是屬性的名稱,value是屬性的值,可以是一個要匹配的特定的值,或者是一個以屬性值為參數的函數,該函數返回屬性是否匹配。

●Edges的value是一組包含兩個或三個elements的tuples

○第一個element是生成tensor的node的別名

○第二個element是使用該tensor的node的別

○第三個element(可選)是edge屬性的dictionary。通常,該dictionary包含類似in 和out 之類的定義input和output ports的屬性。

看一個front phrase transformation的例子:extensions/front/Mish_fusion.py,該轉換將定義Mish 激活函數的sub-graph融合為單個操作:https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_prepare_model_customize_model_optimizer_Customize_Model_Optimizer.html

----

*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.

----

 OpenVINO 中文社區 

微信號 : openvinodev

B站:OpenVINO中文社區

OSCHINA:OpenVINO 中文社區

「開放、開源、共創」

‍‍‍‍‍‍‍‍‍‍‍‍致力於通過定期舉辦線上與線下的沙龍、動手實踐及開發者交流大會等活動,促進人工智慧開發者之間的交流學習。‍‍‍‍‍‍‍‍‍‍‍‍

點擊閱讀原文立即體驗OpenVINO

相關焦點

  • 圖論Graph theory
    圖 Graph在最普遍的意義上的術語,圖是一個有序對G = (V, E)由一組頂點V或節點或邊緣點的一組E或弧行,這是2-element V的子集(即一條邊與兩個頂點相關聯,這協會的無序對由兩個頂點)。
  • 每日一詞根gram/graph 「written character」
    gram/graph思維導圖gram/graph相關單詞:grammar [ɡrmr]書法;筆跡■拆: calli(beautiful)+graph(write)+y -> 漂亮的字體 -> 書法geography [diɑɡrfi] n.
  • To Seize the Opportunity of Transformation and Shape the...
    I believe that the convening of this Global MOOC Conference and the establishment of this alliance are of great significance for promoting the transformation of higher education and achieving more inclusive
  • 一文讀懂什麼是Graph Embedding
    "A comprehensive survey of graph embedding: problems, techniques and applications." IEEE Transactions on Knowledge and Data Engineering (2018).[2] Goyal, Palash, and Emilio Ferrara.
  • GraphQL 從入門到實踐
    3.1 環境部署首先我們把 MongoDB 啟起來,這個過程就不贅述了,網上很多教程;搭一下 graph-pack 的環境npm i -S graphpack在 package.json 的 scripts 欄位加上:"scripts": { "dev": "graphpack", "build
  • GraphQL入門指南
    然後使用npm安裝必要的依賴:npm init -fnpm install graphql express express-graphql --saveData作為一個簡單的數據伺服器,我們僅使用最簡單的JSON文件作為數據源:{  "1": {    "id": "1",    "name": "Dan"  },  "2":
  • 一文了解阿里一站式圖計算平臺GraphScope
    > # project the projected graph to simple graph.  = graphscope.triangles(simple_g)   # add the results as new columns to the citation graph sub_graph = sub_graph.add_column(ret1, {"kcore":
  • Tomica|多美卡紅白盒模型小車全賞析(第二十八期)
    Tomica全圖鑑賞析第二十八期這期打亂一下順序說哈~NO.28-1NO.28-2它的主要競爭對手直指豐田Alphard和日產Elgrand,定位上要高於本田家族的另外一款MPV——奧德賽。NO.28-8豐田IQ的定位和Smart相同,是典型的都市代步微型車,歐洲市場稱這類車為city car,意指能在城市中自由穿梭的車。
  • Graph 新題型 Min Swaps to Sort Array
    「我一開始拿到題目的時候一點思路也沒有。
  • 資料|Graph embedding|Graph Neural Network 學習資料匯總
    Graph embedding techniques, applications, and performance: A surveyDeep Learning on Graphs: A Survey. arxiv 2018相關的TutorialKDD 2018 Tutorial2018年KDD上的Tutorial從數據中推斷圖(graph
  • 代碼搜尋引擎和代碼瀏覽器 Sourcegraph 宣布開源
    ://github.com/sourcegraph/sourcegraph。Sourcegraph 是一款能夠根據語義來把 Web 上的開原始碼編入索引的代碼搜索瀏覽工具。你可以從代碼倉庫和安裝包,甚至是函數裡搜索代碼,同時也可以直接點擊被完全創建了連結的代碼來閱讀文檔、跳轉到變量定義或者馬上找到可用的 Demo。總而言之,你可以在你的 Web 瀏覽器上完成這一切,而不需要配置任何編輯器。
  • 【圖網絡】如何理解 Graph Convolutional Network(GCN)?
    算是日常生活中的一個規律吧:利用社交網絡(graph)中的關聯信息(edge),我們可以得到其他的有效信息(node represent)。如果把『我』看成當前節點,『我的朋友』看做『我』的相鄰節點,要估算『我的工資』該怎麼做呢?
  • 每日一詞∣數位化轉型 digital transformation
    Delivering goods, remote working and tele-medicine have gone viral during the novel coronavirus outbreak, and the booming of new business models has stimulated enterprises to accelerate digital transformation
  • 【歸納綜述】Graph Neural Network: An Introduction Ⅰ
    1.2 GNN 與 graph kernel methodsgraph kernel methods 是用於解決圖分類問題,使SVM這種基於 kernel 的方法可以用於圖數據的監督學習。此外,graph kernel methods 也可以用於 embed graphs or nodes。
  • GraphQL 簡介:原理及其使用
    新建一個名為 graphql-with-nodejs 的文件夾,進入項目文件夾並運行 npm init 來創建 NodeJS 項目,終端命令如下:cd graphql-with-nodejsnpm init安裝依賴項使用以下命令安裝 Express:npm install express
  • 總結|為什麼要進行圖嵌入Graph embedding?
    如果要解決以上的問題,我們首先需要做的是對圖進行表示,graph embedding 是中非常有效的技術。1.什麼是圖嵌入(graph embedding)?圖嵌入是一種將圖數據(通常為高維稠密的矩陣)映射為低微稠密向量的過程,能夠很好地解決圖數據難以高效輸入機器學習算法的問題。圖嵌入需要捕捉到圖的拓撲結構,頂點與頂點的關係,以及其他的信息,如子圖,連邊等。
  • Flink 是如何將你寫的代碼生成 StreamGraph 的 (上篇)
    一、絮叨兩句新的一年又來了,不知道大家有沒有立幾個每年都完不成的 FLAG ?反正我立了,我今年給自己立的 FLAG 是大致閱讀大數據幾個框架的源碼。為什麼要「大致」閱讀,因為這些牛逼的框架都是層層封裝,搞懂核心原理已經是很不易,更別談熟讀源碼了。之前幾篇源碼閱讀的文章,不知道大家有沒有親自動手打開 Idea 去試一試,這裡我再貼一下文章連結,大家可以再回顧一下。
  • GraphQL|一種配得上凡爾賽的API框架
    在知道答案之前,我們先來了解以下graphql。以下是graphql的官方站:https://graphql.cn/通過官方的實例,我們可以知道,graphql的主要功能,是進行API測試,與其他的API測試工具相比,graphql有幾個優勢:1、graphql可以通過圖形化界面的方式,在同一個界面上交互式地進行API數據測試,
  • The Transformation Of Weibo: From "Citizen Journalists" To...
    (原標題:The Transformation Of Weibo: From "Citizen Journalists" To "Internet Celebrities") Behind the transformation