當前位置:首頁 » 編程軟體 » 向量計算程序編譯器

向量計算程序編譯器

發布時間: 2025-03-25 07:44:17

⑴ 開篇:XLA是什麼

XLA (Accelerated Linear Algebra)是專用於機器學習的編譯器,機器學習的運算中99%都是向量乘以矩陣、矩陣乘以矩陣的計算,XLA是專門用來優化這些計算的。

舉個例子,運行在GPU上的 model_fn 函數會順序調用 multiply 、 add 和 rece_sum 這三個op,而且 multiply ,也就是 y * z 的計算結果會先從GPU拷貝回host,再拷貝到device作為 add 的input,同樣的,add的計算結果也會以相同的方式傳遞給下一個op。

顯然,對於整個函數來說,將中間變數在host和device間來回倒騰是沒有意義的。因此,如果把函數看作一個op,那在計算中產生的中間結果就不必返回到host,少了數據傳輸的時間開銷,就可以大幅提升運算效率。

這種將多個op融合成一個op的方法就稱為 fuse ,當前fuse的技術路線有:

XLA的優化當然不只是fuse,還有對計算圖的優化,包括刪除無效指令、減少內存佔用、替換復雜指令等優化。下圖是官方提供的性能報告,經XLA優化過後,Tensorflow BERT MLPerf的訓練性能提升了~7倍。除了Tensorflow外,XLA還支持 JAX 、 Julia 、 PyTorch 和 Nx 等前端。

jit 是指在首次運行時將函數編譯成二進製程序,後續再調用該函數時直接運行先前編譯好的程序而非python code。 @tf.funciton 修飾的函數(包括它的子函數)會做 jit 。除非signature發生了變化,也就是input的shape或dtype和編譯時不同,否則 get_MSE 是不需要重復編譯的。

@tf.function 將函數內的ops替換成一組( XlaCompile , XlaRun ) ops,在運行時前者負責編譯,並將編譯結果-- executable 保存到cache,後者負責運行executable。如果cache里已經有編譯好的程序就不需要編譯了,例如 get_MSE(tf.constant(3.0), tf.constant(4.0)) 。

XLA編譯器支持的語言(IR)是HLO(High Level Operations),顧名思義這些語言是由一個個op組成,因此,我們在編譯前需要先從python code中提取出所有ops,再將它們轉換成HLO。

JAX通過tracing的方式,從 @jax.jit 修飾的函數中提取ops,這些ops通過 jaxpr 來表示。然後再通過XLA client提供的API為ops生成相應的HLO。PyTorch/XLA也是採用類似的方法來生成HLO。

Tensorflow的 tf2xla 為每個 Op 創建了一個同名的 XlaOp 用於生成HLO, XlaOp 派生於 Op ,使用相同的注冊機制,因此,只要把要編譯的子圖根據拓撲排序運行一遍就能生成它的HLO。

HLO先經過一系列 pass 優化後再將HLO lowering成ISA,最後將編譯好的二進制封裝到 executable 。

除了二進製程序,它還包含運行該程序所需要的infos和options。調用 executable.run() 就可以執行計算圖。

⑵ 瀛︾敓鏉ョ湅10涓鏈浣崇殑Ph緙栬瘧鍣

10涓鏈浣崇殑Python 緙栬瘧鍣ㄥ拰瑙i噴鍣

鏈濂界殑Python緙栬瘧鍣ㄥ拰瑙i噴鍣

1.Bry thon

Javascript浠g爜銆傚畠鎻愪緵瀵規墍鏈塛eb嫻忚堝櫒(鍖呮嫭涓縐嶆墜鏈

瀹冭繕鏀鎸佹渶鏂扮殑Html 5/CSS 3瑙勮寖錛 鍙浠ヤ嬌鐢ㄦ祦琛岀殑CSS妗

Bry thon鏄涓縐嶆祦琛岀殑Python緙栬瘧鍣錛 鍙灝哖ython杞鎹涓

Web嫻忚堝櫒) 鐨勬敮鎸併

鏋訛紝 濡侭ootStrap 3鍜孡ESS銆

緗戝潃錛歨ttps錛//brython.info

2.Py js28

Py js鏄涓涓涓板瘜鐨処n tem net搴旂敤紼嬪簭妗嗘灦錛 涔熸槸涓縐嶈交閲忕駭

鐨凱ython緙栬瘧鍣錛 鍙浠ヤ粠Web嫻忚堝櫒鐩存帴鎵ц孭ython鑴

鏈錛屽彲浠ヤ粠嫻忚堝櫒鐨凧S鎺у埗鍙版墽琛岀▼搴忋

瀹冩槸浠嶱ython鍒癑avascript鐨勭紪璇戝櫒錛 鍙浠ヤ嬌浠g爜鍦╓eb

嫻忚堝櫒涓婅繍琛屻傚畠甯︽湁Ajax妗嗘灦鍜學idget Set API銆

緗戠珯錛歨ttp錛//pyjs.org

3.Win Python

瀹冩槸涓篧indows鎿嶄綔緋葷粺璁捐$殑銆傚畠鏈変竴浜汣Python鐨勭壒鎬

銆傚畠棰勮呬簡涓浜涢拡瀵規暟鎹縐戝﹀拰鏈哄櫒瀛︿範鐨勬祦琛屽簱錛屼緥濡

Numpy銆丳andas鍜孲cipy銆

瀹冨甫鏈塁/C++緙栬瘧鍣錛屽ぇ澶氭暟鏃跺欎笉浼氱敤鍒般傞櫎姝や箣澶栵紝瀹冨彧

鏈塒ython緙栬瘧鍣錛 娌℃湁鍏跺畠鍖呫

緗戝潃錛歨ttps錛//winpython.github.io

4.Sku lpt

Sku lpt鏄疨ython鐨勬祻瑙堝櫒鐗堝疄鐜幫紝 鍙浠ヨ娣誨姞鍒癏TML浠g爜

涓銆

姝Python緙栬瘧鍣ㄤ嬌鐢↗avascript緙栧啓錛 鍦ㄥ㈡埛絝榪愯屼唬鐮侊紝

鏃犻渶鍏跺畠鎻掍歡銆佸姞宸ユ垨鏈嶅姟鍣ㄦ敮鎸併

Sku lpt瑙i噴鍣ㄩ氳繃瀵煎叆鏂瑰紡錛 鏉ユ墽琛屼繚瀛樺湪緗戠珯涓婄殑.py鏂囦歡

涓鐨勪唬鐮併

緗戠珯錛歨ttps錛//skulpt.org

5.Shed Skin

璇ョ紪璇戝櫒灝哖ython鏍囧噯搴撴ā鍧楃紪璇戜負C++錛 瀹冨皢闈欐佺被鍨嬬殑

Python紼嬪簭杞鎹涓哄緢鍙楅檺鐨勪紭鍖栫殑C++浠g爜銆

閫氳繃灝嗗叾鍐呯疆鐨凱ython鏁版嵁綾誨瀷鍐嶆″疄鐜頒負鑷宸辯殑綾婚泦(鍙

浠ョ敤C++楂樻晥瀹炵幇)錛屽彲浠ユ彁楂樻ц兘銆

緗戠珯錛歨ttps錛//en.wikipedia.org/wiki/Shed_Skin

6.ActivePython

榪欐槸鐢ㄤ簬Windows銆丩inux鍜孧acOs鐨凱ython鍙戣岀増錛 鏈

鍏嶈垂鐨勭ぞ鍖虹増銆

瀹冩敮鎸佸湪璁稿氬鉤鍙板畨瑁咃紝 鏌愪簺涓嶈玃ython-like鐨凙IX鏀鎸佺殑

騫沖彴錛 瀹冧篃鏀鎸併傚畠鎻愪緵浜嗘瘮Python鏇村氱殑鍏煎規с

緗戠珯錛

https錛//www.activestate.com/procts/activepython

7.Trans crypt

瀹冩槸涓縐嶆祦琛岀殑灝哖ython浠g爜緙栬瘧涓虹畝鍗曟槗璇葷殑Java浠g爜

鐨勭紪璇戝櫒銆傚畠鏄涓涓杞婚噺綰х殑Python緙栬瘧鍣錛 鏀鎸佸圭煩闃靛拰

鍚戦噺榪愮畻榪涜屽垏鐗囥

Trans crypt涔熷彲浠ュ湪Node.js涓婅繍琛屻傚垎灞傛ā鍧椼佸氶噸緇ф壙鍜

鏈鍦扮被緇欏叾娣誨姞浜嗗緢澶氬姛鑳姐

緗戠珯錛

https錛//www.actvestate.com/procts/activepython

8.Nut ika

榪欐槸涓縐嶆簮鐮佸埌婧愮爜鐨凱ython緙栬瘧鍣錛 鍙浠ュ皢Python婧愪唬

鐮佽漿鎹涓篊/C++鍙鎵ц屼唬鐮併傚畠浼氫嬌鐢ㄥ埌璁稿歅ython搴撳拰鎵

灞曟ā鍧椼

瀹冭嚜甯Anaconda錛 鍙鐢ㄤ簬鍒涘緩鏁版嵁縐戝﹀拰鏈哄櫒瀛︿範欏圭洰銆

緗戠珯錛

https錛//www.activestate.com/procts/actvepython

9.Jython

瀹冪敤Java緙栧啓錛 鍙浠ュ湪榪愯孞VM鐨勪換浣曞鉤鍙頒笂鎵ц屻

Jython灝哖ython浠g爜緙栬瘧涓篔ava瀛楄妭鐮侊紝 浠庤屽仛鍒拌法騫沖彴

瀹冨彲鐢ㄤ簬鍒涘緩Serve lets銆丼wing銆丼WT鍜孉WT杞浠跺寘鐨勮В鍐

鏂規堛侸ython浣跨敤CPython涔嬬被鐨勫叏灞瑙i噴鍣ㄩ攣(GIL)

鍙﹀栵紝 浣犲彲浠ュ皢Java綾繪墿灞曞埌Python浠g爜銆

緗戝潃錛歨ttps錛//www.ython.org

10.CPython

CPython鏄榛樿ょ殑涓斾嬌鐢ㄦ渶騫挎硾鐨凱ython緙栬瘧鍣ㄣ傚畠鏄鐢–

璇璦緙栧啓鐨勶紝 騫朵嬌鐢℅IL(鍏ㄥ矓瑙i噴鍣ㄩ攣) 錛 榪欎嬌寰楀苟鍙

CPython榪涚▼涔嬮棿鐨勯氫俊寰堝洶闅俱

CPython涓鐨勭紪璇戞ラゅ寘鎷錛氳В鐮併佷護鐗屽寲銆佽В鏋愩佹娊璞¤娉

鏍戝拰緙栬瘧銆

緗戠珯錛歨ttps錛//compilers.pydata.org




熱點內容
反編譯obj 發布:2025-03-26 20:47:55 瀏覽:628
打開ftp資源管理器停止工作 發布:2025-03-26 20:46:54 瀏覽:750
C語言鏈表插入和刪除 發布:2025-03-26 20:45:47 瀏覽:452
手機什麼配置才能流暢吃雞 發布:2025-03-26 20:45:47 瀏覽:18
編譯與解析 發布:2025-03-26 20:28:48 瀏覽:98
社科外文資料庫 發布:2025-03-26 20:26:12 瀏覽:839
雅閣最低配的是什麼配置 發布:2025-03-26 20:09:37 瀏覽:27
安卓查看資料庫 發布:2025-03-26 19:52:13 瀏覽:131
最好加密狗 發布:2025-03-26 19:51:26 瀏覽:482
c編譯器能跑c代碼嗎 發布:2025-03-26 19:49:29 瀏覽:761