歡迎光臨
每天分享高質量文章

Swift 勢必取代 Python?

本文經授權轉自公眾號CSDN(ID:CSDNnews)

以下為譯文:

 

當程式員聽到Swift時,可能都會聯想到iOS或MacOS的應用開發。如果你正在研究深度學習,那麼你一定聽說過Swift版的TensorFlow。你可能不禁想問:“為什麼Google會建立Swift版的TensorFlow?現在已經有Python和C++版本了,為什麼還要新增另一種語言?”

 

我將在這篇文章中為你解答這個問題,並概述為什麼你需要留意Swift版的TensorFlow以及Swift語言本身。我不打算在文字中提供詳細的解釋,但是我會提供大量連結,如果你對這個話題感興趣的話,那麼可以深入挖掘。

Swift擁有強力的後援

Swift是由Chris Lattner在蘋果工作時建立的。目前,Chris Lattner在Google Brain工作——這是世界上最先進的人工智慧研究團隊之一。Swift語言的創始人如今在研究深度學習的實驗室工作,這個事實說明這是一個重大的專案。

 

前段時間,Google意識到儘管Python是一種優秀的語言,但它仍有許多難以剋服的侷限性。TensorFlow需要一種新語言,經過長時間的考慮後,這個重任落到了Swift肩上。我不打算對此做詳細的介紹,但是你可以自行閱讀這篇檔案(https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md),文中描述了Python的缺點,有關其他語言的考量,以及最終選中了Swift的經過。

Swift版的TensorFlow不僅僅是一個程式碼庫

Swift版的TensorFlow不僅僅是另一種語言的TensorFlow。

 

從本質上來說,它是Swift語言的另一個分支(就像在git上建立branch一樣)。這意味著Swift版的TensorFlow並不是一個程式碼庫, 它本身就是一種語言,它內建的功能支援TensorFlow所需的所有功能。

 

例如,Swift版的TensorFlow擁有非常強大的自動微分系統,這是深度學習計算梯度所需的基礎。相比之下,Python的自動微分系統不是語言的核心組成部分。有一些最初為Swift版的TensorFlow開發的功能後來被整合到了Swift語言本身中。

Swift非常快

當第一次得知Swift的執行速度與C程式碼一樣快時,我感到非常驚訝。我知道C經過了高度最佳化,且可以實現非常高的速度,但這需要以微記憶體管理為代價,因此C不能保證記憶體的安全。此外,C不是一種非常容易學習的語言。

 

如今,Swift的數值計算速度與C一樣快,還沒有記憶體安全的問題,而且更容易學習。Swift背後的LLVM編譯器功能非常強大,並且擁有非常高效的最佳化功能,可以確保程式碼快速地執行。

你可以在Swift中使用Python、C和C++程式碼

由於Swift的機器學習才剛剛開始,因此Swift的機器學習庫並不多。然而,你無需擔心,因為Swift可以很好地與Python語言結合。你只需在Swift中匯入Python庫,就可以放心使用了。

 

與此同時,你還可以將C和C++庫匯入到Swift中(對於C++,你需要確保頭檔案是用純C編寫的,沒有C++的特性)。

 

總而言之,如果你需要的某個特定的功能尚未在Swift中實現,則可以匯入相應的Python、C或C++包。這一點簡直逆天了!

Swift還可以深入底層

如果你曾經使用過TensorFlow,那麼很可能是透過Python包來實現的。在底層,Python版的TensorFlow是用C實現的。所以在TensorFlow中呼叫函式時,你一定會在某個層面上遇到一些C程式碼。這意味著在你檢視原始碼的時候,會遇到一些限制。例如,你想看看摺積的實現方式,卻發現看不到Python程式碼,因為它是用C實現的。

 

然而,在Swift中情況有所不同。Chris Lattner稱Swift是“LLVM [組合語言]的語法糖”。這意味著從本質上講,Swift非常靠近硬體,Swift與硬體之間沒有其他用C寫的附加層。這也意味著Swift程式碼非常快,如上所述。

 

因此,開發人員能夠檢查所有的程式碼,無論是高層的程式碼還是非常底層的程式碼,都無需深入C。

將來的發展

Swift只是Google深度學習創新的一部分。還有另一個非常密切相關的元件:MLIR(Multi-Level Intermediate Representation,多層中間表示)。MLIR將會成為Google統一的編譯基礎設施,它允許你用Swift(或任何其他支援的語言)編寫程式碼,並編譯成任何支援的硬體。

 

目前,有許多針對不同標的硬體的編譯器,但MLIR將改變這種局面,它不僅可以支援程式碼的可重用性,而且還允許你編寫編譯器自定義的底層元件。同時,它還允許研究人員應用機器學習來最佳化低階演演算法:

雖然MLIR是機器學習的編譯器,但我們也看到它可以將機器學習的技術應用到編譯器本身!這一點非常重要,因為工程師開發數值計算庫的速度跟不上機器學習模型或硬體多元化的速度。

想象一下,我們能夠使用深度學習來最佳化處理資料的底層記憶體切片演演算法(類似於Halide正在努力完成的任務)。而且,這隻是一個開端,還有其他機器學習的創造性應用也可以在編譯器中使用!

總結

如果你正在研究深度學習,那麼我建議你開始學習Swift語言。與Python相比,Swift擁有多方面的優勢。Google正在大力投資,讓Swift成為TensorFlow多層基礎設施的關鍵組成部分,而且Swift很可能成為深度學習的語言。因此,先下手為強,儘早開始學習Swift吧。

 

原文:https://towardsdatascience.com/why-swift-may-be-the-next-big-thing-in-deep-learning-f3f6a638ca72

本文轉自公眾號“CSDN”,ID:CSDNnews)

贊(0)

分享創造快樂