《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 解決方案 > 想讀讀PyTorch底層代碼?這份內核機制簡介送給你

想讀讀PyTorch底層代碼?這份內核機制簡介送給你

2019-02-28
關鍵詞: PyTorch 代碼 JIT編譯器

學習 PyTorch 比較簡單,但你能學習 PyTorch 內部機制嗎?最近,有 14 年 ML 經驗的大神 Christian 介紹了 PyTorch 的內核機制。雖然在實際使用中并不需要這些知識,但探索 PyTorch 內核能大大提升我們對代碼的直覺與理解,挖底層實現的都是大神~


PyTorch 的構建者表明,Pytorch 的哲學是解決當務之急,也就是說即時構建和運行我們的計算圖。這恰好適合 Python 的編程理念,一邊定義就可以在 Jupyter Notebook 一邊運行,因此,PyTorch 的工作流程非常接近于 Python 的科學計算庫 NumPy。


Christian 表明 PyTorch 之所以這么方便,很多都是因為它的「基因」——內部運行機制決定的。這一篇報告并不會介紹如何使用 PyTorch 基礎模塊,或如何用 PyTorch 訓練一個神經網絡,Christian 關注的是如何以直觀的形式介紹 PyTorch 的內核機制,即各個模塊到底是怎么工作的。


Christian 在 Reddit 表示這一次報告由于錄像問題并不能上傳演講視頻,因此暫時只能分享演講 PPT。不過 Christian 最近也會再做一次該主題的演講,所以我們可以期待下次能有介紹 PyTorch 的視頻。


演講 PPT 地址:https://speakerdeck.com/perone/pytorch-under-the-hood

百度云地址:https://pan.baidu.com/s/1aaE0I1geF7VwEnQRwmzBtA


如下所示為這次演講的主要議程,它主要從張量和 JIT 編譯器出發介紹底層運行機制:

微信圖片_20190228180845.jpg


在討論 PyTorch 的各組件機制前,我們需要了解整體工作流。PyTorch 使用一種稱之為 imperative / eager 的范式,即每一行代碼都要求構建一個圖以定義完整計算圖的一個部分。即使完整的計算圖還沒有完成構建,我們也可以獨立地執行這些作為組件的小計算圖,這種動態計算圖被稱為「define-by-run」方法。


微信圖片_20190228180908.gif


其實初學者了解到整體流程就可以學著使用了,但底層機制有助于對代碼的理解和掌控。


張量


在概念上,張量就是向量和矩陣的推廣,PyTorch 中的張量就是元素為同一數據類型多維矩陣。雖然 PyTorch 的接口是 Python,但底層主要都是用 C++實現的,而在 Python 中,集成 C++代碼通常被稱為「擴展」。


因為張量主要承載數據,并進行計算。PyTorch 的張量計算使用最底層和基本的張量運算庫 ATen,它的自動微分使用 Autograd,該自動微分工具同樣建立在 ATen 框架上。


Python 對象


為了定義 C/C++中一個新的 Python 對象類型,你需要定義如下 THPVariable 類似結構。其中第一個 PyObject_HEAD 宏旨在標準化 Python 對象,并擴展至另一個結構,該結構包含一個指向類型對象的指針,以及一個帶有引用計數(ref count)的字段。


微信圖片_20190228180926.jpg


Python API 中有兩個額外的宏,分別稱為 Py_INCREF() 和 Py_DECREF(),可用于增加和減少 Python 對象的引用計數。


在 PyThon 中,任何東西都是對象,例如變量、數據結構和函數等。

微信圖片_20190228180948.jpg


ZERO-COPYING 張量


由于 Numpy 數組的使用非常普遍,我們確實需要在 Numpy 和 PyTorch 張量之間做轉換。因此 PyTorch 給出了 from_numpy() 和 numpy() 兩個方法,從而在 NumPy 數組和 PyTorch 張量之間做轉換。

微信圖片_20190228181004.jpg


因為張量儲存的成本比較大,如果我們在上述轉換的過程中復制一遍數據,那么內存的占用會非常大。PyTorch 張量的一個優勢是它會保留一個指向內部 NumPy 數組的指針,而不是直接復制它。這意味著 PyTorch 將擁有這一數據,并與 NumPy 數組對象共享同一內存區域。


微信圖片_20190228181021.jpg


Zero-Copying 的形式確實能省很多內存,但是如上所示在位(in-place)和標準運算之間的區別會有點模糊。如果用 np_array = np_array +1.0,torch_array 的內存不會改變,但是如果用 np_array += 1.0,torch_array 的內存卻又會改變。


CPU/GPU 內存分配


張量的實際原始數據并不是立即保存在張量結構中,而是保存在我們稱之為「存儲(Storage)」的地方,它是張量結構的一部分。一般張量存儲可以通過 Allocator 選擇是儲存在計算機內存(CPU)還是顯存(GPU)。


微信圖片_20190228181037.jpg


THE BIG PICTURE


最后,PyTorch 主張量 THTensor 結構可以展示為下圖。THTensor 的主要結構為張量數據,它保留了 size/strides/dimensions/offsets/等信息,同時還有存儲 THStorage。


微信圖片_20190228181057.jpg


JIT


因為 PyTorch 是即時運行模式,這表明它很容易 Debug 或檢查代碼等。在 PyTorch 1.0 中,其首次引進了 torch.jit,它是一組編譯工具,且主要目標是彌補研究與產品部署的差距。JIT 包含一種名為 Torch Script 的語言,這種語言是 Python 的子語言。使用 Torch Script 的代碼可以實現非常大的優化,并且可以序列化以供在后續的 C++API 中使用。


如下所示為常見使用 Python 運行的 Eager 模式,也可以運行 Script 模式。Eager 模式適合塊做原型與實驗,而 Script 模式適合做優化與部署。


微信圖片_20190228181117.jpg


那么為什么要用 TORCHSCRIPT 呢?Christian 給出了以下理由:


微信圖片_20190228181135.jpg


PyTorch JIT 主要過程


如下所示 JIT 主要會輸入代碼或 Python 的抽象句法樹(AST),其中 AST 會用樹結構表征 Python 源代碼的句法結構。解析可能是解析句法結構和計算圖,然后語法檢測接連著代碼優化過程,最后只要編譯并執行就可以了。


微信圖片_20190228181152.jpg


其中優化可以用于模型計算圖,例如展開循環等。在如下所示的 Peephole 優化中,編譯器僅在一個或多個基本塊中針對已生成的代碼,結合 CPU 指令的特點和一些轉換規則提升性能。Peephole 優化也可以通過整體分析和指令轉換提升代碼性能。


如下所示矩陣的兩次裝置等于矩陣本身,這應該是需要優化的。

微信圖片_20190228181211.jpg


執行


和 Python 解釋器可以執行代碼一樣,PyTorch 在 JIT 過程中也有一個解釋器執行中間表征指令:


微信圖片_20190228181231.jpg


最后,Christian 還介紹了很多內部運行機制,不過因為它們都很難,而且暫時沒有提供視頻講解,讀者大牛們可以看看具體 PPT 內容。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美电影免费观看大全| 国产综合色一区二区三区| 正在播放欧美视频| 99精品国产高清一区二区| 亚洲图片欧美日产| 国产亚洲精品综合一区91| 午夜欧美大片免费观看| 欧美精品999| 欧美日韩国产在线看| 好看不卡的中文字幕| 国产精品日韩在线观看| 欧美日韩国产专区| 亚洲国产欧美一区二区三区丁香婷| 亚洲国产日韩欧美在线动漫| 欧美a一区二区| 亚洲三级毛片| 亚洲韩国精品一区| 国产伦精品一区二区三区免费迷| 亚洲国产欧美日韩精品| 午夜久久久久| 亚洲人人精品| 国产一区二区三区四区五区美女| 午夜日韩电影| 麻豆精品一区二区av白丝在线| 亚洲国产精品成人一区二区| 亚洲精品一区二区三区在线观看| 久久成人精品一区二区三区| 亚洲精品国精品久久99热一| 日韩亚洲欧美中文三级| 欧美日韩一区二区三区免费| 欧美xxx在线观看| 亚洲日本激情| 亚洲精品欧洲| 国内外成人免费激情在线视频网站| 欧美一区二区在线| 国产欧美日韩三区| 亚洲一区精品在线| 影音先锋亚洲视频| 在线视频精品一区| 黄色成人在线观看| 欧美成人国产一区二区| 久久人人97超碰精品888| 欧美成人黑人xx视频免费观看| 亚洲精品之草原avav久久| 亚洲免费一区二区| 亚洲一区二区视频在线观看| 亚洲欧洲三级电影| 亚洲二区视频在线| 亚洲一区亚洲| 免费观看一级特黄欧美大片| 一本不卡影院| 亚洲国产精品电影在线观看| 欧美三区视频| 欧美喷水视频| 国产精品免费看| 樱花yy私人影院亚洲| 亚洲欧美另类久久久精品2019| 精品成人一区| 麻豆成人小视频| 中文欧美在线视频| 国产精品一区二区三区四区| 在线观看国产成人av片| 亚洲黄色在线视频| 欧美福利一区| 久久久综合香蕉尹人综合网| 欧美日韩精品一区视频| 欧美精品一区二区蜜臀亚洲| 亚洲欧美国产日韩中文字幕| 亚洲视频一二| 欧美色区777第一页| 亚洲午夜精品在线| 亚洲欧美综合精品久久成人| 国产视频一区在线观看一区免费| 欧美日韩大片一区二区三区| 国内精品久久久久久| 性欧美8khd高清极品| 欧美一区二区三区视频在线观看| 欧美激情成人在线视频| 国产精品国产三级欧美二区| 蜜桃精品一区二区三区| 亚洲精品网站在线播放gif| 亚洲人成网站999久久久综合| 亚洲国产va精品久久久不卡综合| 在线不卡中文字幕播放| 亚洲图片欧洲图片日韩av| 欧美日韩视频不卡| 日韩一区二区福利| 欧美激情第10页| 亚洲欧美国产高清va在线播| 国产精品欧美日韩一区二区| 欧美成人一区二区三区在线观看| 欧美—级在线免费片| 最近中文字幕mv在线一区二区三区四区| 国产精品久久9| 一本色道久久综合精品竹菊| 国产精品成人观看视频免费| 免费在线亚洲欧美| 亚洲日产国产精品| 久久婷婷麻豆| 欧美亚洲视频| 激情文学综合丁香| 欧美精品成人91久久久久久久| 久久久久久久久久久一区| 欧美另类久久久品| 在线观看欧美日韩| 红桃视频成人| 狠狠88综合久久久久综合网| 暖暖成人免费视频| 久久久久久网| 狼人社综合社区| 欧美精品www| 欧美亚洲综合久久| 亚洲网站在线看| 国产日韩欧美制服另类| 女女同性精品视频| 欧美在线观看日本一区| 欧美三级在线播放| 久久国产日本精品| 国产欧美亚洲视频| 国产精品久久久久久模特| 在线成人性视频| 日韩午夜电影av| 在线观看欧美日韩国产| 香蕉久久夜色| 久久久久久久久久久久久久一区| 亚洲精品小视频| 欧美成人国产一区二区| 欧美刺激性大交免费视频| 亚洲九九九在线观看| 亚洲一区3d动漫同人无遮挡| 欧美在线亚洲综合一区| 午夜精品视频在线观看一区二区| 免费在线观看日韩欧美| 欧美午夜电影网| 欧美高清hd18日本| av成人免费观看| 欧美综合第一页| 欧美在线啊v| 国产欧美一区二区精品性色| 国产一二三精品| 亚洲精品乱码久久久久久| 欧美大片专区| 欧美91大片| 欧美福利视频网站| 野花国产精品入口| 精品999在线播放| 久久精品一区二区三区中文字幕| 欧美福利一区二区三区| 国内自拍视频一区二区三区| 男女激情久久| 国产午夜精品全部视频在线播放| 合欧美一区二区三区| 日韩五码在线| 国产精品高潮视频| 能在线观看的日韩av| 99精品国产在热久久婷婷| 欧美伦理a级免费电影| 国产精品久久久久久妇女6080| 夜夜嗨av一区二区三区| 欧美日韩午夜| 欧美性猛交视频| 麻豆成人在线| 美国十次了思思久久精品导航| 国产精品亚洲美女av网站| 欧美亚洲第一区| 久久午夜视频| 国产精品丝袜久久久久久app| 国产欧美韩国高清| 欧美日韩一区综合| 欧美一区三区二区在线观看| 国产一区二区丝袜高跟鞋图片| 欧美成人一区二区在线| 日韩亚洲欧美成人一区| 在线观看亚洲视频啊啊啊啊| 欧美日韩亚洲天堂| 欧美自拍丝袜亚洲| 亚洲精品欧美精品| 一区二区三区 在线观看视频| 亚洲一区在线观看免费观看电影高清| 久久综合一区| 欧美一级播放| 欧美日韩高清在线| 亚洲精品国精品久久99热| 国产精品高潮呻吟久久av黑人| 欧美女同视频| 午夜精品久久久久久久99热浪潮| 国产亚洲精品7777| 一区二区三区不卡视频在线观看| 99热这里只有精品8| 久久久久久久久久久久久久一区| 一区二区三区精品在线| 麻豆av福利av久久av| 国产精品色婷婷久久58| 国精产品99永久一区一区| 欧美成人免费网| 欧美日韩美女在线| 久久本道综合色狠狠五月| 在线免费观看日本一区| 久久久噜噜噜久久久| 最新国产乱人伦偷精品免费网站| 亚洲精选一区二区| 亚洲天堂第二页| 国产一区二区欧美日韩| 亚洲国产欧美一区二区三区同亚洲| 国内外成人免费视频| 国产精品videosex极品| 国产亚洲成av人在线观看导航| 亚洲综合首页| 欧美激情成人在线视频| 欧美主播一区二区三区| 国产日韩欧美在线一区| 免费亚洲一区二区| 国产一区深夜福利| 激情文学综合丁香| 奶水喷射视频一区| 一区二区精品| 欧美日韩一区二区三| 另类av一区二区| 国产精品欧美久久久久无广告| 欧美日韩一级大片网址| 欧美自拍偷拍午夜视频| 国产伦一区二区三区色一情| 亚洲国产99精品国自产| 欧美中日韩免费视频| 国产视频在线观看一区二区三区| 揄拍成人国产精品视频| 性做久久久久久免费观看欧美| 亚洲高清123| 伊人久久大香线蕉综合热线| 国产精品igao视频网网址不卡日韩| 欧美在线亚洲| 亚洲一级网站| 久久综合久久综合久久| 国产精品一区二区在线观看不卡| 久久九九热re6这里有精品| 欧美日韩一区免费| 欧美精品在线免费播放| 国产精品一区二区你懂的| 久久精品日韩| 亚洲一区二区三| 亚洲精华国产欧美| 国产亚洲人成a一在线v站| 国产精品爽爽爽| 久久婷婷国产综合尤物精品| aa日韩免费精品视频一| 一区二区三区视频免费在线观看| 久久精品123| 久久人人97超碰精品888| 一本色道久久综合亚洲二区三区| 国产精品免费看久久久香蕉| 欧美精品九九99久久| 国产综合久久久久影院| 国产精品久久久久婷婷| 国产欧美一区二区三区久久人妖| 国产视频在线观看一区二区| 亚洲欧美日本日韩| 欧美电影资源| 午夜性色一区二区三区免费视频| 亚洲欧美中文字幕| 亚洲一线二线三线久久久| 日韩亚洲欧美成人一区| 六十路精品视频| 国产日韩精品一区二区三区在线| 欧美成人免费网| 亚洲天堂av在线免费观看| 亚洲天堂免费在线观看视频| 国产欧美一区二区色老头| 欧美电影免费观看高清完整版| 国产精品爽爽ⅴa在线观看| 在线日本高清免费不卡| 国产美女精品视频| 久久久久久亚洲综合影院红桃| 精品成人乱色一区二区| 欧美激情小视频| 欧美亚洲免费高清在线观看| 蜜臀av在线播放一区二区三区| 国产精品成人免费视频| 国产精品一区二区久久| 欧美一区二区在线视频| 久久99伊人| 亚洲国产人成综合网站| 久久国产加勒比精品无码| 精品99一区二区三区| 欧美日韩精品在线| 欧美香蕉大胸在线视频观看| 免费一级欧美在线大片| 国产日产亚洲精品| 在线观看视频日韩| 一区二区三区精品在线| 国产一区二区三区久久久久久久久| 影音先锋久久资源网| 性欧美1819性猛交| 国产一区二区三区久久精品| 欧美黄污视频| 最近中文字幕mv在线一区二区三区四区| 国产精品一区免费观看| 久久久久久香蕉网| 国产欧美丝祙| 亚洲一区二区三区精品在线| 欧美ab在线视频| 欧美亚洲第一页| 模特精品裸拍一区| 久久精品一区二区| 国产亚洲精品aa午夜观看| 欧美人与禽性xxxxx杂性| 久热re这里精品视频在线6| 亚洲最新中文字幕| 久久亚洲一区| 麻豆国产精品777777在线| 国产精品成人国产乱一区| 在线电影国产精品| 亚洲乱码国产乱码精品精天堂| 国产日韩欧美一区二区| 亚洲午夜精品一区二区三区他趣| 午夜伦欧美伦电影理论片| 亚洲电影免费观看高清完整版| 亚洲免费网址| 国产精品久久久一区二区| 黄色亚洲大片免费在线观看| 中文成人激情娱乐网| 狠狠色狠狠色综合日日tαg| 亚洲在线网站| 欧美aaaaaaaa牛牛影院| 黑人中文字幕一区二区三区| 国产精品久久久99| 欧美精品性视频| 久久精品91久久香蕉加勒比| 国产精品入口66mio|