Google開(kāi)源Swift for TensorFlow無(wú)疑是對(duì)熱衷于喜愛(ài)Swift編程語(yǔ)言的開(kāi)發(fā)者的一種特殊福利。這也不由得讓我更加欽佩Swift之父Chris Lattner此舉的偉大。
此前,Lattner在蘋果領(lǐng)導(dǎo)開(kāi)發(fā)的Swift不僅速度快,可用性高,在開(kāi)發(fā)者群體中極受歡迎,隨后,在Tesla短暫停留的六個(gè)月之后,Lattner于2017年8月選擇加盟Google Brain,專攻機(jī)器學(xué)習(xí)和人工智能,目前來(lái)看,Swift for TensorFlow應(yīng)該其加入Google之后的第一個(gè)大動(dòng)作。
上個(gè)月底,在TensorFlow舉辦的開(kāi)發(fā)者峰會(huì)上,Google重磅發(fā)布了許多產(chǎn)品。除了TensorFlow.js的發(fā)布之外,還有一個(gè)就是宣布了即將開(kāi)源的Swift for TensorFlow。昨日,Google的承諾如期兌現(xiàn),也再次將人工智能和深度學(xué)習(xí)相關(guān)項(xiàng)目研發(fā)的從業(yè)者對(duì)TensorFlow的喜愛(ài)推向高潮。據(jù)了解,Swift for TensorFlow在GitHub上開(kāi)源,鏈接為:https://github.com/tensorflow/swift。
可以說(shuō)截止目前,TensorFlow已經(jīng)滿足了包括Python、Java、Swift、Go、C等多種編程語(yǔ)言的支持。
據(jù)TensorFlow官方介紹,
“Swift for TensorFlow 為 TensorFlow 提供了一種新的編程模型,將 TensorFlow 計(jì)算圖與 Eager Execution 的靈活性和表達(dá)能力結(jié)合在了一起,同時(shí)還注重提高整個(gè)軟件架構(gòu)每一層的可用性。
此外,TensorFlow還編寫了一些文檔,其中詳細(xì)介紹了其理論和實(shí)現(xiàn),存放在README 文件中,鏈接:https://github.com/tensorflow/swift/blob/master/README.md。
第一個(gè)必讀文檔是“Swift for TensorFlow 設(shè)計(jì)總覽”,這里介紹了項(xiàng)目的主要組成部分以及結(jié)合方式。
另外,TensorFlow還詳細(xì)介紹項(xiàng)目的幾個(gè)重要領(lǐng)域,通過(guò)“Graph Program Extraction”的算法,可以讓開(kāi)發(fā)者用 Eager Execution 式的編程模型來(lái)實(shí)現(xiàn)代碼,同時(shí)保留 TensorFlow 計(jì)算圖的高性能優(yōu)勢(shì)。并且,這個(gè)項(xiàng)目還允許開(kāi)發(fā)者直接通過(guò)Swift代碼任意使用Python API。
當(dāng)然,TensorFlow官方還提到,之所以選擇Swift作為主語(yǔ)言,目的在于“實(shí)現(xiàn)可靠的 Graph Program Extraction 算法對(duì)于編程語(yǔ)言的設(shè)計(jì)有很高的要求”。
總的來(lái)講,自從Tensorflow開(kāi)源之后,其提供的API對(duì)搭建神經(jīng)網(wǎng)絡(luò)有著足夠的自由度,很大程度上為開(kāi)發(fā)者們搭建和實(shí)現(xiàn)功能解決了后顧之憂,但另一方面,鑒于使用TensorFlow的基本模型,Python作為數(shù)據(jù)科學(xué)家專用的最舒適的語(yǔ)言,與TensorFlow也是一個(gè)很自然的契合。甚至連fast.ai創(chuàng)始人、前任Kaggle總裁Jeremy Howard在看到此次項(xiàng)目之后曾在Twitter上評(píng)論:“我們是不是終于可以放下Python了?”
Jeremy Howard在Twitter上的回復(fù)
此前,TensorFlow官方曾給出一個(gè)特別的提示:“現(xiàn)在使用Swift for TensorFlow重寫你的深度學(xué)習(xí)模型還為時(shí)尚早?!?/p>
那么,我們何時(shí)需要開(kāi)始真得需要并投入到Swift中來(lái)呢?
近期,來(lái)自Fritz.ai聯(lián)合創(chuàng)始人兼CEO Jameson Toole發(fā)表一篇標(biāo)題為《為什么數(shù)據(jù)科學(xué)家應(yīng)該開(kāi)始開(kāi)始學(xué)習(xí)Swift》(Why data scientists should start learning Swift),其中,他談到了Swift for Tensorflow以及機(jī)器學(xué)習(xí)發(fā)展的未來(lái)。
他表示,不要將Swift視為TensorFlow的簡(jiǎn)單包裝,以便其更易于在iOS設(shè)備上使用。其意義遠(yuǎn)不止如此。該項(xiàng)目改變的將是整個(gè)機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)使用的默認(rèn)工具。
為什么這么講呢?
他繼續(xù)談到:
“在此背景之下,可以看到兩種趨勢(shì)正慢慢滲透:一個(gè)是通過(guò)神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)掀起的人工智能復(fù)興;一個(gè)是向數(shù)十億智能手機(jī)和物聯(lián)網(wǎng)設(shè)備上運(yùn)行的移動(dòng)為先應(yīng)用的轉(zhuǎn)變。這兩種技術(shù)都需要高性能計(jì)算能力,這種情況下Python就顯得尤為不適了。
一方面,深度學(xué)習(xí)在算力上非常昂貴,需要通過(guò)張量運(yùn)算的長(zhǎng)鏈傳遞巨大的數(shù)據(jù)集。為了快速執(zhí)行這些計(jì)算,軟件必須將數(shù)以千計(jì)的線條和內(nèi)核與專用處理器進(jìn)行編譯。在移動(dòng)設(shè)備的功耗和熱量被得以真正關(guān)注的情況下,這些問(wèn)題開(kāi)始加劇了。相對(duì)來(lái)講,以更少的內(nèi)存換來(lái)更為高效的處理器以優(yōu)化應(yīng)用,這都是一個(gè)不小的挑戰(zhàn)。顯然,迄今為止,Python依然不再是一個(gè)很好的解決方案。
而對(duì)數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)研究人員來(lái)講,這就是很大的問(wèn)題。因?yàn)?,我們不再訴諸于讓GPU承受大量工作負(fù)載,但多數(shù)人又深陷移動(dòng)應(yīng)用開(kāi)發(fā)的泥潭,再耗費(fèi)時(shí)間學(xué)習(xí)一門新的編程語(yǔ)言似乎不太現(xiàn)實(shí),但這種轉(zhuǎn)換成本實(shí)在太高了。例如Node.js這樣的JavaScript項(xiàng)目和React Native這樣的跨平臺(tái)抽象工具?,F(xiàn)在,我很難在Python的環(huán)境下完成項(xiàng)目。
在由機(jī)器學(xué)習(xí)和邊緣計(jì)算主導(dǎo)的世界中,Python無(wú)法成為端到端語(yǔ)言,主要還是因?yàn)镾wift for TensorFlow的推動(dòng)。Chris Lattner認(rèn)為,Python作為一種動(dòng)態(tài)型語(yǔ)言,無(wú)法帶領(lǐng)我們走得更遠(yuǎn)。用他的話來(lái)講,工程師需要一種把機(jī)器學(xué)習(xí)當(dāng)做‘一等公民’的編程語(yǔ)言。當(dāng)然,雖然他深刻闡述了為什么采用新的編譯分析與改變利用TensorFlow搭建項(xiàng)目的方式息息相關(guān),但是他最為引人矚目的還對(duì)編程過(guò)程的理解?!?/p>
Chris Lattner提出了構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)的一種新的方式
Jameson Toole做出構(gòu)想,任何一種能夠方便機(jī)器學(xué)習(xí)的編程語(yǔ)言所具有的特征:
可讀、高效語(yǔ)法
腳本功能
類似于Notebook界面
大型、活躍的社區(qū)可構(gòu)建第三方機(jī)構(gòu)
從TPU到移動(dòng)芯片等專業(yè)硬件,可提供干凈、自動(dòng)化的編碼方式
移動(dòng)設(shè)備上的本機(jī)執(zhí)行
性能更接近于C
寫到最后,Jameson Toole還表示:Lattner和他的團(tuán)隊(duì)正在用Swift for TensorFlow一一核實(shí)這些特性。首先,其語(yǔ)法幾乎與Python一模一樣。有一個(gè)用于腳本和筆記本的編譯器。最重要的是,它們能通過(guò)運(yùn)行任意Python代碼來(lái)幫助遷移,而且由于Swift現(xiàn)在是iOS應(yīng)用開(kāi)發(fā)的默認(rèn)選項(xiàng),因此部署到移動(dòng)端非常容易。Swift的開(kāi)放源代碼編譯器和靜態(tài)類型使得定位特定AI芯片組成為可能。
聯(lián)系客服