← 回到天際線 思考機器第 35 層 / 102

EP 3812023-06-023:34:03 ROUND 2

Mojo:向 AI 軟體複雜度宣戰

Chris Lattner

Mojo 語言創造者 Chris Lattner 談為什麼要做一個相容 Python、效能逼近 C 的新語言,想解掉 AI 軟硬體太複雜的問題。

Chris Lattner: Future of Programming and AI | Lex Fridman Podcast #381在 YouTube 看 ↗

重點6 條

  1. 一個能跑得比 C 快的 Python:Mojo 是 Python 的超集,語法相容既有程式碼,卻可以漸進式加入型別,透過編譯、向量化等技巧拿到比原生 Python 快上數萬倍的效能。
  2. 把複雜度留給函式庫,不留給編譯器:Mojo 刻意不把整數、浮點數這些型別寫死在語言裡,而是讓專家在函式庫層級實作,讓一般使用者和硬體專家都能各自擴充系統。
  3. 值語意與所有權,資料不會被偷改:借鏡 Rust、Swift 的所有權設計,Mojo 讓陣列、字典這些集合型別在傳遞時表現得像獨立的值,卻不用真的複製資料,減少常見的資料共享錯誤。
  4. AI 真正的敵人是複雜度,不是哪家晶片:Lattner 認為 AI 產業的問題不在硬體本身,而是模型、框架、晶片三邊各自演化出的複雜生態,讓部署一個模型動輒要花上幾十人、好幾個月。
  5. 從 Swift 的教訓學會慢慢來:Lattner 談到當年 Swift 倉促上線造成的壓力,這次刻意把 Mojo 定位成剛起步的 0.1 版,寧可晚一點也要把地基打穩。
  6. 比起末日論,更擔心 AI 能力被壟斷:Lattner 對 AGI 風險保持樂觀,但更在意訓練模型的天價成本會把 AI 能力集中在極少數大公司手上。

時間軸26 段

01 02:24
重逢與 Mojo 願景

兩人兩年沒見,Lattner 說 Mojo 的目標是打造一個能跟著硬體一起變形的通用運算平台,讓人不用每次換裝置就重寫程式。

02 12:51
堅持用縮排

Lattner 認為大括號語言最後也得靠自動排版工具維持一致,既然如此不如直接用縮排定義區塊,少一種語法可以出錯。

03 16:02
編譯期的動態特性

Mojo 把 Python 那種執行期才決定行為的動態特性搬到編譯期跑,讓你能寫出動態、好用的 API,卻不用付執行期的效能代價。

04 22:16
Auto-tuning 自動調參

與其要工程師背下快取大小、向量長度這些硬體細節,Mojo 讓程式自己試哪種切法最快,找到答案後直接快取起來重複用。

05 27:35
35,000 倍加速哪裡來

先把直譯器換成編譯器拿到幾倍效能,再拿掉物件標頭與參照計數、改用暫存器與向量指令,一路疊加起來就是巨大的加速。

06 31:01
漸進式型別

Mojo 的型別是選配的,可以完全不管它,也可以加了才拿到編譯器的效能與安全檢查,不像 Python 現有型別系統只是提示。

07 43:44
開源社群的壓力

Discord 上一萬多人各自想要不同東西,Lattner 說解法是先公開路線圖、把重心放在修 bug,再照順序把功能一項一項放出來。

08 47:50
值語意避免資料被偷改

傳統做法是每次都做防禦性複製,Mojo 改用參照計數延遲複製,資料真的被改的那一刻才複製,既安全又減少不必要的複製。

09 54:29
所有權與借用

像 atomic number、資料庫控制代碼這種不能隨便複製或搬移的型別,Mojo 讓你明確表示要借用還是要拿走所有權。

10 1:00:15
大模型跨機器部署

模型大到塞不進一台機器時,過去得手動把 Python 重寫成 C++ 再切給多台機器跑,這正是 Modular 想幫忙處理的部分。

11 1:04:59
真正的敵人是複雜度

Lattner 說硬體、模型、部署三個環節各自演化出的複雜生態,像魚看不見水一樣無所不在,讓部署一個模型要花好幾週甚至好幾個月。

12 1:11:15
新硬體與異質運算

過去每出一種新加速器,全世界就得重寫一輪核心運算;現代手機裡好幾種 CPU、GPU、專用晶片要同時運作,也得算出搬資料與運算本身的代價,才能決定丟給哪顆晶片做。

13 1:26:17
瓶頸是記憶體不是算力

現在的加速器算力足夠,真正拖慢速度的是資料在不同層級記憶體之間搬來搬去,所以 kernel fusion 這類技巧才這麼關鍵。

14 1:34:29
免改碼先拿 12 倍

既有 Python 程式碼原封不動搬進 Mojo 就能拿到十幾倍加速,比起把 CPython 做快 20%,Lattner 說這是完全不同量級的目標。

15 1:50:04
Guido 怎麼看 Mojo

Lattner 說公開前就先找 Guido 聊過,Guido 最在意的是別重演 Python 2 到 3 那種社群分裂,Mojo 也借用了不少 Swift 過渡 Objective-C 的經驗。

16 2:00:38
放棄 Swift for TensorFlow

在 Google 做的 Swift for TensorFlow 研究計畫最後沒有成功,最大教訓是機器學習的人都習慣用 Python,逼大家換語言門檻太高。

17 2:13:07
為什麼要用 Mojo

除了效能帶來的爽感,Lattner 認為真正會推動採用的是它解決了實際痛點,而且可以照自己的步調,從已知的 Python 慢慢加新功能。

18 2:20:44
Playground 與 Swift 教訓

Mojo 目前只開放雲端的 playground 給人玩,Lattner 說這是吸取 Swift 當年匆促上線、社群被一堆 bug 搞得又累又氣的教訓。

19 2:31:45
套件打包的難題

Python 加 C 混合套件的打包一直是業界痛點,Lattner 認為 Mojo 把兩種語言合而為一,有機會直接解掉這個問題。

20 2:39:58
def 與 fn 的差別

def 保留 Python 原本寫法,fn 則要求先宣告變數才能用,多一層編譯器檢查,適合在意可預測性的人。

21 2:44:38
例外處理的設計

C++ 的例外處理平時零成本、拋出時卻貴到嚇人,Mojo 把拋錯做得跟正常回傳一樣快,這樣才有辦法在 GPU 這種地方使用。

22 2:55:44
變數何時該被銷毀

多數語言等到離開作用域才清掉變數,Mojo 選擇在最後一次用到它之後立刻銷毀,換來更好的記憶體使用與尾端呼叫最佳化。

23 3:05:32
打造 Modular 團隊

想挖的人才手上都已經有工作,Lattner 說靠的是先把文化立好、付業界頂尖薪水,再靠遠端優先加上定期實體聚會把團隊黏在一起。

24 3:17:15
LLM 幫忙寫程式

Lattner 說 LLM 擅長把重複、有前例可循的工作自動化掉,但建語言、建產品這種要跟人溝通、理解問題本質的事,還是得靠人。

25 3:24:04
AGI 風險

Lattner 對 AGI 明年就出現不樂觀,也坦言不花時間擔心天網接管一切這種事,真的發生的話他也已經死了。

26 3:30:41
未來與給年輕人的建議

他更擔心訓練模型的天價成本會把 AI 能力集中在極少數公司手上,也建議年輕人別急著跟主流,去碰別人還沒碰的問題。