編譯器大佬Chris Lattner全新編程語言「Mojo」:兼容Python核心功能,提速35000倍
對(duì)于全球各地開發(fā)者來說,Chris Lattner 這個(gè)名字絕對(duì)不陌生。
他曾是許多大型技術(shù)項(xiàng)目的領(lǐng)導(dǎo)者,包括 LLVM 編譯器基礎(chǔ)結(jié)構(gòu)項(xiàng)目、Clang C 和 C++ 編譯器、MLIR 機(jī)器學(xué)習(xí)基礎(chǔ)結(jié)構(gòu)等編譯器技術(shù),以及為蘋果生態(tài)系統(tǒng)提供支持的程序設(shè)計(jì)語言 Swift。此外,Chris Lattner 還為 Google Brain 和 TensorFlow 建立和管理了一系列與 AI 相關(guān)的編譯器、運(yùn)行時(shí)和編程語言團(tuán)隊(duì)。
十多年來,Chris Lattner 的職業(yè)履歷算是相當(dāng)豐富,變動(dòng)也算頻繁:
- 2011-2017 年,任蘋果開發(fā)部高級(jí)總監(jiān)、架構(gòu)師
- 2017.1-2017.6,任特斯拉副總裁,負(fù)責(zé)自動(dòng)駕駛
- 2017.8-2020.1,任谷歌 Google Brain 高級(jí)總監(jiān)
- 2020.1,加入芯片創(chuàng)業(yè)公司 SiFive 負(fù)責(zé)平臺(tái)工程
2022 年 1 月,Chris Lattner 正式宣布創(chuàng)業(yè),和 Tim Davis 共同建立了「Modular AI」,希望自下而上重建全球 ML 基礎(chǔ)設(shè)施。在這家新生的公司中,Chris Lattner 以 CEO 身份領(lǐng)導(dǎo)團(tuán)隊(duì)。
其實(shí),Chris Lattner 每一次跳槽的選擇都頗受關(guān)注。對(duì)于「Modular AI」,業(yè)界也是寄予厚望。
近日,Chris Lattner 的創(chuàng)業(yè)之路有了重要?jiǎng)討B(tài)。這一次,他官宣的是全新的編程語言「Mojo」。
「Mojo 結(jié)合了 Python 的可用性與 C 的性能,釋放了 AI 硬件無與倫比的可編程性和 AI 模型的可擴(kuò)展性」—— 它與 Python 一樣易于使用,但具有 C++ 和 Rust 的性能。此外,Mojo 提供了利用整個(gè) Python 庫生態(tài)系統(tǒng)的能力。
Mojo 的出世,在 AI 領(lǐng)域迅速引起了熱議。Jeremy Howard 試用后,在一篇博客文章中表示,Mojo 可能是幾十年來最大的編程進(jìn)步。
「感覺編程被顛覆了?!乖?Jeremy Howard 的記憶中,上次有這樣的感覺,還是他首次上手 Visual Basic v1.0。而在 Mojo 中編寫代碼,讓他重溫了這種「神奇」的感覺。
為什么會(huì)有 Mojo?
關(guān)于「Mojo」這項(xiàng)工作的背景,Chris Lattner 和 Tim Davis 在博客中進(jìn)行了詳細(xì)的說明:
機(jī)器學(xué)習(xí)基礎(chǔ)設(shè)施已經(jīng)為數(shù)十億美元的商業(yè)提供動(dòng)力,并且正在迅速增長(zhǎng)。但是,它要么由硬件團(tuán)隊(duì)為特定的設(shè)備集合構(gòu)建,要么是由工業(yè)研究實(shí)驗(yàn)室構(gòu)建,許多系統(tǒng)是不兼容技術(shù)的集合。
現(xiàn)有的單體系統(tǒng)很難在其最初的領(lǐng)域目標(biāo)之外進(jìn)行擴(kuò)展或通用,這種情況迫使硬件制造商建立自己的技術(shù)棧。造成的結(jié)果就是,人工智能部署行業(yè)是非常分散的,工具鏈就有幾十個(gè),各自有不同的權(quán)衡和限制。更重要的是,這些設(shè)計(jì)模式也因其可用性、可移植性和難以擴(kuò)展而減緩了創(chuàng)新的步伐。
不幸的是,我們也看到,構(gòu)建和部署這些應(yīng)用程序的技術(shù)復(fù)雜性仍然太高。部署人工智能仍然是全棧專家的領(lǐng)域,而最前沿的應(yīng)用只有那些自己建立 ML 技術(shù)的最大科技公司的人可以使用。
大一統(tǒng)的設(shè)想注定會(huì)失敗嗎?今天人工智能的現(xiàn)實(shí)世界的復(fù)雜性是否使得它不可能解決這個(gè)問題?
Chris Lattner 并不這么認(rèn)為。他表示,軟件行業(yè)會(huì)經(jīng)歷周期,我們以前也見過并解決過這樣的問題:
20 世紀(jì) 90 年代的軟件世界有過類似于我們今天看到的人工智能的碎片化問題。當(dāng)時(shí),C 和 C++ 已經(jīng)建立起了社區(qū),但卻被分散在幾十個(gè)專有編譯器中。每一個(gè)都有供應(yīng)商的擴(kuò)展、粗糙的邊緣、奇怪的邊角案例和不完整的實(shí)現(xiàn)。當(dāng)時(shí),構(gòu)建跨平臺(tái)的軟件是如此困難,以至于推動(dòng)業(yè)界出現(xiàn)了一些工具來幫助開發(fā)者應(yīng)對(duì)碎片化,使其更容易安裝、構(gòu)建和配置軟件(例如 autoconf)。
「GCC」就是其中一員。憑借其對(duì)跨平臺(tái)的支持、良好的性能和穩(wěn)定性,以及免費(fèi)性,GCC 在 90 年代獲得了巨大的成功。GCC 的成功推動(dòng)了工具行業(yè)的整合浪潮,由此產(chǎn)生的碎片整理使其功能成為事實(shí)上的標(biāo)準(zhǔn),從而帶來了一波新的創(chuàng)新。它催化了軟件(直接促成了 Linux 等開放源碼軟件社區(qū)的迅速崛起)和硬件(促成了指令集架構(gòu)和新商業(yè)模式的創(chuàng)新)的革命,使前者從零散的 C/C++ 實(shí)現(xiàn)中解放出來,使后者不必追趕快速發(fā)展的 C/C++ 語言標(biāo)準(zhǔn)。
如今,Mojo 的誕生也承擔(dān)了這樣一份希冀。
當(dāng)我們創(chuàng)辦 Modular 時(shí),我們沒有打算建立一種新的編程語言。但是,當(dāng)我們?cè)诮⑽覀兊钠脚_(tái),打算統(tǒng)一世界上的 ML/AI 基礎(chǔ)設(shè)施時(shí),我們意識(shí)到,在整個(gè)堆棧中編程太復(fù)雜了。另外,我們用手寫了很多 MLIR,但并不愉快。
我們想要的是一個(gè)創(chuàng)新的、可擴(kuò)展的編程模型,可以針對(duì)加速器和其他機(jī)器學(xué)習(xí)中普遍存在的異構(gòu)系統(tǒng)。這意味著一種具有強(qiáng)大的編譯時(shí)元編程的編程語言,整合自適應(yīng)編譯技術(shù),在整個(gè)編譯流程中進(jìn)行緩存,以及其他現(xiàn)有語言不支持的東西。
盡管加速器很重要,但最普遍的、有時(shí)被忽視的加速器之一是主機(jī) CPU。今天,CPU 有很多類似張量核心的加速器塊和其他 AI 加速單元,但它們也是專門加速器無法處理的運(yùn)算的后備力量,如數(shù)據(jù)加載、前后處理以及與國(guó)外系統(tǒng)的集成。因此,很明顯,我們不能用一種只與特定處理器一起工作的「加速器語言」來提升人工智能。應(yīng)用 AI 系統(tǒng)需要解決所有這些問題,我們認(rèn)為沒有理由不通過一種語言來完成。
在這種情況下,Mojo 誕生了。
Mojo:比 Python 快 35000 倍的編程語言
在編程語言領(lǐng)域,Python 可以說是非常受歡迎了。如今,這個(gè)領(lǐng)域又迎來一位新的競(jìng)爭(zhēng)者:Mojo。
Mojo 是一門新的編程語言,其將 Python 的易用性和 C 的性能結(jié)合起來,彌合了研究和生產(chǎn)之間的差距。使用 Mojo,用戶可以編寫比 C 語言更快的可移植代碼,并與 Python 生態(tài)系統(tǒng)無縫互操作,其目標(biāo)是成為 AI 研究和生產(chǎn)的理想選擇。
我們先看一個(gè)示例。下圖展示的是 Mojo 與 Python 無縫互操作:
Mojo 語言具有以下特點(diǎn):
首先是可用性和可編程性,只用 Mojo 一種語言就能編寫所有東西。例如可以編寫 Python、大量低級(jí) AI 硬件程序,而不需要 C++ 或 CUDA。
第二是性能,Mojo 解鎖了 Python 性能。利用最先進(jìn)的編譯器和異構(gòu)運(yùn)行時(shí),Mojo 能夠充分利用硬件的全部功能,包括多核、向量單元和加速器單元。在任務(wù)不復(fù)雜的情況下實(shí)現(xiàn)與 C++ 和 CUDA 相當(dāng)?shù)男阅堋?/span>
并行化:Mojo 利用 MLIR,使 Mojo 開發(fā)人員能夠利用向量、線程和 AI 硬件單元。
此外,根據(jù)測(cè)試,Mojo 比 Python 快 35000 倍。
Mojo 第三個(gè)特點(diǎn)是互操作性,可以訪問整個(gè) Python 生態(tài)系統(tǒng),如可以訪問 Numpy、Matplotlib 以及用戶自定義代碼:
第四個(gè)特點(diǎn)是可擴(kuò)展性。使用預(yù)處理和后處理操作就能輕松擴(kuò)展模型,或者用自定義操作替換其他操作。此外,Mojo 還可以利用核融合、圖形重寫、形狀函數(shù)等。
模型的可擴(kuò)展性,Mojo 可以升級(jí)模型中的現(xiàn)有操作。
Modular AI 表示,Mojo 仍在開發(fā)中,開發(fā)者現(xiàn)在可以在 Modular AI 基于 JupyterHub 的 Playground 中試用,用戶只需通讀教程便可編寫自己的 Mojo 代碼。
試用地址:https://docs.modular.com/mojo/get-started.html






