新聞中心
News Center
首頁  >  新聞中心  >  技術文章
對AI模型進行壓縮激活工作,減小對內存的消耗
今天的 AI 模型有數十億或數萬億個參數,即輸入和權重。所以我們需要巨大的內存來激活。這當然會對芯片設計產生巨大影響,因為激活存儲器經常支配平麵布局。我們可以嚐試使用量化、稀疏性、權重共享等概念來減少所需的內存。但它們隻能走這麽遠,尤其是在模型龐大且持續增長的情況下。要是有辦法壓縮激活就好了!好吧,Perceive 的 CEO Steve Teig 想出了一個辦法。

所以很多人都在談論壓縮重量。人們甚至談到了壓縮激活,你知道,用 8 位激活而不是更大的激活來運行它。但有趣的是,當代網絡的激活足跡通常比它們在內存中的權重足跡大得多。因此,對於量化和稀疏性以及人們在權重上所做的所有努力,這很棒。在某些方麵,更大的問題被忽略了,那就是激活支配了網絡的內存占用,它既占用空間又占用能量和時間,因為你必須四處移動激活。

所以當我看到這個問題時,我首先意識到,如果你能做到的話,激活壓縮將是一件好事。其次,應用人們用於激活權重的一些微不足道的技術總比沒有好,但不會讓你走得太遠。所以,是的,如果你能以較低的精度逃脫,你應該使用較低的精度,實踐中激活的稀疏性並不是很好,因為稀疏性是如此隨機,如此不可預測,以至於很難建設性地利用這種缺乏結構。

但更進一步,人們對重量所做的壓縮類型,你會得到 2 倍或 4 倍。那麽,您將如何獲得可能需要的 20 倍或 50 倍來擺脫激活通常需要的千兆字節?因此,這促使我們想出更有創意、更開箱即用的方法來解決這個問題。事實證明,數量級的壓縮是可能的。所以這就是談話的內容。

如果你要做圖像處理,為了具體、超分辨率或圖像降噪或類似的東西,你真的不必看在圖片的總另一端的像素處,對圖片這一端的降噪部分進行降噪。因此,您實際上不必將整個圖像處理為平麵。如果你這樣做了,它將占用大量的激活內存。

但是,如果您有足夠的計算量來足夠快地完成工作,您實際上可以將圖像分段並按順序執行,這是一件半顯而易見的事情,這可能會增加您的計算時間,也許是因為您沒有這樣做一切並行。但是您現在已經減少了激活足跡。

所以人們可以概括這個想法並說,好吧,關於神經網絡的最酷的事情之一就是在編譯時,當你拿到神經網絡時,你完全了解所有的計算依賴關係。大家都知道,神經網絡用氣泡表示神經元,箭頭表示數據移動。好吧,這些箭頭告訴您您的計算是否取決於我的數據。如果是這樣,您必須等我完成後才能開始。如果沒有,我們可以並行進行。

好吧,我完全了解情況。你不需要在我之後立即進行。隻需要你跟在我後麵。所以我有難以置信的靈活性,隻是在空間中移動計算的難以置信的靈活性,它們在物理並行設備上進行,並且及時,因為隻要依賴關係按順序發生,我就可以開始了。我仍然可以得到正確的答案。嗯,在空間和時間上、在時空中重新安排計算塊的靈活性是巨大的。而且我可以在空間和時間上打包計算,以一種非常靈活的方式在吞吐量和激活內存之間進行權衡。

所以舉個簡單的例子,為了直覺,讓我們假設我們正在對圖像進行降噪,圖像有 8 兆像素。好吧,如果我分成 100,000 個像素塊,(我選擇它是為了讓我可以在腦海中進行數學計算),我剛剛完成了 1/80 的工作,所以我剛剛將激活足跡壓縮了大約 80折疊。現在,我可能已經減慢了計算速度。但是今天的硬件真的很快。如果我以每秒 30 幀的速度運行來完成工作,我有整整 1/30 秒的時間。但這表明即使是 80 倍壓縮對我來說也很容易獲得。

我們生活在一個有趣的世界,計算幾乎是免費的,而內存也幾乎不是免費的。內存占據了我們大部分的芯片,如果你必須把內存從芯片上取下來,它幾乎占據了所有的能量。在我們的例子中,我們在芯片上做所有事情,但即便如此。因此,讓我們利用我們擁有這些快得離譜的晶體管以及其中的大量晶體管來節省內存這一寶貴資源的事實。

所以合理的做法是,當你有比你想要的更多的激活內存時,壓縮它,將它的壓縮版本存儲在架子上,然後根據需要解壓它。而且您幾乎總是可以不隻是有損壓縮,而是殘酷的有損壓縮,因為您真正需要哪些原始數據以供下遊計算使用?它需要一些東西,或一些東西,但不是一切。所以我的建議是我們可以製作簡單的小工具,我稱之為 X 網絡。它看起來像一個 x,因為你有一個看起來像沙漏的上半部分的壓縮器和一個看起來像沙漏的下半部分的減壓器,可以這麽說。因此,您可以通過狹窄的瓶頸擠壓數據,然後根據需要對其進行擴展。您可以在構建大量激活數據時將其壓縮部分並放入。你可以在消費者所在的地方安裝減壓器。在這兩者之間,你現在已經壓縮了你的足跡。

在這裏,我們的實踐經驗也是,您可以獲得令人難以置信的壓縮量,並且不會放棄任何準確性,在大多數實際網絡中,您需要它保留的實際數據量非常小。所以在這裏,我們再次談論的是可能的一個或兩個數量級,而不是您可能從降低精度等瑣碎事情中獲得的 2 或 4 倍。

大多數從事神經網絡工作的人還沒有真正內化的關於計算的令人驚訝的事情之一是信息論中稱為數據處理的東西。不等式。並且在這個討論中沒有過多的技術和數學,雖然我會在談話中談論它,基本上說的是,計算本身不能添加信息。因此,如果您獲取數據體並通過一些計算將其傳遞,則計算是可逆的,在這種情況下,您可以重建輸入並保留信息,或者不是,在這種情況下,您已經丟失本質上不可重構的信息。但是沒有新的信息來源。

所以這就是說,你不可能需要比你輸入網絡更多的激活。通常你需要的比這要多得多、少得多。但這是一個上限。所以這表明我們擁有巨大激活的唯一原因是因為它可以非常方便地以一種便於下遊計算的方式表示事物。但是,大型激活並不是必然的。事實上,相反的情況是可以證明的:原則上你永遠不需要大的激活。因此,這是引入技術以利用這一機會的強大動力。

神經網絡世界很有趣,尤其是現在。神經網絡每年都在變得越來越大。人們雙手叉腰說,好吧,我什至沒有壓縮我的網絡;我可以把它平放。而且我認為當你說這樣的話時你應該感到尷尬。事實是,如果我們正確地進行壓縮,我們的網絡可能是一百萬倍——我並沒有誇大其詞,而是說一百萬——可能比它們小一百萬倍。沒有人能做到這一點。我的團隊,我們看到了 100 的因數。所以我們要去參加比賽了。但我們感到尷尬的是,我們將剩下的 10,000 個雞蛋留在了桌子上。但每個人都應該認識到,我們的網絡比計算所說的要大得多。(轉自21ic.com)