?Mojo崛起:AI-first 的編程語(yǔ)言能否成為新流行? 原創(chuàng)
作者 | James Thomason
編譯 | 伊風(fēng)
出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)
眨眼之間,你可能會(huì)錯(cuò)過(guò)又一種編程語(yǔ)言的發(fā)明。
有個(gè)笑話說(shuō),程序員花費(fèi)20%的時(shí)間編寫代碼,80%的時(shí)間決定使用什么語(yǔ)言。
事實(shí)上,編程語(yǔ)言如此之多,以至于我們不確定實(shí)際有多少種。據(jù)估計(jì),至少有700種編程語(yǔ)言在不同程度上被使用和濫用。現(xiàn)在存在的編程語(yǔ)言似乎總有改進(jìn)的空間。
隨著AI不斷推動(dòng)技術(shù)進(jìn)步,它也在挑戰(zhàn)我們最流行的編程語(yǔ)言,如Java、C和Python。像其他領(lǐng)域一樣,AI是一個(gè)迫切需要新編程語(yǔ)言來(lái)解決的問(wèn)題。
諸如Mojo、Bend等AI-first的編程語(yǔ)言能否獲得開發(fā)人員的芳心?無(wú)論答案如何,回顧歷史我們會(huì)發(fā)現(xiàn),編程語(yǔ)言的創(chuàng)新并不是一個(gè)壞主意。
1.AI語(yǔ)言的上一個(gè)黃金時(shí)代
這并不是AI第一次推動(dòng)新編程語(yǔ)言的浪潮。20世紀(jì)70年代和80年代是AI語(yǔ)言的黃金時(shí)代,如LISP和Prolog,它們引入了開創(chuàng)性的概念,如符號(hào)處理和邏輯編程。那時(shí),AI也是熱門話題。
值得注意的是,LISP語(yǔ)言對(duì)軟件的未來(lái)產(chǎn)生了深遠(yuǎn)影響,推出了函數(shù)式編程范式,最終影響了現(xiàn)代語(yǔ)言如Python、Haskell和Scala的設(shè)計(jì)。LISP也是首批實(shí)現(xiàn)動(dòng)態(tài)類型的語(yǔ)言之一,在這種類型中,類型與值相關(guān)聯(lián)而不是變量,允許更多的靈活性和更容易的原型開發(fā)。它還引入了垃圾回收功能,自動(dòng)回收不再使用的內(nèi)存,這是許多現(xiàn)代編程語(yǔ)言(如Java、Python和JavaScript)所采用的功能。可以公平地說(shuō),沒(méi)有LISP,我們今天可能不會(huì)在這里。
當(dāng)AI領(lǐng)域在20世紀(jì)70年代和80年代經(jīng)歷了一段資金和興趣減少的長(zhǎng)時(shí)間時(shí),被稱為“AI寒冬”,對(duì)專門AI語(yǔ)言如LISP的關(guān)注開始減退。同時(shí),通用計(jì)算的快速發(fā)展導(dǎo)致了通用語(yǔ)言如C的興起,這些語(yǔ)言為各種應(yīng)用(包括系統(tǒng)編程和數(shù)值計(jì)算)提供了更好的性能和可移植性。
圖片
2.AI-first語(yǔ)言的回歸
現(xiàn)在,歷史似乎在重演,AI再次推動(dòng)了新編程語(yǔ)言的發(fā)明,以解決其棘手的問(wèn)題。現(xiàn)代AI算法所需的強(qiáng)大數(shù)值計(jì)算和并行處理突顯了需要能夠有效橋接抽象和充分利用底層硬件的語(yǔ)言。
可以說(shuō),這一趨勢(shì)始于TensorFlow的Tensor計(jì)算語(yǔ)法、Julia以及重新燃起的對(duì)數(shù)組導(dǎo)向語(yǔ)言如APL和J的興趣,這些語(yǔ)言提供了與機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)相一致的領(lǐng)域特定構(gòu)造。這些項(xiàng)目試圖減少將數(shù)學(xué)概念轉(zhuǎn)換為通用代碼的開銷,讓研究人員和開發(fā)人員能夠更多地關(guān)注核心AI邏輯,而不是低級(jí)實(shí)現(xiàn)細(xì)節(jié)。
最近,一波新的AI-first語(yǔ)言應(yīng)運(yùn)而生,它們從頭開始設(shè)計(jì),以解決AI開發(fā)的特定需求。Higher Order Company創(chuàng)建的Bend旨在為AI提供靈活和直觀的編程模型,具有自動(dòng)微分和與流行AI框架的無(wú)縫集成功能。Modular AI開發(fā)的Mojo則專注于高性能、可擴(kuò)展性和構(gòu)建與部署AI應(yīng)用的易用性。Swift for TensorFlow是Swift編程語(yǔ)言的擴(kuò)展,結(jié)合了Swift的高級(jí)語(yǔ)法和TensorFlow的機(jī)器學(xué)習(xí)能力。這些語(yǔ)言代表了朝向AI開發(fā)的專用工具和抽象的日益增長(zhǎng)的趨勢(shì)。
雖然Python、C++和Java等通用語(yǔ)言在AI開發(fā)中仍然很受歡迎,但AI-first語(yǔ)言的復(fù)興表明,AI的獨(dú)特需求需要專門為該領(lǐng)域量身定制的語(yǔ)言,就像早期的AI研究催生了LISP等語(yǔ)言一樣。
3.Python在AI中的局限性
Python因其簡(jiǎn)單性、通用性和廣泛的生態(tài)系統(tǒng)長(zhǎng)期以來(lái)一直是現(xiàn)代AI開發(fā)者的首選。然而,它的性能限制對(duì)于許多AI用例來(lái)說(shuō)是一個(gè)主要缺點(diǎn)。
用Python訓(xùn)練深度學(xué)習(xí)模型可能會(huì)非常慢——我們說(shuō)的是像在DMV(車輛管理局)排隊(duì)等候那樣慢,等待收銀員找零那樣慢。像TensorFlow和PyTorch這樣的庫(kù)通過(guò)使用底層的C++來(lái)幫助提高性能,但Python仍然是瓶頸,特別是在預(yù)處理數(shù)據(jù)和管理復(fù)雜的訓(xùn)練工作流時(shí)。
在實(shí)時(shí)AI應(yīng)用如自動(dòng)駕駛或?qū)崟r(shí)視頻分析中,推理延遲至關(guān)重要。然而,Python的全局解釋器鎖(GIL)阻止了多個(gè)本機(jī)線程同時(shí)執(zhí)行Python字節(jié)碼,導(dǎo)致在多線程環(huán)境中表現(xiàn)不佳。
在大規(guī)模AI應(yīng)用中,內(nèi)存管理效率對(duì)于最大化可用資源的利用至關(guān)重要。Python的動(dòng)態(tài)類型和自動(dòng)內(nèi)存管理會(huì)增加內(nèi)存使用和碎片化。像C++和Rust這樣的語(yǔ)言提供的低級(jí)內(nèi)存控制允許更有效地使用硬件資源,從而提高AI系統(tǒng)的整體性能。
在生產(chǎn)環(huán)境中部署AI模型,特別是在具有有限計(jì)算資源的邊緣設(shè)備上,用Python可能會(huì)遇到挑戰(zhàn)。Python的解釋性和運(yùn)行時(shí)依賴性會(huì)導(dǎo)致資源消耗增加和執(zhí)行速度變慢。像Go或Rust這樣的編譯語(yǔ)言,因其較低的運(yùn)行時(shí)開銷和更好的系統(tǒng)資源控制,通常更適合在邊緣設(shè)備上部署AI模型。
4.Mojo:新的AI-first編程語(yǔ)言,無(wú)縫銜接Python生態(tài)
Mojo是一種新編程語(yǔ)言,承諾彌合Python的易用性和前沿AI應(yīng)用所需的超快性能之間的差距。Mojo由Swift編程語(yǔ)言和LLVM編譯器基礎(chǔ)架構(gòu)的創(chuàng)建者Chris Lattner創(chuàng)立的公司Modular開發(fā)。Mojo是Python的超集,這意味著開發(fā)者可以利用他們現(xiàn)有的Python知識(shí)和代碼庫(kù),同時(shí)解鎖前所未有的性能提升。Mojo的創(chuàng)造者聲稱,它可以比Python代碼快多達(dá)35000倍。
Mojo設(shè)計(jì)的核心是其與AI硬件(如運(yùn)行CUDA的GPU和其他加速器)的無(wú)縫集成。Mojo使開發(fā)者能夠充分利用專用AI硬件的潛力,而不必陷入低級(jí)細(xì)節(jié)中。
Mojo的一個(gè)主要優(yōu)勢(shì)是它與現(xiàn)有Python生態(tài)系統(tǒng)的互操作性。與Rust、Zig或Nim等語(yǔ)言不同,Mojo允許開發(fā)者編寫與Python庫(kù)和框架無(wú)縫集成的代碼。開發(fā)者可以繼續(xù)使用他們喜歡的Python工具和包,同時(shí)受益于Mojo的性能增強(qiáng)。
Mojo引入了幾項(xiàng)使其與Python區(qū)別開來(lái)的功能。它支持靜態(tài)類型,可以幫助在開發(fā)早期捕捉錯(cuò)誤并實(shí)現(xiàn)更有效的編譯。然而,開發(fā)者仍然可以在需要時(shí)選擇動(dòng)態(tài)類型,提供靈活性和易用性。語(yǔ)言引入了新的關(guān)鍵字,如“var”和“l(fā)et”,提供不同程度的可變性。Mojo還包括一個(gè)新的“fn”關(guān)鍵字,用于在嚴(yán)格的類型系統(tǒng)內(nèi)定義函數(shù)。
Mojo還采用了類似于Rust的所有權(quán)系統(tǒng)和借用檢查器,確保內(nèi)存安全并防止常見編程錯(cuò)誤。此外,Mojo提供指針的內(nèi)存管理,使開發(fā)者可以對(duì)內(nèi)存分配和釋放進(jìn)行細(xì)粒度控制。這些功能有助于Mojo的性能優(yōu)化,并幫助開發(fā)者編寫更高效和無(wú)錯(cuò)誤的代碼。
Mojo最令人興奮的方面之一是其加速AI開發(fā)的潛力。Mojo能夠編譯成高度優(yōu)化的機(jī)器代碼,可以在CPU和GPU上本地速度運(yùn)行,使開發(fā)者能夠在不犧牲性能的情況下編寫復(fù)雜的AI應(yīng)用。語(yǔ)言包括數(shù)據(jù)并行性、任務(wù)并行性和流水線處理的高級(jí)抽象,使開發(fā)者能夠用最少的代碼表達(dá)復(fù)雜的并行算法。
Mojo在概念上比一些其他新興AI語(yǔ)言(如Bend)更低級(jí),后者將現(xiàn)代高級(jí)語(yǔ)言功能編譯到Apple Silicon或NVIDIA GPU上的本地多線程。Mojo提供對(duì)并行性的細(xì)粒度控制,特別適合手工編碼現(xiàn)代神經(jīng)網(wǎng)絡(luò)加速。通過(guò)為開發(fā)者提供直接控制計(jì)算映射到硬件上的能力,Mojo實(shí)現(xiàn)了高度優(yōu)化的AI實(shí)現(xiàn)。
圖片
5.利用開源的力量
根據(jù)Mojo的創(chuàng)建者M(jìn)odular的說(shuō)法,自去年8月普遍可用以來(lái),該語(yǔ)言已經(jīng)吸引了超過(guò)17.5萬(wàn)開發(fā)者和5萬(wàn)家組織。
盡管Mojo的性能和潛力令人印象深刻,但其最初的采用可能因其專有狀態(tài)而停滯不前。
然而,Modular最近決定將Mojo的核心組件在定制版Apache 2許可下開源。此舉可能會(huì)加速M(fèi)ojo的采用,并培育更充滿活力的協(xié)作和創(chuàng)新生態(tài)系統(tǒng),類似于開源是Python等語(yǔ)言成功的關(guān)鍵因素。
開發(fā)者現(xiàn)在可以探索Mojo的內(nèi)部工作原理,為其開發(fā)做出貢獻(xiàn),并從其實(shí)現(xiàn)中學(xué)習(xí)。這種協(xié)作方式可能會(huì)導(dǎo)致更快的錯(cuò)誤修復(fù)、性能改進(jìn)和新功能的增加,最終使Mojo更加多功能和強(qiáng)大。
寬松的Apache許可證允許開發(fā)者自由使用、修改和分發(fā)Mojo,鼓勵(lì)圍繞該語(yǔ)言的生態(tài)系統(tǒng)的增長(zhǎng)。通過(guò)開源,Mojo有潛力吸引更多的開發(fā)者、研究人員和企業(yè),使其成為AI開發(fā)的重要工具。
開放源碼的決定還表明Modular對(duì)其技術(shù)和開發(fā)社區(qū)的信心。通過(guò)擁抱開源模式,Modular表明他們致力于透明度、協(xié)作和技術(shù)進(jìn)步,這可能會(huì)吸引更廣泛的開發(fā)者社區(qū)并加速M(fèi)ojo的采用。
6.全新的AI優(yōu)先編程浪潮
雖然Mojo是一個(gè)有前途的新進(jìn)入者,但它并不是唯一一個(gè)試圖成為AI開發(fā)首選的語(yǔ)言。還有幾種其他新興語(yǔ)言也是從頭開始設(shè)計(jì)的,以滿足AI工作負(fù)載的需求。
一個(gè)顯著的例子是Swift for TensorFlow,這是一個(gè)雄心勃勃的項(xiàng)目,旨在將Swift的強(qiáng)大語(yǔ)言功能帶入機(jī)器學(xué)習(xí)。由谷歌和蘋果公司合作開發(fā),Swift for TensorFlow允許開發(fā)者使用原生Swift語(yǔ)法表達(dá)復(fù)雜的機(jī)器學(xué)習(xí)模型,并且具備靜態(tài)類型、自動(dòng)微分和XLA編譯以在加速器上進(jìn)行高性能執(zhí)行。不幸的是,谷歌已經(jīng)停止了該項(xiàng)目的開發(fā),項(xiàng)目現(xiàn)在已歸檔,這顯示了即使是谷歌這樣的巨頭在新語(yǔ)言開發(fā)中獲得用戶吸引力的難度。
此后,谷歌越來(lái)越關(guān)注JAX,一個(gè)用于高性能數(shù)值計(jì)算和機(jī)器學(xué)習(xí)(ML)的庫(kù)。JAX是一個(gè)Python庫(kù),提供高性能的數(shù)值計(jì)算和機(jī)器學(xué)習(xí)功能,支持自動(dòng)微分、XLA編譯和高效使用加速器。雖然它不是獨(dú)立的語(yǔ)言,但JAX擴(kuò)展了Python,使其具有更具聲明性和功能性的風(fēng)格,非常符合機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)。
圖片
最新的新增內(nèi)容是Bend,一種大規(guī)模并行的高級(jí)編程語(yǔ)言,可以將類似Python的語(yǔ)言直接編譯成GPU內(nèi)核。與CUDA和Metal等低級(jí)語(yǔ)言不同,Bend更像是Python和Haskell,提供快速對(duì)象分配、全閉包支持的高階函數(shù)、不受限制的遞歸,甚至繼續(xù)執(zhí)行。它運(yùn)行在大規(guī)模并行硬件(如GPU)上,基于核心數(shù)量實(shí)現(xiàn)近線性加速,無(wú)需顯式的并行注釋——沒(méi)有線程生成、鎖、互斥鎖或原子操作。由HVM2運(yùn)行時(shí)驅(qū)動(dòng),Bend在任何可能的地方利用并行性,使其成為AI的萬(wàn)能工具——適用于各種場(chǎng)合。
圖片
這些語(yǔ)言利用現(xiàn)代語(yǔ)言特性和強(qiáng)類型系統(tǒng),使AI算法的編碼更加表達(dá)性和安全,同時(shí)仍然在并行硬件上提供高性能執(zhí)行。
7.AI開發(fā)新時(shí)代的黎明
像Mojo、Bend、Swift for TensorFlow、JAX等以AI為重點(diǎn)的編程語(yǔ)言的復(fù)興標(biāo)志著AI開發(fā)新時(shí)代的開始。隨著對(duì)更高效、更具表達(dá)性和硬件優(yōu)化工具的需求增加,我們預(yù)計(jì)將看到更多專門針對(duì)AI獨(dú)特需求的語(yǔ)言和框架的涌現(xiàn)。這些語(yǔ)言將利用現(xiàn)代編程范式、強(qiáng)類型系統(tǒng)以及與專用硬件的深度集成,使開發(fā)者能夠構(gòu)建具有前所未有性能的更復(fù)雜的AI應(yīng)用。
AI優(yōu)先語(yǔ)言的興起可能會(huì)激發(fā)AI、語(yǔ)言設(shè)計(jì)和硬件開發(fā)之間相互作用的新一波創(chuàng)新。隨著語(yǔ)言設(shè)計(jì)師與AI研究人員和硬件供應(yīng)商密切合作以優(yōu)化性能和表達(dá)性,我們可能會(huì)看到為這些語(yǔ)言和AI工作負(fù)載設(shè)計(jì)的新型架構(gòu)和加速器的出現(xiàn)。
這種AI、語(yǔ)言和硬件之間的密切關(guān)系對(duì)于釋放人工智能的全部潛力至關(guān)重要,能夠在自動(dòng)化系統(tǒng)、自然語(yǔ)言處理、計(jì)算機(jī)視覺(jué)等領(lǐng)域?qū)崿F(xiàn)突破。我們今天創(chuàng)造的語(yǔ)言和工具正在重塑AI開發(fā)和計(jì)算的未來(lái)。
參考鏈接:??https://venturebeat.com/ai/mojo-rising-the-resurgence-of-ai-first-programming-languages/??
??本文轉(zhuǎn)載自???51CTO技術(shù)棧??,作者:伊風(fēng)
?
