對AI模型進行壓縮激活工作,減小對內(nèi)存的消耗
今天的 AI 模型有數(shù)十億或數(shù)萬億個參數(shù),即輸入和權重。所以我們需要巨大的內(nèi)存來激活。這當然會對芯片設計產(chǎn)生巨大影響,因為激活存儲器經(jīng)常支配平面布局。我們可以嘗試使用量化、稀疏性、權重共享等概念來減少所需的內(nèi)存。但它們只能走這么遠,尤其是在模型龐大且持續(xù)增長的情況下。要是有辦法壓縮激活就好了!好吧,Perceive 的 CEO Steve Teig 想出了一個辦法。
所以很多人都在談論壓縮重量。人們甚至談到了壓縮激活,你知道,用 8 位激活而不是更大的激活來運行它。但有趣的是,當代網(wǎng)絡的激活足跡通常比它們在內(nèi)存中的權重足跡大得多。因此,對于量化和稀疏性以及人們在權重上所做的所有努力,這很棒。在某些方面,更大的問題被忽略了,那就是激活支配了網(wǎng)絡的內(nèi)存占用,它既占用空間又占用能量和時間,因為你必須四處移動激活。
所以當我看到這個問題時,我首先意識到,如果你能做到的話,激活壓縮將是一件好事。其次,應用人們用于激活權重的一些微不足道的技術總比沒有好,但不會讓你走得太遠。所以,是的,如果你能以較低的精度逃脫,你應該使用較低的精度,實踐中激活的稀疏性并不是很好,因為稀疏性是如此隨機,如此不可預測,以至于很難建設性地利用這種缺乏結構。
但更進一步,人們對重量所做的壓縮類型,你會得到 2 倍或 4 倍。那么,您將如何獲得可能需要的 20 倍或 50 倍來擺脫激活通常需要的千兆字節(jié)?因此,這促使我們想出更有創(chuàng)意、更開箱即用的方法來解決這個問題。事實證明,數(shù)量級的壓縮是可能的。所以這就是談話的內(nèi)容。
如果你要做圖像處理,為了具體、超分辨率或圖像降噪或類似的東西,你真的不必看在圖片的總另一端的像素處,對圖片這一端的降噪部分進行降噪。因此,您實際上不必將整個圖像處理為平面。如果你這樣做了,它將占用大量的激活內(nèi)存。
但是,如果您有足夠的計算量來足夠快地完成工作,您實際上可以將圖像分段并按順序執(zhí)行,這是一件半顯而易見的事情,這可能會增加您的計算時間,也許是因為您沒有這樣做一切并行。但是您現(xiàn)在已經(jīng)減少了激活足跡。
所以人們可以概括這個想法并說,好吧,關于神經(jīng)網(wǎng)絡的最酷的事情之一就是在編譯時,當你拿到神經(jīng)網(wǎng)絡時,你完全了解所有的計算依賴關系。大家都知道,神經(jīng)網(wǎng)絡用氣泡表示神經(jīng)元,箭頭表示數(shù)據(jù)移動。好吧,這些箭頭告訴您您的計算是否取決于我的數(shù)據(jù)。如果是這樣,您必須等我完成后才能開始。如果沒有,我們可以并行進行。
好吧,我完全了解情況。你不需要在我之后立即進行。只需要你跟在我后面。所以我有難以置信的靈活性,只是在空間中移動計算的難以置信的靈活性,它們在物理并行設備上進行,并且及時,因為只要依賴關系按順序發(fā)生,我就可以開始了。我仍然可以得到正確的答案。嗯,在空間和時間上、在時空中重新安排計算塊的靈活性是巨大的。而且我可以在空間和時間上打包計算,以一種非常靈活的方式在吞吐量和激活內(nèi)存之間進行權衡。
所以舉個簡單的例子,為了直覺,讓我們假設我們正在對圖像進行降噪,圖像有 8 兆像素。好吧,如果我分成 100,000 個像素塊,(我選擇它是為了讓我可以在腦海中進行數(shù)學計算),我剛剛完成了 1/80 的工作,所以我剛剛將激活足跡壓縮了大約 80折疊?,F(xiàn)在,我可能已經(jīng)減慢了計算速度。但是今天的硬件真的很快。如果我以每秒 30 幀的速度運行來完成工作,我有整整 1/30 秒的時間。但這表明即使是 80 倍壓縮對我來說也很容易獲得。
我們生活在一個有趣的世界,計算幾乎是免費的,而內(nèi)存也幾乎不是免費的。內(nèi)存占據(jù)了我們大部分的芯片,如果你必須把內(nèi)存從芯片上取下來,它幾乎占據(jù)了所有的能量。在我們的例子中,我們在芯片上做所有事情,但即便如此。因此,讓我們利用我們擁有這些快得離譜的晶體管以及其中的大量晶體管來節(jié)省內(nèi)存這一寶貴資源的事實。
所以合理的做法是,當你有比你想要的更多的激活內(nèi)存時,壓縮它,將它的壓縮版本存儲在架子上,然后根據(jù)需要解壓它。而且您幾乎總是可以不只是有損壓縮,而是殘酷的有損壓縮,因為您真正需要哪些原始數(shù)據(jù)以供下游計算使用?它需要一些東西,或一些東西,但不是一切。所以我的建議是我們可以制作簡單的小工具,我稱之為 X 網(wǎng)絡。它看起來像一個 x,因為你有一個看起來像沙漏的上半部分的壓縮器和一個看起來像沙漏的下半部分的減壓器,可以這么說。因此,您可以通過狹窄的瓶頸擠壓數(shù)據(jù),然后根據(jù)需要對其進行擴展。您可以在構建大量激活數(shù)據(jù)時將其壓縮部分并放入。你可以在消費者所在的地方安裝減壓器。在這兩者之間,你現(xiàn)在已經(jīng)壓縮了你的足跡。
在這里,我們的實踐經(jīng)驗也是,您可以獲得令人難以置信的壓縮量,并且不會放棄任何準確性,在大多數(shù)實際網(wǎng)絡中,您需要它保留的實際數(shù)據(jù)量非常小。所以在這里,我們再次談論的是可能的一個或兩個數(shù)量級,而不是您可能從降低精度等瑣碎事情中獲得的 2 或 4 倍。
大多數(shù)從事神經(jīng)網(wǎng)絡工作的人還沒有真正內(nèi)化的關于計算的令人驚訝的事情之一是信息論中稱為數(shù)據(jù)處理的東西。不等式。并且在這個討論中沒有過多的技術和數(shù)學,雖然我會在談話中談論它,基本上說的是,計算本身不能添加信息。因此,如果您獲取數(shù)據(jù)體并通過一些計算將其傳遞,則計算是可逆的,在這種情況下,您可以重建輸入并保留信息,或者不是,在這種情況下,您已經(jīng)丟失本質上不可重構的信息。但是沒有新的信息來源。
所以這就是說,你不可能需要比你輸入網(wǎng)絡更多的激活。通常你需要的比這要多得多、少得多。但這是一個上限。所以這表明我們擁有巨大激活的唯一原因是因為它可以非常方便地以一種便于下游計算的方式表示事物。但是,大型激活并不是必然的。事實上,相反的情況是可以證明的:原則上你永遠不需要大的激活。因此,這是引入技術以利用這一機會的強大動力。
神經(jīng)網(wǎng)絡世界很有趣,尤其是現(xiàn)在。神經(jīng)網(wǎng)絡每年都在變得越來越大。人們雙手叉腰說,好吧,我什至沒有壓縮我的網(wǎng)絡;我可以把它平放。而且我認為當你說這樣的話時你應該感到尷尬。事實是,如果我們正確地進行壓縮,我們的網(wǎng)絡可能是一百萬倍——我并沒有夸大其詞,而是說一百萬——可能比它們小一百萬倍。沒有人能做到這一點。我的團隊,我們看到了 100 的因數(shù)。所以我們要去參加比賽了。但我們感到尷尬的是,我們將剩下的 10,000 個雞蛋留在了桌子上。但每個人都應該認識到,我們的網(wǎng)絡比計算所說的要大得多。(轉自21ic.com)