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