清华毕业生开发新特效编程语言:99 行代码背后 20 多年的故事...
不知道大家看沒看《冰雪奇緣2》,反正我看完之后的感覺,就是看兩個(gè)公主玩了一百分鐘的塞爾達(dá)...沒有任何別的想法...
但有一位清華姚班畢業(yè)的大佬 —— 胡淵鳴,在看完之后,試著用 99 行代碼實(shí)現(xiàn)了冰雪奇緣里的特效場景:
▼
14 萬個(gè)水,果凍,和雪「粒子”」
是不是很炫酷?
代碼雖然很短,但背后的故事卻很長。今天我們就來看一下,這 99 行代碼背后,橫跨了 20 多年的故事。
胡淵鳴其人
胡淵鳴是一個(gè)不折不扣的少年天才,讀高一的時(shí)候就已經(jīng)被保送了清華。
胡淵鳴第一次嘗試編程,大概是小學(xué)三年級(jí)。當(dāng)時(shí)他的一個(gè)堂姐喜歡在家玩《仙劍奇?zhèn)b傳》,覺得特別有意思。當(dāng)時(shí)他就想,也要做出一個(gè)這樣的游戲來。然后就開始有意識(shí)地接觸這方面的書籍。剛好他的父親就是大學(xué)信息學(xué)教師,幫他買了不少計(jì)算機(jī)方面的書。
小時(shí)候他的父母經(jīng)常要上課,就把年幼的小胡一個(gè)人放在大學(xué)研究生工作室里,里面都是計(jì)算機(jī),一放就是大半天,他就跟著那些研究生一起,看著他們寫程序,一開始看不懂,就是玩。
至于快不快樂,他自己也說不上來。
2013 年胡淵鳴保送進(jìn)入清華姚班。本科期間,胡淵鳴先后前往東京大學(xué)、斯坦福大學(xué)訪學(xué),并曾于微軟亞洲研究院實(shí)習(xí),從事深度學(xué)習(xí)和計(jì)算機(jī)圖形學(xué)研究。本科便有多篇論文中選 CVPR、SIGGRAPH 等國際頂會(huì)。
2017 年,胡淵鳴進(jìn)入 MIT 讀博。入學(xué) 13 個(gè)月后,完成碩士論文 ChainQueen,拿到 MIT 碩士學(xué)位。博一期間,共發(fā)表 6 篇頂會(huì)論文。
技術(shù)向:99 行代碼的《冰雪奇緣》
做CG 特效一直都是一個(gè)燒錢的事情,不然我們看動(dòng)畫片時(shí)也不會(huì)總是刷“五毛特效”、“經(jīng)費(fèi)在燃燒”這些關(guān)鍵詞。
背后的原因一是門檻高,二是對性能有著極高的要求。自己渲染過視頻的人都知道,隨便一個(gè)小視頻,哪怕是高配筆記本也要渲染半天。
然而,胡淵鳴開發(fā)的這種新的 CG 特效編程語言 Taichi(太極),大大降低了門檻。就像開頭我們提到的,在我們的筆記本上,僅需幾分鐘就能渲染完成一個(gè)簡單的物理場景。
Taichi 中的可微分編程,可以通過蠻力的梯度下降有效地優(yōu)化神經(jīng)網(wǎng)絡(luò)控制器,而不必使用強(qiáng)化學(xué)習(xí)。10 種可微分模擬器中的大多數(shù)模型可以在 2-3 小時(shí)內(nèi)實(shí)現(xiàn),而且大部分不需要 GPU。這些示例中,彈性體、剛體、流體、光線的折射、彈性碰撞,常見物理環(huán)境應(yīng)有盡有。
雖然語法看起來是 Python,其計(jì)算部分卻會(huì)被一整套編譯系統(tǒng)接管,最后輸出可執(zhí)行的x86_64或者PTX instructions,能夠在 CPU/GPU 上高效運(yùn)行。
這么說大家可能對這個(gè)項(xiàng)目的優(yōu)秀程度沒概念,作者的論文里幫我們做一個(gè)比較:借助 Taichi 的渲染速度,比 TensorFlow 快 100 多倍、比 PyTorch 快 10 倍。
代碼背后的故事
據(jù)胡淵鳴說,他是為了解決計(jì)算機(jī)圖形學(xué)研究對性能的追求以及生產(chǎn)力低下的問題,才決定重新設(shè)計(jì)編程語言。
本來胡淵鳴想把 Taichi 做成一種單獨(dú)的編程語言,但是為了方便大家使用,他用了一句 import taichi as ti 把 Taichi 語言假裝成了 Python。這樣做不僅能使用很多現(xiàn)成的 Python IDE,與 Numpy、MatPlotlib 等工具庫無縫銜接,還降低了學(xué)習(xí)的門檻。
在他的概念里,計(jì)算機(jī)圖形學(xué),和其他科學(xué)一樣,應(yīng)該把"簡單性"作為追求之一。就像如果 MLS-MPM 不能被 88 行代碼實(shí)現(xiàn),求它的導(dǎo)數(shù)可能也就不能“只”用120個(gè)公式完成,可能也就不會(huì)有ChainQueen(可微物理引擎),更不會(huì)有ChainQueen啟發(fā)的工作(比如DiffTaichi)。
而化繁為簡本身就是科研的意義之一。
但做這件事對胡淵鳴來說,也是一個(gè)大膽的決定,因?yàn)殡m然他之前花了很多時(shí)間做 low-level performance engineering,但是真動(dòng)手寫個(gè)編譯器還從沒干過。
從 2019 年 1 月起,他便一直在做 Taichi programming language,這個(gè)結(jié)果最終發(fā)表在 SIGGRAPH Asia 2019 上。
毫無疑問,Taichi 編程語言的工作量是非常大的。這是一個(gè)全新的系統(tǒng),項(xiàng)目早期要做的設(shè)計(jì)決策非常多。這給他帶來一正一反兩個(gè)結(jié)果:
1. 設(shè)計(jì)決策可以只在腦子里進(jìn)行,而不需要盯著屏幕。這意味著這個(gè)項(xiàng)目總體還是比較“健康”的:代碼寫累了就可以閉眼甚至躺床上想想別的地方怎么設(shè)計(jì)。
據(jù)胡淵鳴在知乎里說的,Taichi programming language 的 1/3 是在床上、公交車上完成的。這樣的時(shí)間分配一定程度上避免了 Taichi 編譯器的開發(fā)損傷他的頸椎和視力。
2. 早期設(shè)計(jì)決策需要隨機(jī)應(yīng)變,決策的交流是非常低效的。人與人之間同語言交流的帶寬比腦內(nèi)帶寬低好幾個(gè)數(shù)量級(jí),就像 network bandwidth 和 L1-d$ bandwidth 的差異一樣,于是他只好一路從底層的代碼生成(codegen),到中間表示(IR)和優(yōu)化(opt),到前端語法,最后到圖標(biāo)設(shè)計(jì),都自己干了。
但面對這么大的工作量,有時(shí)會(huì)“累覺不愛”,但胡淵鳴只要睡一覺起來之后就又會(huì)重燃斗志。這可能就是我們和大佬之間的差距了 ——?我睡一覺之后,只想再睡個(gè)回籠覺...
我們只看到了牛逼閃閃的結(jié)果,但背后的艱辛可能只有這些所謂的“天才”自己才知道了。
據(jù)胡淵鳴自己說,他有一次連續(xù)在家寫了 5 天代碼沒出門,學(xué)長都說他身上“長蘑菇”了。
彩蛋花絮
再牛的人,也逃不過真香定律。不知道胡淵鳴還記不記得高一參加完競賽后揚(yáng)州晚報(bào)對他的采訪:
揚(yáng)州晚報(bào)記者:對自己的未來有什么想法?大學(xué)會(huì)學(xué)什么專業(yè)?
胡淵鳴:我父母和我交流過,大學(xué)肯定會(huì)學(xué)計(jì)算機(jī)相關(guān)專業(yè)。擺在我面前的其實(shí)有兩條路,要么做研究,要么做管理。雖然我對編程感興趣,但我不甘心一輩子就做一個(gè)程序員,包括想在做班長的經(jīng)理,其實(shí)還是想做管理。不過現(xiàn)在當(dāng)務(wù)之急還是把眼前的事情做好。
不知道胡淵鳴老師在體驗(yàn)到技術(shù)的「創(chuàng)世」魅力后,現(xiàn)在還這么想么?
胡淵鳴知乎原文:
https://zhuanlan.zhihu.com/p/97700605
論文地址:
https://arxiv.org/abs/1910.00935
太極項(xiàng)目地址:
https://github.com/yuanming-hu/taichi
taichi_mpm項(xiàng)目地址:
https://github.com/yuanming-hu/taichi_mpm
揚(yáng)州晚報(bào)采訪胡淵鳴:
http://news.163.com/10/1206/15/6N7SBAKB00014AED.html
- END -
備注:公眾號(hào)菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧2019年公眾號(hào)文章精選適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊AI基礎(chǔ)下載(第一部分)備注:加入本站微信群或者qq群,請回復(fù)“加群”加入知識(shí)星球(4500+用戶,ID:92416895),請回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的清华毕业生开发新特效编程语言:99 行代码背后 20 多年的故事...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实用 | PyCharm常用快捷键整理
- 下一篇: 50题matplotlib从入门到精通