https://m.toutiao.com/is/Jo62obk/
作者:Murray Vanwyk是Programmai公司的首席技術官
谷歌的Swift for Tensorflow對于數(shù)據(jù)科學和機器學習而言意味著什么?
Python對于數(shù)據(jù)科學而言已死,這種說法似乎有點怪怪的。畢竟,如今Python是數(shù)據(jù)科學界當仁不二的語言,人氣從未如此旺過。2020年11月,它擊敗了長期備受青睞的Java,奪得編程語言排行榜第二名。我一直認為Python是每位數(shù)據(jù)科學家都應該知道的編程語言。數(shù)據(jù)科學領域的大部分工作是實現(xiàn)和執(zhí)行,而Python在方面表現(xiàn)出眾。它擁有出色的軟件包支持,讓您可以將不同的代碼段粘合在一起,快速啟動并運行代碼段。外面有許多文章和論文介紹數(shù)據(jù)科學,所附的Python代碼可幫助您在進行開發(fā)時迅速解決棘手的問題。這一切意味著您可以極其高效地工作,其他語言難以望其項背。別誤會,我是喜歡Python,但是它也有缺點,而這些缺點促使谷歌邁出了下一步。
Python的最大問題是它不是一種高性能的語言。數(shù)據(jù)科學需要處理大量數(shù)據(jù);由于很久以前的設計決策,Python根本無法擴展。為了解決這些問題,開發(fā)人員將其他語言(比如C和Fortran)混入到了Python代碼中。這種做法非常務實,但也存在缺點。如果您曾經(jīng)試圖了解來自NumPy、Tensorflow或其他大多數(shù)數(shù)據(jù)科學軟件包中的函數(shù)中到底發(fā)生了什么,您最終會碰上“C墻”(“C Wall”)。這是Python代碼結束、C代碼開始的臨界點,通常也正是在這個點,您只好放棄,干脆接受不知道發(fā)生了什么情況的事實。當然,您可以在github上找到源代碼,并可能設置另一個調(diào)試器以遍歷該函數(shù)及其調(diào)用的任何其他函數(shù),但這已經(jīng)犧牲了Python給您帶來的最大優(yōu)點:生產(chǎn)力。
試圖并行化處理任何實質(zhì)性內(nèi)容也會大大降低生產(chǎn)力,因為您有悖于GIL。GIL(或全局解釋器鎖)保證同一時刻只有一個線程在運行,這意味著您必須執(zhí)行煩人的操作,比如對進程進行分叉(forking)。Python確實為您提供了不錯的包裝器來實現(xiàn)此目的,但是到頭來分叉并不高效。
隨著數(shù)據(jù)科學問題逐漸進入到移動平臺和物聯(lián)網(wǎng)平臺,性能也帶來了挑戰(zhàn)。如果您想在物聯(lián)網(wǎng)傳感器上運行預測模型,可能會使用Python來開發(fā)和訓練該模型,但由于傳感器資源有限,因此使用另一種語言來部署模型。訓練和部署使用不同語言加大了研發(fā)與生產(chǎn)之間的缺口,并加大了出現(xiàn)問題的可能性。
諸如此類的問題使得人們很難在機器學習領域求得突破,這就是為什么谷歌開發(fā)了Swift for Tensorflow。我頭一次聽說它時,以為它只是在iOS應用程序中運行Tensorflow模型。谷歌在Swift方面所抱的野心似乎要大得多。谷歌甚至稱之為“用于深度學習和可微計算的下一代系統(tǒng)”。這里的關鍵字是“下一代”。谷歌甚至詳細說明了為什么Python對Tensorflow而言不是一門優(yōu)秀的語言。
與Python相比,Swift速度更快。快得足以讓Tensorflow團隊認為不久“Swift將成為在許多使用場合取代C++的可靠語言”。Python是Tensorflow的主要語言,不過據(jù)github聲稱,它僅占代碼庫的26%,而C++占代碼庫的61%。Swift還通過對pthread的低級訪問來支持更好的并行化機制,或者您可以使用Swifts GCD(大中央調(diào)度)。還一直在努力添加新的并發(fā)模型以進一步改善擴展機制。最后,Swift旨在可以在iOS之類的移動設備上運行,在Raspberry PI等物聯(lián)網(wǎng)平臺上運行起來比Python更快,占用的內(nèi)存更少。
谷歌已采取了幾個措施來簡化數(shù)據(jù)科學家向“下一代平臺”轉(zhuǎn)型的工作。NumPy是數(shù)據(jù)科學界的重要組成部分,也是許多軟件包的基礎。谷歌一直將其重新實現(xiàn)為TensorFlow NumPy:與傳統(tǒng)的NumPy相比,它具有許多優(yōu)點,比如GPU加速。至于其他軟件包,您可以使用PythonKit來運行,就像它們是為Swift開發(fā)的一樣?,F(xiàn)在,外頭所有那些附有代碼的文章和論文都可以在您的Swift程序中重復使用。您猜怎么著?PythonKit的根源其實可以追溯到谷歌和Tensorflow團隊。谷歌甚至確保您可以在Jupyter筆記本中使用Swift,那樣您就不必改變原有的工作流程。
現(xiàn)在,我倒不是說谷歌一心要殺死Python,但是很明顯,谷歌已發(fā)現(xiàn)了這門語言對于數(shù)據(jù)科學而言存在的局限性。鑒于谷歌在機器學習方面已投入了巨資,它會在其他人之前碰到這些局限性自在情理之中。問題是,您在多久之后也會碰到這些局限性?谷歌和Tensorflow正在離Python漸行漸遠,最終您也會亦步亦趨。唯一的問題是何時您何時也離Python漸行漸遠。
想要更深入地探究技術細節(jié),請參閱谷歌Tensorflow團隊撰寫的這篇文章(https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md#python-challenges)。