自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

99行代碼實現冰雪奇緣特效的太極再進化

新聞 人工智能
現代動畫電影(包括《冰雪奇緣》等),經常使用基于物理的動畫生產特效,豐富感官的體驗。基于粒子的表示是其中常用的方法。

得益于計算機仿真技術的不斷發(fā)展,我們能夠在電腦中重建越來越逼真的現實世界,制作出《冰雪奇緣》等優(yōu)秀的特效電影。

但逼真的場景、豐富的細節(jié)離不開超高精度的物理模擬,因此特效的每一幀幾乎都是用經費燒出來的。

現代動畫電影(包括《冰雪奇緣》等),經常使用基于物理的動畫生產特效,豐富感官的體驗。基于粒子的表示是其中常用的方法。場景越大,粒子就越多。比如,要模擬一個 300 米長的潰壩場景中的水,可能會需要數千萬粒子,而這些粒子的存儲需要大量顯存。比如說,如果需要96GB的顯存,則需要購置大量高端顯卡,如 4 塊 NVIDIA Quadro P6000 GPU。

哦,對了,一塊 P6000 在 Amazon 上的售價約為 4000 美元,而這樣的 GPU,你要買 4 塊。顯然,這個成本不是普通家庭能玩得起的。

針對這一現狀,快手、麻省理工、浙大、清華的研究者進行了物理編譯器自動量化方面的研究,提出了一套用于量化模擬的新的語言抽象和編譯系統(tǒng)——QuanTaichi。它可以使用低精度量化的數字數據類型并將其打包(packing)以表示模擬狀態(tài),從而減少了內存空間和帶寬消耗。有了這項技術的加持,高精度的物理模擬只需要一塊 GPU 就能實現

QuanTaichi 的實現基于 MIT CSAIL 胡淵鳴等人之前提出的「太極(Taichi)」編程語言和編譯器,使開發(fā)人員可以輕松地在不同的全精度和量化模擬器之間進行切換,以探索最佳的量化方案,并最終在空間和精度之間取得良好的平衡。相關工作已經入選圖形學頂會 SIGGRAPH 2021,也已經被合入到了太極的開源 Github 庫中。

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造
  • 論文鏈接:https://yuanming.taichi.graphics/publication/2021-quantaichi/quantaichi.pdf
  • 項目地址:https://yuanming.taichi.graphics/publication/2021-quantaichi/
  • GitHub 地址:https://github.com/taichi-dev/quantaichi

下面這個視頻展示了量化后的仿真結果。兩只兔子形煙霧(4億體素)演化的逼真程度和全精度浮點數的結果不相上下。但需要指出的是,這個 demo 需要的存儲空間僅為全精度浮點數模擬的二分之一!

為了驗證結果,研究人員還做了一些用戶調研,測試題大致如下。你能分辨出哪個是量化后的嗎?

同樣的技術還可以應用在手機端,使得物理模擬在手機端提速 40%,讓運算能力不太強的手機運行更復雜的效果。

總體來看,QuanTaichi 不僅可以在通用 GPU 計算領域大幅提升研發(fā)效能,助力游戲中的物理模擬、大尺度圖像處理、媒體編解碼、科學計算等方向,還適用于太極平臺上應用的各類模型,能夠提升存儲空間的使用效率,也有助于太極技術生態(tài)的未來發(fā)展。

目前,太極技術已經讓快手成為首個推出實時液體及煙霧模擬動態(tài)效果的短視頻和直播平臺,行業(yè)首發(fā)了「別哭鴨」、「我要去潛水」、「火焰超能力」等特效。其中,「圣誕快樂」魔法表情成為爆款,有 74 萬用戶拍攝并上傳了視頻,大約有兩千多萬用戶觀看了太極支持的這款魔法表情。

技術細節(jié)

用于模擬的量化數字數據類型

在 QuanTaichi 中,研究者提出了以下幾種自定義數值類型:

1. 自定義整數類型(Custom Int)由用戶指定位數的整數類型,包括有符號類型和無符號類型;

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

2. 自定義浮點數類型(Custom Float):由用戶指定位數的浮點數類型,QuanTaichi 為其提供了三種實現:

  • 定點數類型(Fixed-point):定點數使用一個自定義整數加一個縮放因子表示,讀取乘以縮放因子實現整型數到浮點數的轉換;讀取時做相反的操作;
99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造
  • 普通自定義浮點數類型(Floating-point):由用戶指定的小數和指數部分組成;
99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造
  • 共享指數浮點類型(Shared exponent):同樣由用戶指定的小數和指數部分組成。與普通自定義浮點數類型不同的是,該類型會共享同一個指數部分。物理模擬中的數據通常具有物理含義,當某些數值的絕對值顯著大于其他值時,較小的數值通常影響不大。比如:考慮三維速度(u,v,w),當 x 方向的速度的絕對值遠遠大于其他兩個方向時,v 和 w 的數值并不會對模擬造成顯著的影響。

下圖是三種自定義浮點數在內存中的組織形式示例:

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

位適配器類型

當前的計算機體系結構并不支持任意位長度的數據讀寫和計算,因此,研究者在 QuanTaichi 中提出了兩種位適配器:

1. 位結構體(Bit structs)。位結構體允許用戶使用多個不同的自定義類型數據(如 custom int 5、custom float 12 等)填充一個完整的計算機硬件原生支持的類型(如 32 位整數等)。

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

2. 位數組(Bit arrays)。位數組允許用戶在一個硬件原生類型中存儲多個同樣的自定義類型數據。

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

編譯器優(yōu)化

1. 位結構體融合存儲

這種優(yōu)化的核心思想是分析 Kernel 的計算流程,將 bit-struct 內部的成員變量盡可能批量寫入,減少原子性內存訪問次數。

在實際應用中,一個位結構體中的字段經常一起訪問,因此一個位結構體的不同組件很可能被一個 kernel 中的多個語句存儲。在這種情況下,研究者對該位結構中的所有存儲使用一個 atomicRMW(atomic read-modify-write), 以減少內存訪問開銷。

2. 線程安全推斷

判斷操作是否為線程安全,如果本身是安全的,則不用費時的原子寫操作。QuanTaichi 支持兩種訪存模式的優(yōu)化:

  • 按元素訪問(Element-wise accesses)。在并行模擬器中,許多操作以「元素」方式進行:每個獨立線程一次處理一個粒子或體素,與粒子或體素相關的內存加載 / 存儲完全不受數據競爭的影響。在這種情況下,可以安全地使用非原子操作來執(zhí)行內存加載 / 存儲;
  • 位結構體整體存儲(Storing the entire bit struct)。之所以使用 atomicRMW 而不是非原子操作,是為了避免原子位結構體中的部分位被程序并發(fā)修改。但當位結構體整體存儲時,我們并不需要擔心這一問題,因此可以使用非原子操作代替計算代價昂貴的 atomicRMW。

3. 位數組向量化

考慮以下情形:

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

雖然該研究中的系統(tǒng)可以很容易地提高存儲效率,但是這種按位 for 循環(huán)的計算效率很低,原因有兩個。首先,我們必須為模擬的 1 位數值使用硬件原生的 32 位整數寄存器,這只使用了操作位寬度的 1/32。其次,當逐位存儲結果時,為了線程安全,代碼生成器必須發(fā)出大量昂貴的 atomicRMW 操作,因為多個 CPU/GPU 線程可能會在一個 u32 中寫入不同的位,從而導致數據爭用。為此,研究者實現了以下三種優(yōu)化方法:按位進行循環(huán)向量化;帶有偏移量的位向量化讀??;位向量化的整數加法。對位數組加載、存儲并對算法進行矢量化,以便每次迭代都處理一個完整的 32 x u1 位數組,而不是單個的 u1。

實驗結果

「生命游戲」測試

研究者首先在「生命游戲」上測試了他們的系統(tǒng)。生命游戲是一個二維網格游戲,這個網格中每個方格居住著一個活著或死了的細胞。一個細胞在下一個時刻的生死取決于相鄰 8 個方格中活著或死了的細胞的數量。如果相鄰方格活著的細胞數量過多,這個細胞會因為資源匱乏而在下一個時刻死去;相反,如果周圍活細胞過少,這個細胞會因為孤單而死去。

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

每個細胞的「生」或「死」兩種狀態(tài)可以用一個位來表示。在 C 語言等傳統(tǒng)語言中,用戶必須使用 char (u8) 類型來表示細胞狀態(tài),除非他們手動打包 / 拆封這些狀態(tài)。但在 QuanTaichi 系統(tǒng)中,用戶可以在不修改任何計算代碼的情況下將存儲效率提升至原來的 8 倍。

OTCA 元像素是「生命游戲」中的一種特殊結構,該結構由 2048x2048 個細胞組成,其整體行為與單個細胞行為一致。研究者在單張 NVidia RTX 3080 Ti (10GB) 上實現了 70 x 70 個 OTCA 元像素,即超過 200 億個細胞的生命游戲模擬。

[[411446]]

歐拉流體模擬測試

研究者實現了一個基于稀疏網格的 advection-reflection 流體模擬求解器。通過量化方法,他們成功地將每一個網格所需的存儲空間從 84 個字節(jié)壓縮到了 44 個字節(jié)。在 NVidia Tesla V100(32GB)上,他們實現了超過 4.2 億個激活稀疏網格的煙霧模擬。下圖分別是量化的方案和模擬結果。

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造
99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

MLS-MPM 算法測試

研究者選擇了 MLS-MPM 算法測試他們的系統(tǒng)在混合歐拉 - 拉格朗日方法上的有效性。具體來說,他們選擇了一種量化方案,使得每個粒子消耗的存儲空間從 68 個字節(jié)下降到 40 個字節(jié)。在 NVidia RTX 3090 上,他們實現了超過 2.3 億個粒子的彈性體模擬。下圖分別是量化方案和模擬結果:

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造
99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造

由于 iPhone 的 GPU 對整型運算增加了額外的優(yōu)化和加速,因此研究者還在移動設備(iPhoneXS)上測試了量化后的 MLS-MPM 的表現。與臺式機相比,移動設備的計算能力相對有限,并且對實時響應有強烈的需求。因此,它們通常只能運行小規(guī)模的模擬,存儲并不是真正的問題。但在測試中,研究者驚訝地發(fā)現:在背景網格上使用量化數據類型仍然是有提升的。因為移動 GPU 通常只支持 32 位整數的高性能原生 atomicAdd,而并不原生支持浮點數的 32 位 atomicAdd。使用「ti.quant.fixed(fration=32)」表示網格數據可以將軟件模擬的 32 位浮點數 atomicAdd 轉換為硬件原生的 32 位整數 atomicAdd,顯著提高了在 iPhone XS 上運行的 MLS-MPM 程序的 P2G 性能。

99行代碼實現冰雪奇緣特效的太極再進化,胡淵鳴團隊快手聯合打造 

 

責任編輯:張燕妮 來源: 機器之心Pro
相關推薦

2021-07-20 17:38:43

技術資訊

2020-01-07 08:54:37

代碼開發(fā)工具

2023-10-30 16:02:20

區(qū)塊鏈元宇宙

2021-06-18 10:12:09

JS代碼前端

2019-12-03 09:59:00

PythonAI開發(fā)

2009-10-29 16:28:04

2015-10-08 10:55:55

物聯網市場新版圖

2024-02-04 15:58:53

C++ 17編程代碼

2013-01-19 16:25:18

網站安全安全寶

2020-12-30 14:03:29

騰訊AI人工智能

2025-02-24 10:07:04

2022-04-24 15:15:57

前端技術阿里

2018-06-28 22:04:25

智能體華為云人工智能

2018-06-11 16:11:34

騰訊云在線教育

2023-10-27 12:42:19

Testin云測
點贊
收藏

51CTO技術棧公眾號