Yann LeCun曾說,深度學習可能需要一種新的編程語言了。現在Swift來了!沒錯,這就是讓萬千飽受Python缺點困擾的開發者興奮不已的深度學習語言。本文便將帶領讀者詳細了解一下為什么Swift將成為深度學習的下一大熱門。
當你聽到Swift的時候,第一反應肯定會想到iOS或者MacOS的應用程序開發。當你玩兒過深度學習,也肯定聽說過Swift for Tensorflow(縮寫為S4TF)。
而后你就會產生困惑:“為什么谷歌要為Swift創建TensorFlow版本呢?已經有了Python和C++版本了,為什么還要添加另一種語言?”
在這篇文章中,作者將嘗試回答這些問題,并告訴你為什么要認真遵循S4TF以及Swift語言本身。 本文的目的不是提供非常詳細的解釋,而是提供下文大量鏈接內容的一般概述,方便讀者深入挖掘。
Swift for Tensorflow官方地址:
https://www.tensorflow.org/swift/
Swift“背景硬”:背后有強大的支持
Swift是Chris Lattner在蘋果公司工作時創建的。Swift語言的創造者現在在實驗室從事深度學習的研究,這一事實應該告訴你,這就是一個嚴肅的項目。
前段時間,谷歌的員工意識到一件事情:盡管Python是一種優秀的語言,但它有許多難以克服的局限性——TensorFlow需要一種新的語言。
經過長時間的考慮,Swift被選為候選語言。作者沒有在本文詳細介紹,但下方鏈接中的文檔描述了Python的缺點、在候選語言篩選過程中考慮哪些語言,以及最終為何Swift當選。
https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md
對于TensorFlow來說,Swift不僅僅是一個庫
Swift對于TensorFlow不僅僅是另一種語言的TF。
它本質上是Swift語言本身的另一個分支(在git術語中)。這意味著S4TF不是一個庫;它本身就是一種語言,內置了支持TensorFlow所需的所有功能的特性。
例如,S4TF中有非常強大的自動微分系統,這是計算梯度所需要的深度學習的基礎之一。對比一下Python,在Python中,自動微分不是語言的核心組件。最初作為S4TF的一部分開發的功能后來被集成到Swift語言本身。
Git地址:
https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is
有關自動微分:
https://github.com/tensorflow/swift/blob/master/docs/AutomaticDifferentiation.md
Swift速度極快
當作者第一次知道Swift的運行速度和C代碼一樣快時,作者表示非常驚訝。
我們知道C語言是高度優化的,可以達到非常高的速度,但這是以微管理內存為代價的,這導致C語言不是內存安全的。此外,C語言并不是一門很容易學的語言。
現在,Swift在數值計算中運行得和C一樣快,而且它沒有內存安全問題,而且它更容易學習。Swift背后的LLVM編譯器非常強大,并且有非常高效的優化,這就確保了代碼運行的速度。
Swift為何和C一樣快:
https://www.fast.ai/2019/01/10/swift-numerics/
在Swift中可以使用Python,C和C ++代碼
由于適用于機器學習的Swift還處于早期階段,這意味著適合Swift的機器學習庫并不多。
但不必過于擔心這一點,因為Swift具有驚人的Python互操作性。
只需導入Swift中的任何Python庫,它就能正常工作。類似地,可以將C和C++的庫導入Swift(對于C++,需要確保頭文件是用純C編寫的,沒有C++特性)。
有關Python互操作性:
https://github.com/tensorflow/swift/blob/master/docs/PythonInteroperability.md
導入C和C++庫:
https://oleb.net/blog/2017/12/importing-c-library-into-swift/
總而言之,如果需要特定功能,但尚未在Swift中實現,則可以導入相應的Python,C或C ++包。
Swift可以在非常底層的地方運行
如果你曾經使用過TensorFlow,那么通常情況下可能是通過Python包完成的。
在底層,Python版本的TensorFlow庫底層有C代碼。所以當你調用TensorFlow中的任何函數時,在某種程度上你會碰到一些C代碼。
這意味著檢查源代碼的速度是有限的。例如,如果你想了解卷積是如何實現的,你無法看到Python代碼,因為它是在C語言中實現的。
在Swift中,情況就不同了。Chris Lattner稱Swift是“LLVM(匯編語言)的語法糖”。
從本質上說,Swift非常接近硬件,而且在硬件之間沒有其他用C編寫的代碼層。這也意味著Swift代碼運行速度非常快。這就使得開發人員能夠從高到低,任何層次都可以開始檢查代碼,而無需使用C。
有關“LLVM(匯編語言)的語法糖”:
https://www.fast.ai/2019/03/06/fastai-swift/
接下來的一步
Swift只是谷歌深度學習創新的一部分。還有一個非常相關的組件:MLIR,代表多級中間表示。
MLIR將是谷歌統一的編譯器基礎設施,允許用Swift(或任何其他受支持的語言)編寫代碼,并將其編譯到任何受支持的硬件。
目前,針對不同的目標硬件有大量的編譯器,但是MLIR將改變這一點,不僅允許代碼重用,還允許編寫定制的編譯器底層組件。它還將允許研究人員應用機器學習來優化底層算法:
雖然MLIR充當ML的編譯器,但我們也看到它可以在編譯器中使用機器學習技術!一點尤其重要,因為開發數值庫的工程師的擴展速度趕不上ML模型或硬件的多樣化。
想象一下,如果我們能夠使用深度學習來幫助優化數據的低級內存分塊算法(類似于Halide試圖完成的任務)會怎么樣。
有關MLIR:
https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d
有關Halide:
https://www.youtube.com/watch?v=3uiEyEKji0M
總結
如果你對深入學習感興趣,那么Swift是一門你應該開始學習的語言。
與Python相比,它有許多優勢。谷歌正在大力投資,使Swift成為其TensorFlow ML基礎設施的一個關鍵組件,而且很有可能Swift將成為深度學習的語言。
所以,早點學習Swift總不會有錯的。
-
SWIFT
+關注
關注
0文章
116瀏覽量
23809 -
python
+關注
關注
56文章
4800瀏覽量
84820 -
深度學習
+關注
關注
73文章
5507瀏覽量
121298
原文標題:為什么說Swift將接任Python成為深度學習下一任“掌門”?
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論