目錄
Torch.compile( graph breaks 和 CUDA graphs)
SDPA: scaled_dot_product_attention
首頁 科技週邊 人工智慧 PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

Nov 22, 2023 pm 02:38 PM
模型 meta

從年初到現在,生成式 AI 發展迅速。但很多時候,我們又必須面對一個難題:如何加速生成式 AI 的訓練、推理等,尤其是在使用 PyTorch 的情況下。

本文 PyTorch 團隊的研究者為我們提供了一個解決方案。文章重點介紹如何使用純原生 PyTorch 加速生成式 AI 模型,此外,文章還介紹了 PyTorch 新功能,以及如何組合這些功能的實際範例。

結果如何呢? PyTorch 團隊表示,他們重寫了 Meta 的「分割一切」 (SAM) 模型,從而使程式碼比原始實現快 8 倍,並且沒有損失準確率,所有這些都是使用原生 PyTorch 進行優化的。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

部落格網址:https://pytorch.org/blog/accelerating-generative-ai/

在閱讀本文後,你將會獲得以下的了解:

  • Torch.compile:PyTorch 模型編譯器, PyTorch 2.0 加入了一個新的函數,叫做torch .compile (),能夠透過一行程式碼對現有的模型進行加速;
  • GPU 量化:透過降低運算精度來加速模型;
  • ##SDPA(Scaled Dot Product Attention ):記憶體高效的注意力實作方式;
  • 半結構化(2:4) 稀疏性:一種針對GPU 最佳化的稀疏記憶體格式;
  • Nested Tensor:Nested Tensor 把{tensor, mask} 打包在一起,將非均勻大小的資料批次處理到單張量中,例如不同大小的圖片;
  • Triton 自訂操作:使用Triton Python DSL 編寫GPU 操作,並透過自訂操作符註冊輕鬆將其整合到PyTorch 的各種元件中。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

PyTorch 原生特性所帶來的吞吐量增加以及減少的記憶體開銷。

有關此研究的更多信息,請參考Meta提出的SAM。詳細文章可在「CV不存在了?Meta發布「分割一切」AI模型,CV或迎來GPT-3時刻」找到

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

# #接下來,我們將介紹SAM的最佳化過程,包括效能分析、瓶頸識別,以及如何將這些新功能整合進PyTorch以解決SAM所面臨的問題。此外,我們也會介紹PyTorch的一些新特性,包括torch.compile、SDPA、Triton kernels、Nested Tensor以及semi-structured sparsity(半結構化稀疏)

內容的逐層深入,本文最後將介紹快速版SAM。對於有興趣的讀者,可以前往 GitHub 下載。此外,透過使用Perfetto UI 對這些數據進行了視覺化,以展示PyTorch 各項特性的應用價值

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍GitHub 位址:https://github.com/pytorch-labs/segment -anything-fast 可以找到這個專案的原始碼

對分割一切模型SAM 的重寫

該研究指出,本文所使用的SAM基準資料類型為float32 dtype,批次大小為1,並使用PyTorch Profiler來查看核心追蹤的結果如下:

############################################# ###本文發現SAM 有兩個地方可以優化:############第一個是對aten::index 的長調用,這是由張量索引操作(例如[])產生的底層調用導致的。然而實際上 GPU 花在 aten::index 上的時間相對較低,原因在於 aten::index 在啟動兩個核心的過程中,兩者之間發生了阻塞 cudaStreamSynchronize。這意味著 CPU 會等待 GPU 完成處理,直到啟動第二個核心。因而為了優化 SAM,本文認為應該致力於消除導致空閒時間的阻塞 GPU 同步。 ######

第二个问题是在矩阵乘法中,SAM花费了大量的GPU时间(如图所示的深绿色部分),这在Transformers模型中非常普遍。如果我们能够减少SAM模型在矩阵乘法上的GPU时间,那么我们就能够显著提高SAM的速度

接下来,我们将以SAM的吞吐量(img/s)和内存开销(GiB)来建立基准。然后就是优化过程

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

需要进行改写的句子是:Bfloat16 半精度(加上 GPU 同步和批处理)

为了解决上述问题,即减少矩阵乘法所需的时间,本文转向bfloat16。bfloat16是常用的半精度类型,通过降低每个参数和激活的精度,能够节省大量的计算时间和内存

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍


将填充类型替换为 bfloat16

此外,本文发现有两个位置可以进行优化,以移除 GPU 同步

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍


PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

具体来说,根据上图更容易理解,该研究发现在SAM的图像编码器中,有两个变量q_coords和k_coords充当坐标缩放器,这些变量都在CPU上进行分配和处理。然而,一旦这些变量用于在rel_pos_resized中建立索引,索引操作会自动将这些变量移动到GPU上,从而导致GPU同步的问题。为了解决这个问题,该研究指出可以使用torch.where函数重写这部分内容来解决问题,具体如上所示

核心追踪

在对这些更改进行应用之后,我们注意到单个内核调用之间存在明显的时间间隔,特别是在小批量(这里为1)的情况下更为明显。为了更深入地了解这一现象,我们开始对批大小为8的SAM推理进行性能分析

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

在分析每个内核所花费的时间时,我们注意到 SAM 的大部分 GPU 时间都用于逐元素内核和 softmax 操作

现在可以看到矩阵乘法的相对开销小了很多。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

将 GPU 同步和 bfloat16 优化结合在一起,SAM 性能提高了 3 倍。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

Torch.compile( graph breaks 和 CUDA graphs)

在研究SAM的过程中发现了许多细小的操作。研究人员认为使用编译器来整合这些操作非常有益,因此PyTorch对torch.compile进行了以下优化

  • 将 nn.LayerNorm 或 nn.GELU 等操作序列融合成一个单一的 GPU 内核;
  • 融合紧跟在矩阵乘法内核之后的操作,以减少 GPU 内核调用的数量。

通过这些优化,该研究减少了 GPU 全局内存往返次数(roundtrips),从而加快了推理速度。我们现在可以在 SAM 的图像编码器上尝试 torch.compile。为了最大限度地提高性能,本文使用了一些高级编译技术:

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

核心追蹤

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

#根據結果顯示,torch.compile 的表現非常出色

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

#可以觀察到softmax 佔了很大一部分時間,然後是各種GEMM 變體。以下測量的是批次大小為 8 及以上的變化。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

SDPA: scaled_dot_product_attention

##接下來,本文又對SDPA( scaled_dot_product_attention)進行了實驗,研究的重點是注意力機制。一般來講,原生注意力機制在時間和記憶體上隨序列長度呈二次方擴展。 PyTorch 的 SDPA 操作基於 Flash Attention、FlashAttentionV2 和 xFormer 的記憶體高效注意力原理構建,可以顯著加快 GPU 注意力。與 torch.compile 結合,這個操作允許在 MultiheadAttention 的變體中表達和融合一個共同的模式。經過一小部分變更後,現在模型可以使用 scaled_dot_product_attention。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

#核心追蹤

#現在可以看到記憶體高效的注意力核心佔用了GPU 上大量的運算時間:

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

使用PyTorch 的原生scaled_dot_product_attention,可以顯著增加批次大小。下圖為批次大小為 32 以上的變化。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

接下來,研究進行了對Triton、NestedTensor、批次Predict_torch、int8 量化、半結構化(2:4) 稀疏性等操作的實驗

例如本文使用自訂positional Triton 內核,觀察到批次大小為32 的測量結果。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

採用Nested Tensor 技術,並調整批次大小為32 以上

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

##添加量化後,批大小為32 以上變化的測量結果。

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

文章的最後是半結構化稀疏性。研究表示,矩陣乘法仍然是需要面對的瓶頸。解決的辦法是使用稀疏化來近似矩陣乘法。透過稀疏矩陣(即將值歸零)可以使用更少的位元來儲存權重和激活張量。該研究將張量中哪些權重設為零的過程稱為剪枝。剪枝掉較小的權重可以潛在地減少模型大小,而不會顯著損失準確率。

剪枝的方法有很多种,从完全非结构化到高度结构化都有。虽然理论上来说非结构化剪枝对精度的影响最小,但是在稀疏情况下,GPU可能会遇到显著的性能下降,尽管在进行大型密集矩阵乘法时非常高效。最近PyTorch支持的一种剪枝方法是半结构化(或2:4)稀疏性,旨在寻求平衡。这种稀疏存储方式将原始张量减少了50%,同时产生密集张量的输出。请参考下图进行说明

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

为了使用这种稀疏存储格式和相关的快速内核,接下来要做的是剪枝权重。本文在 2:4 的稀疏度下选择最小的两个权重进行剪枝,将权重从默认的 PyTorch(“strided”)布局更改为这种新的半结构化稀疏布局很容易。要实现 apply_sparse (model),只需要 32 行 Python 代码:

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

在稀疏度为2:4的情况下,我们观察到vit_b和批大小为32时的SAM峰值性能

PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍

最终,对这篇文章的概括如下:本文介绍了截至目前在PyTorch上实现Segment Anything的最快方法,借助官方发布的一系列新功能,本文在纯PyTorch中重新编写了原始的SAM,并且没有损失准确度

对于感兴趣的读者,可以查看原博客以获取更多信息

以上是PyTorch團隊重新實現「分割一切」模型,速度比原始實現提升八倍的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

全球最強開源 MoE 模型來了,中文能力比肩 GPT-4,價格僅 GPT-4-Turbo 的近百分之一 全球最強開源 MoE 模型來了,中文能力比肩 GPT-4,價格僅 GPT-4-Turbo 的近百分之一 May 07, 2024 pm 04:13 PM

想像一下,一個人工智慧模型,不僅擁有超越傳統運算的能力,還能以更低的成本實現更有效率的效能。這不是科幻,DeepSeek-V2[1],全球最強開源MoE模型來了。 DeepSeek-V2是一個強大的專家混合(MoE)語言模型,具有訓練經濟、推理高效的特點。它由236B個參數組成,其中21B個參數用於啟動每個標記。與DeepSeek67B相比,DeepSeek-V2效能更強,同時節省了42.5%的訓練成本,減少了93.3%的KV緩存,最大生成吞吐量提高到5.76倍。 DeepSeek是一家探索通用人工智

你好,電動Atlas!波士頓動力機器人復活,180度詭異動作嚇到馬斯克 你好,電動Atlas!波士頓動力機器人復活,180度詭異動作嚇到馬斯克 Apr 18, 2024 pm 07:58 PM

波士頓動力Atlas,正式進入電動機器人時代!昨天,液壓Atlas剛「含淚」退出歷史舞台,今天波士頓動力就宣布:電動Atlas上崗。看來,在商用人形機器人領域,波士頓動力是下定決心要跟特斯拉硬剛一把了。新影片放出後,短短十幾小時內,就已經有一百多萬觀看。舊人離去,新角色登場,這是歷史的必然。毫無疑問,今年是人形機器人的爆發年。網友銳評:機器人的進步,讓今年看起來像人類的開幕式動作、自由度遠超人類,但這真不是恐怖片?影片一開始,Atlas平靜地躺在地上,看起來應該是仰面朝天。接下來,讓人驚掉下巴

替代MLP的KAN,被開源專案擴展到卷積了 替代MLP的KAN,被開源專案擴展到卷積了 Jun 01, 2024 pm 10:03 PM

本月初,來自MIT等機構的研究者提出了一種非常有潛力的MLP替代方法—KAN。 KAN在準確性和可解釋性方面表現優於MLP。而且它能以非常少的參數量勝過以更大參數量運行的MLP。例如,作者表示,他們用KAN以更小的網路和更高的自動化程度重現了DeepMind的結果。具體來說,DeepMind的MLP有大約300,000個參數,而KAN只有約200個參數。 KAN與MLP一樣具有強大的數學基礎,MLP基於通用逼近定理,而KAN基於Kolmogorov-Arnold表示定理。如下圖所示,KAN在邊上具

特斯拉機器人進廠打工,馬斯克:手的自由度今年將達到22個! 特斯拉機器人進廠打工,馬斯克:手的自由度今年將達到22個! May 06, 2024 pm 04:13 PM

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

FisheyeDetNet:首個以魚眼相機為基礎的目標偵測演算法 FisheyeDetNet:首個以魚眼相機為基礎的目標偵測演算法 Apr 26, 2024 am 11:37 AM

目標偵測在自動駕駛系統當中是一個比較成熟的問題,其中行人偵測是最早得以部署演算法之一。在多數論文當中已經進行了非常全面的研究。然而,利用魚眼相機進行環視的距離感知相對來說研究較少。由於徑向畸變大,標準的邊界框表示在魚眼相機當中很難實施。為了緩解上述描述,我們探索了擴展邊界框、橢圓、通用多邊形設計為極座標/角度表示,並定義一個實例分割mIOU度量來分析這些表示。所提出的具有多邊形形狀的模型fisheyeDetNet優於其他模型,並同時在用於自動駕駛的Valeo魚眼相機資料集上實現了49.5%的mAP

新款經濟實惠的 Meta Quest 3S VR 頭戴裝置出現在 FCC 上,暗示即將推出 新款經濟實惠的 Meta Quest 3S VR 頭戴裝置出現在 FCC 上,暗示即將推出 Sep 04, 2024 am 06:51 AM

Meta Connect 2024 活動定於 9 月 25 日至 26 日舉行,在本次活動中,該公司預計將推出一款價格實惠的新型虛擬實境耳機。據傳這款 VR 耳機是 Meta Quest 3S,它似乎已經出現在 FCC 清單上。這個建議

牛津大學最新! Mickey:3D中的2D影像匹配SOTA! (CVPR\'24) 牛津大學最新! Mickey:3D中的2D影像匹配SOTA! (CVPR\'24) Apr 23, 2024 pm 01:20 PM

寫在前面項目連結:https://nianticlabs.github.io/mickey/給定兩張圖片,可以透過建立圖片之間的對應關係來估計它們之間的相機姿態。通常,這些對應關係是二維到二維的,而我們估計的姿態在尺度上是不確定的。一些應用,例如隨時隨地實現即時增強現實,需要尺度度量的姿態估計,因此它們依賴外部的深度估計器來恢復尺度。本文提出了MicKey,這是一個關鍵點匹配流程,能夠夠預測三維相機空間中的度量對應關係。透過學習跨影像的三維座標匹配,我們能夠在沒有深度測試的情況下推斷度量相對

單卡跑Llama 70B快過雙卡,微軟硬生把FP6搞到A100哩 | 開源 單卡跑Llama 70B快過雙卡,微軟硬生把FP6搞到A100哩 | 開源 Apr 29, 2024 pm 04:55 PM

FP8和更低的浮點數量化精度,不再是H100的「專利」了!老黃想讓大家用INT8/INT4,微軟DeepSpeed團隊在沒有英偉達官方支援的條件下,硬生在A100上跑起FP6。測試結果表明,新方法TC-FPx在A100上的FP6量化,速度接近甚至偶爾超過INT4,而且比後者擁有更高的精度。在此基礎之上,還有端到端的大模型支持,目前已經開源並整合到了DeepSpeed等深度學習推理框架中。這項成果對大模型的加速效果也是立竿見影──在這種框架下用單卡跑Llama,吞吐量比雙卡還要高2.65倍。一名

See all articles