Python并非為AI而生,Golang將統(tǒng)治人工智能的下一個十年?
過去幾年,Python成為人工智能和數(shù)據(jù)科學領域最受歡迎的編程語言。但是隨著5G時代的來臨,生產(chǎn)環(huán)境對AI應用的性能要求越來越高,Python有點「力不從心」。天生支持并發(fā)的Golang應運而生,專家稱,Go語言將統(tǒng)治人工智能的下一個十年。
Python花20年終獲認可,但并非為AI而生
30年前,Python 首次出現(xiàn)。
但是Python花了20年的時間才得到公眾的認可。
根據(jù)2019年Stack Overflow的調(diào)查,Python成為開發(fā)人員第二喜愛的語言。
過去的5年里,Python的成長無疑是巨大的,已經(jīng)成為機器學習和數(shù)據(jù)科學開發(fā)人員的首選語言。
短時間來看,Python 的主導地位大概率不會變。但是與一些新興的語言相比,它有一些嚴重的缺點,將成為生產(chǎn)環(huán)境部署的障礙。
Python 受歡迎的主要原因是它很容易學習。
與其他語言相比,它的語法很簡單,任何人都可以在幾個小時或幾天內(nèi)學會 Python 的基礎知識。
即使在學習了c++ 或 Java 等其他語言之后,開發(fā)人員還是更愿意使用 Python。因為無論你想干啥,總有一個Python 庫能滿足你的需求,這些庫讓開發(fā)數(shù)據(jù)科學和AI類的應用變的簡單高效。
但Python在大規(guī)模生產(chǎn)環(huán)境下的性能問題,直接影響了AI應用的開發(fā)效率?,F(xiàn)在很多人工智能初創(chuàng)企業(yè),正處于底層架構(gòu)的構(gòu)建階段,檢查 Python 的問題很有必要。
GIL鎖住了Python,拄拐走路性能成瓶頸
Python是一個解釋性語言,這導致它執(zhí)行起來比較慢,與其他編譯語言如c++ 和 Go 相比,Python 的執(zhí)行速度就像烏龜一樣,所以很多AI模型雖然是用Python開發(fā)的原型,部署時還得轉(zhuǎn)成其他語言。
Python 是一種動態(tài)類型語言。變量的數(shù)據(jù)類型在運行時自動判斷,也使得執(zhí)行速度變慢。
為了克服 Python 的速度,很多Python庫選擇更快的語言來重寫,例如 TensorFlow、 Numpy 和 Pandas 部分是用 c 或c++ 編寫的,它們有助于顯著提高執(zhí)行速度。
這就有點像拄著拐走路,一直需要外界的幫助。
隨著5G時代的來臨,多任務并行處理和實時性的需求猛增,Python是可以構(gòu)建小而美的應用,但是大規(guī)模、高吞吐的場景下,表現(xiàn)不盡如人意。雖然有很多方法,來提高Python的并行計算的能力,但都是曲線實現(xiàn)的,并沒有實現(xiàn)真正意義的并行。
因為Python中存在一個GIL鎖,每次只允許程序執(zhí)行一個線程。
GIL的全稱是Global Interpreter Lock(全局解釋器鎖),Python之父為了數(shù)據(jù)安全而設計的,那個時候計算機的主頻還沒有達到1G,程序全部都是運行在單核計算機上面。
某個線程想要執(zhí)行,必須先拿到GIL,可以把GIL看作CPU的「通行證」,拿不到通行證就不允許進入CPU執(zhí)行,Python 的多線程實際上并沒有利用到多核計算的優(yōu)勢,它不管你有幾個核,100個核也只能跑一個線程。
所以,原生的Python在性能上是有諸多限制的。人工智能和數(shù)據(jù)科學領域,對性能需求又很高,那有沒有一種語言既有Python簡單易用的優(yōu)點,又能滿足生產(chǎn)需求呢?
這時,Golang應運而生。
Go天生支持并發(fā)制霸云計算,還將統(tǒng)治AI的下一個十年
Golang(簡稱Go) 是一種靜態(tài)和編譯型語言,這意味著它的執(zhí)行速度將比 Python 快好幾倍。與 Python 不同,Go 不需要其他語言的幫助來提高速度。
下面是Go和 Python 之間的一個小型基準游戲?qū)Q。Go執(zhí)行幾乎和 c++、 Java 一樣快,而且Go 編譯代碼比c++ 和 Java 要快得多,有些游戲中Go所需時間只有Python的百分之一。
Go 的語法也很簡單,程序?qū)懲旰罂梢灾苯泳幾g成二進制文件執(zhí)行。25 個關鍵字就能表達你能想到的所有招式,想干啥事就 Go一下。
Go 最大的特色就是天生支持并發(fā),不需要像其他編程語言那樣需要開發(fā)者自行實現(xiàn)或借助第三方庫實現(xiàn)并發(fā)編程,邏輯簡單通俗易懂。
Go使用 Goroutine來實現(xiàn)并發(fā),Goroutine 是可以同時獨立運行的函數(shù),只占用2 kB 的內(nèi)存,所以單機同時運行成千上萬個Goroutine,也沒問題。
上面這段程序順序執(zhí)行花費了1000多毫秒。下面我們在printTime函數(shù)前面增加一個關鍵字go,也就是使用Goroutine讓程序并發(fā)執(zhí)行,整個過程只花費了110毫秒,所以Go中實現(xiàn)并發(fā)非常簡單。
不同于其他腳本或解釋性高級編程語言,用 Go 編寫的代碼直接了當編譯成機器碼高效執(zhí)行。x86、AMD64 (x86_64)、ARM;Linux、Windows、Darwin (OSX)、FreeBSD、Android (計劃Go 1.4) 幾乎全平臺支持,真正做到了一碼在手,隨處復用。
人工智能正在席卷整個世界,機器學習、深度學習等模仿人類智能的應用程序?qū)映霾桓F,Python可以很好地構(gòu)建原型系統(tǒng),幫我們驗證模型是否有利用提高效率。
但現(xiàn)在,對高可擴展性和計算能力的需求,讓Python有點捉襟見肘,而Go則在這些方面表現(xiàn)出了更大的潛力。與Python相比,Go的速度可以快幾十倍上百倍,吞吐更多的數(shù)據(jù),滿足更高的并發(fā)需求。
根據(jù) Hackearth 對來自76個國家的16000多名開發(fā)者的調(diào)查,Go 成為2020年最受歡迎的編程語言。
今年,有經(jīng)驗的開發(fā)人員中有近三成想學習Go,學生中這一比例也達到了29%。
知乎在幾年前也將推薦系統(tǒng)從 Python切換到了 Go。
Go首席布道師許式偉2015年時曾說,Go 語言將在兩年內(nèi)制霸云計算領域,而且Go 將統(tǒng)治下一個 10 年。
Docker、Kubernetes等項目的成功,讓Go在集群計算和云計算領域拔得了頭籌,但是Go的腳步并沒有停下。
我們利用機器學習、深度學習來預測和推理,最終目的還是為了生產(chǎn)服務。
Go對生產(chǎn)環(huán)境的支持要遠遠好于Python,比如Go語言開發(fā)的Cortex,可以將Python開發(fā)的AI模型快速、穩(wěn)定地部署至生產(chǎn)環(huán)境。
Go 和 Python 兩大社區(qū)的開發(fā)人員也爭論過哪種語言更好,似乎,誰也沒完全說服誰。
但越來越多的公司采用Go搭建基礎架構(gòu),至少證明,Go對生產(chǎn)環(huán)境來說更加合適。