一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Julia和TPU的結合意味著快速、易于表達的ML計算!

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-10-26 09:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

將Julia代碼直接部署到谷歌Cloud TPU,讓程序運行更快的官方指南來了!Julia和TPU的結合意味著快速、易于表達的ML計算!”

Julia是一門集眾家所長的編程語言。隨著Julia 1.0在8月初正式發(fā)布,Julia語言已然成為機器學習編程的新寵。

這門由 MIT CSAIL 實驗室開發(fā)的編程語言結合了 C 語言的速度、Ruby 的靈活、Python 的通用性,以及其他各種語言的優(yōu)勢于一身,并且具有開源、簡單易掌握的特點。

隨著用戶越來越多,圍繞Julia的開發(fā)工具、技術、教程等也愈加豐富。昨天,Julia開發(fā)人員Keno Fischer和Elliot Saba發(fā)表了一篇新論文AutomaticFullCompilationof JuliaProgramsandMLModelstoCloudTPUs,介紹如何將Julia代碼直接部署到Google Cloud TPU,讓程序運行更快。

Jeff Dean在推特上推薦了這篇論文,評價稱:“Julia和TPU的結合意味著快速、易于表達的ML計算!”

谷歌的Cloud TPU是一種用于機器學習工作負載的很強大的新硬件架構。近年來,Cloud TPU為谷歌的許多里程碑式的機器學習成就提供了動力。

谷歌現(xiàn)在已經在他們的云平臺上開放提供一般用途的TPU,并且最近已經進一步開放,允許非TensorFlow前端使用。

這篇論文描述了通過這個新的API和Google XLA編譯器,將Julia程序的適當部分卸載(offload)到TPU的方法和實現(xiàn)。

這一方法能夠將表示為Julia程序的VGG19模型的前向傳遞(forward pass)完全融合到單個TPU可執(zhí)行文件中,以便卸載到設備。該方法也很好地與Julia代碼上現(xiàn)有的基于編譯器的自動微分技術相結合,因此我們也能夠自動獲得VGG19的反向傳遞并類似地將其卸載到TPU。

使用這一編譯器定位TPU,能夠在0.23秒內對100張圖像的VGG19前向傳遞進行評估,這與CPU上原始模型所需的52.4秒相比大幅加速了。他們的實現(xiàn)僅需不到1000行Julia代碼,沒有對核心Julia編譯器或任何其他Julia包進行TPU特定的更改。

具體方法和實現(xiàn)細節(jié)請閱讀原論文。以下主要從分別從回顧TPU硬件架構、Julia編譯器的workflow、將XLA嵌入到Julia IR的細節(jié),以及結果與討論幾個部分進行介紹。

谷歌TPU和XLA編譯器

2017年,谷歌宣布他們將通過云服務向公眾提供其專有的張量處理單元(TPU)機器學習加速器。最初,TPU的使用僅限于使用谷歌的TensorFlow機器學習框架編寫的應用程序。幸運的是,2018年9月,Google通過較低級別的XLA(Accelerated Linear Algebra)編譯器的IR開放了對TPU的訪問權限。該IR是通用的,是用于表示線性代數(shù)原語的任意計算的優(yōu)化編譯器,因此為非Tensorflow用戶以及非機器學習工作負載的TPU目標提供了良好的基礎。

XLA(加速線性代數(shù))是谷歌的一個部分開源編譯器項目。它具有豐富的輸入IR,用于指定多線性代數(shù)計算,并為CPU,GPU和TPU提供后端代碼生成功能。XLA的輸入IR(稱為HLO高級優(yōu)化IR)在基本數(shù)據類型或其元組(但沒有元組數(shù)組)的任意維數(shù)組上運行。HLO操作包括基本算術運算、特殊函數(shù)、廣義線性代數(shù)運算、高級數(shù)組運算以及用于分布式計算的原語。XLA可以執(zhí)行輸入程序的語義簡化,以及執(zhí)行整個程序的內存調度,以便有效地使用和重用可用內存(這是大型機器學習模型的一個非常重要的考慮因素)。

每個HLO操作都有兩種操作數(shù):

靜態(tài)操作數(shù),它的值必須在編譯時可用并配置操作。

動態(tài)操作數(shù),由上述張量組成。

這篇論文介紹了使用這個接口將常規(guī)的Julia代碼編譯帶TPU的初步工作。這一方法不依賴跟蹤,而是利用Julia的靜態(tài)分析和編譯功能來編譯完整的程序,包括對設備的任何控制flow。特別是,我們的方法允許用戶在編寫模型時充分利用Julia語言的完整表現(xiàn)力,能夠編譯使用Flux機器學習框架編寫的完整機器學習模型,將前向和后向模型傳遞以及訓練loop融合到單個可執(zhí)行文件,并將其卸載到TPU。

Julia編譯器的工作原理

為了理解如何將Julia代碼編譯為XLA代碼,了解常規(guī)Julia編譯器的工作原理是有益的。Julia在語義上是一種非常動態(tài)的語言。但是,在標準配置中,Julia的最終后端編譯器是LLVM(Lattner&Adve,2004),它是一個靜態(tài)編譯器后端。

Julia編譯器需要將語言的動態(tài)語義與LLVM表示的靜態(tài)語義之間聯(lián)系起來。為了理解這個過程,我們將研究Julia系統(tǒng)的四個方面:動態(tài)語義、靜態(tài)編譯器內部函數(shù)的嵌入、過程間類型推斷,以及靜態(tài)子圖的提取。此外,我們還將研究這些特征與宏和生成的函數(shù)的交互,這些函數(shù)將與XLA編譯器相關。

如何將XLA嵌入到Julia IR

XLA嵌入

要編譯為XLA而不是LLVM,我們應用了上一節(jié)中概述的策略。實際上,我們可以重用大多數(shù)編譯器本身(特別是所有類型推斷和所有mid-level優(yōu)化傳遞)。

讓我們先定義動態(tài)語義和靜態(tài)嵌入。

張量表示(Tensor representation)

由于其作為線性代數(shù)的教學和研究語言的傳統(tǒng),Julia具有非常豐富的數(shù)組抽象層次結構。Julia的標準庫數(shù)組是可變的,并且在類型和維度上進行參數(shù)化。此外,StaticArrays.jl(Ferris&Contributors,2018)包提供了在元素類型和形狀上進行參數(shù)化的不可變數(shù)組。因此,成形的N維不可變張量的概念對Julia代碼來說并不陌生,并且大多數(shù)現(xiàn)有的通用代碼能夠毫無問題地處理它。

因此,我們通過定義一個runtime結構來嵌入XLA values。

Listing 1: XRTArray3的定義。

操作表示(Operation representation)

分離靜態(tài)和動態(tài)操作數(shù)

HLO操作數(shù)(HLO operands)分為靜態(tài)和動態(tài)操作數(shù)。假設我們有一個示例XLA操作'Foo'采用一個靜態(tài)操作數(shù)(例如一個整數(shù))和兩個動態(tài)操作數(shù)。這個嵌入如下所示:

在這個示例中,“execute”函數(shù)實現(xiàn)在遠程設備上運行操作的動態(tài)語義。函數(shù)(hlo::HloFoo)(...) 語法表示調用運算符重載。因此,這意味著對HloFoo(1) 的調用將構造并返回一個callabale對象,當在兩個XRTArrays上調用時,它將使用靜態(tài)操作數(shù)'1'遠程執(zhí)行'Foo'HLO操作,并且對應于兩個數(shù)組的動態(tài)操作數(shù)。這種分離并不是絕對必要的,但確實有嵌入到Julia IR的有用特性,易于理解:

在Listing 2的示例中,我們將HLO操作數(shù)(包括靜態(tài)操作數(shù))拼接到AST中。這產生了一個非常簡單的XLA映射(遍歷每個語句,從拼接指令規(guī)范獲取靜態(tài)操作數(shù),從類型推斷獲得動態(tài)形狀并生成相應的XLA代碼)。

當然,我們通常不會手動拼接這些指令,但是手動拼接的示例說明了為什么分離靜態(tài)操作數(shù)很有用,并說明了成功offload到XLA的條件。

如果經過所有相關的Julia級別優(yōu)化之后,IR可以完全卸載:

Listing 2: 手動構建的XLA嵌入

滿足這些條件的IR可以簡單地轉換成XLA IR。

結果

本文描述的方法在很大程度上依賴于Julia中間端編譯器,以確定足夠精確的信息,在程序的足夠大的子區(qū)域中分攤任何啟動開銷。

在本節(jié)中,我們證明了Julia編譯器確實足夠精確,使該方法適用于實際的程序。

VGG19 forward pass

圖1:在編譯到XLA之后,Metalhead.jl VGG19的forward pass 和backwards pass 生成的XLA指令摘要。

這里顯示了未優(yōu)化(在Julia前端之后)和優(yōu)化的計數(shù)(在類似于CPU后端使用的XLA優(yōu)化pipeline之后,但沒有HLO融合)。

VGG19 backward pass

為了獲得backwards pass,我們使用基于Zygote.jl編譯器的AD框架(Innes, 2018)。Zygote對Julia代碼進行操作,其輸出也是Julia函數(shù)(適合重新引入Zygote以獲得更高階導數(shù),也適合編譯到TPU)。

示例如下:

結論

在這篇論文中,我們討論了如何將Julia代碼編譯為XLA IR,從而實現(xiàn)卸載到TPU設備。這里描述的實現(xiàn)重新利用了現(xiàn)有Julia編譯器的重要部分,因此所有代碼不到1000行,但是仍然能夠編譯模型的forward和backward pass(及其融合,包括 training loop)到單個XLA內核,模型例如VGG19。

我們還演示了Julia的多重調度語義如何在這個轉換的規(guī)范中提供幫助。這項工作表明,不僅可以將用Julia編寫的多個ML模型編譯到TPU,而且可以編寫更通用的非ML Julia代碼(只要這些代碼也由線性代數(shù)操作控制)。我們希望這可以加速對非ML問題領域的探索,TPU可能對這些領域有用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6231

    瀏覽量

    108106
  • 編程語言
    +關注

    關注

    10

    文章

    1956

    瀏覽量

    36630
  • 機器學習
    +關注

    關注

    66

    文章

    8501

    瀏覽量

    134580

原文標題:Jeff Dean推薦:用TPU跑Julia程序,只需不到1000行代碼

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    在stm32中系統(tǒng)時鐘到底意味著什么???

    stm32任何程序都要先配置時鐘,這個時鐘到底意味著什么?有什么意義? 是否就是一種開關? 還是有什么其他作用?? 求大神回答 ~~~
    發(fā)表于 07-22 20:11

    請問diagnostic測試失敗意味著什么?板子有問題?

    本帖最后由 一只耳朵怪 于 2018-6-25 10:50 編輯 請問diagnostic測試失敗意味著什么?板子有問題?(ps:u***和emulation這兩項測試過了)。歡迎賜教,不勝感激。
    發(fā)表于 06-25 02:59

    單模模塊意味著什么?

    我們的產品里有CYBLY-022001的BLE芯片。在數(shù)據表中,它被描述為藍牙4.1“單模模塊”,單模模塊意味著什么?當使用這個SoC時,我是否能夠采用BT核心版本4.2的BT特征,比如廣告擴展
    發(fā)表于 12-04 14:48

    FPGA的底板尺寸意味著什么

    嗨,在5月的研究文章中,提到FPGA的底板假定為64 * 64 ..有些假設為80 * 120。那它究竟意味著什么呢?這是否意味著CLB被放置在2D數(shù)組中作為矩形(W * H)并且總共(64
    發(fā)表于 03-22 14:52

    請問“2”在這個表達意味著什么?

    這是一個我以前從未見過的奇怪表達。 “2”(藍色)在下面的表達式中是什么意思?input [3:0] frame_sync_offset;wire [5:0] fs_delay
    發(fā)表于 03-28 13:20

    CORAL-EDGE-TPU:珊瑚開發(fā)板TPU

    ,可在低功耗轉換機器學習(ML)邊緣計算功能中實現(xiàn)高性能,本地推理。Coral Dev Board TPU的小巧外形可實現(xiàn)快速原型設計,涵蓋物聯(lián)網(IOT)和需要
    發(fā)表于 05-29 10:43

    請問CARTIAN在函數(shù)CysLysIsStValualValuy中意味著什么?

    CARTIAN在函數(shù)CysLysIsStValualValuy中意味著什么?
    發(fā)表于 10-18 10:15

    新表中的變量變成紅色意味著什么?

    嗨,那里。我想問一個問題(對我來說非常重要),在單擊“繼續(xù)”按鈕之后(在調試模式下),附件中的變量變?yōu)榧t色。這意味著程序已經經歷了一個循環(huán)。但是其他變量不會改變顏色(應該是)。為什么會這樣?請給我一些調試的線索。謝謝您。
    發(fā)表于 04-06 18:20

    請問端點是否意味著延遲?

    這是時間報告。我試圖從我的代碼中找到延遲。我無法專門找到延遲,但發(fā)現(xiàn)Max延遲高于此。這是最大延遲嗎?這是否意味著輸出需要138317個時鐘周期?如果不是這意味著什么?先謝謝你
    發(fā)表于 04-22 10:13

    請問導入SystemVerilog程序包意味著什么?

    導入SystemVerilog程序包意味著什么?
    發(fā)表于 12-11 06:53

    重負載和空載時的ZO意味著什么?

    最常用于小信號放大器的輸出拓撲介紹重負載和空載時的ZO意味著什么?
    發(fā)表于 04-08 06:40

    5G到底意味著什么?它能顛覆時代?

    5G意味著什么?意味著更快的上傳下載速度、炫酷的VR娛樂體驗、城市物聯(lián)、無人駕駛、遠程醫(yī)療。5G不僅僅是網速那么簡單,它能顛覆時代!
    發(fā)表于 06-21 02:15 ?2044次閱讀

    5G時代下邊緣計算對業(yè)務意味著什么?是機遇還是挑戰(zhàn)?

    隨著5G的到來,數(shù)據的發(fā)送和處理已移至網絡的邊緣。這種邊緣計算對業(yè)務意味著什么?優(yōu)勢、機遇和威脅在哪里?
    的頭像 發(fā)表于 08-22 11:46 ?2294次閱讀

    能量收集意味著什么?

    能量收集意味著什么?
    發(fā)表于 03-21 10:08 ?2次下載
    能量收集<b class='flag-5'>意味著</b>什么?

    鴻蒙開源意味著什么

    鴻蒙開源意味著什么?在華為開發(fā)者大會上,大家都為鴻蒙系統(tǒng)而激動,當華為表示會開源的時候,現(xiàn)場掌聲雷動。鴻蒙是華為的一個技術產品,鴻蒙好的話大家都點贊華為,鴻蒙不好的話也有人會噴華為。但是鴻蒙系統(tǒng)開源后,就沒那么簡單了。那么鴻蒙開源意味著什么?
    的頭像 發(fā)表于 06-28 10:35 ?8164次閱讀