<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

      Mosaic:面向超長序列的多GPU注意力分片方案

      0
      分享至

      Transformer的"二次方注意力瓶頸"的問題是老生常談了。這個瓶頸到底卡在哪實際工程里怎么繞過去?本文從一個具體問題出發(fā),介紹Mosaic這套多軸注意力分片方案的設計思路。



      注意力的內(nèi)存困境

      注意力機制的計算公式:

      Attention(Q, K, V) = softmax(QK? / √d) × V

      問題出在QK?這個矩陣上,它的形狀是 (序列長度 × 序列長度)。

      拿150,000個token的序列算一下:

      Memory = 150,0002 × 4 bytes = 90 billion bytes ≈ 84 GB

      這只是注意力權(quán)重本身的開銷,而且還是單層、單頭。A100的顯存上限是80GB,放不下就是放不下。

      現(xiàn)有方案的局限

      FlashAttention它通過分塊計算,不需要把完整的注意力矩陣實例化出來,內(nèi)存復雜度從O(n2)降到O(n)。單卡場景下效果很好,但問題是整個序列還是得塞進同一張GPU。

      Ring Attention換了個思路:把序列切片分到多張GPU上,每張卡持有一部分Q,K和V在GPU之間像傳令牌一樣輪轉(zhuǎn),一維序列處理起來是很不錯的。

      但是多維怎么辦?

      比如處理表格數(shù)據(jù)的Transformer,輸入張量形狀是 (batch, rows, features, embed)。模型需要在不同維度上做注意力:features維度只有5個token,rows維度卻有150,000個。前者單卡輕松搞定,后者則必須分片。

      現(xiàn)有的庫都沒法干凈地處理這種多軸場景。手寫的話,每個軸要單獨寫分片邏輯,進程組管理、張量reshape全得自己來。代碼會變得很臟。

      Mosaic的設計

      Mosaic本質(zhì)上是個協(xié)調(diào)層,負責把不同的注意力軸路由到合適的計算后端:

      import mosaic
      # Small axis: run locally
      feature_attn = mosaic.MultiAxisAttention(
      embed_dim=96,
      num_heads=4,
      attention_axis=2, # features dimension
      backend="local" # no communication needed
      )
      # Large axis: shard across GPUs
      row_attn = mosaic.MultiAxisAttention(
      embed_dim=96,
      num_heads=4,
      attention_axis=1, # rows dimension
      backend="ring" # ring attention across GPUs
      )

      底層Mosaic會自動處理軸的置換、QKV投影前的reshape、后端分發(fā)、以及計算完成后張量形狀的還原。模型代碼保持清晰,分布式的復雜性被封裝掉了。

      Ring Attention的工作機制

      核心思想其實很直接:不需要同時持有全部的K和V。可以分批計算注意力分數(shù),逐步累積,最后再做歸一化。

      比如說4張GPU的情況下流程是這樣的:

      Initial state:
      GPU 0: Q?, K?, V?
      GPU 1: Q?, K?, V?
      GPU 2: Q?, K?, V?
      GPU 3: Q?, K?, V?
      Step 1: Each GPU computes attention with its local K, V
      GPU 0: score?? = Q? @ K??
      ...
      Step 2: Pass K, V to the next GPU in the ring
      GPU 0 receives K?, V? from GPU 3
      GPU 0 sends K?, V? to GPU 1
      Step 3: Compute attention with received K, V
      GPU 0: score?? = Q? @ K??
      Accumulate with score??
      Repeat for all chunks...
      Final: Each GPU has complete attention output for its Q chunk

      單卡內(nèi)存占用變成O(n2/p),p是GPU數(shù)量。8張卡的話內(nèi)存需求直接砍到1/8。150k序列從84GB降到約10GB每卡。

      Mesh2D:更激進的分片

      序列特別長的時候Ring Attention的線性分片可能還不夠,這時候可以用Mesh2D把Q和K都切分了:

      4 GPUs arranged in 2×2 mesh:
      K? K?
      ┌──────┬──────┐
      Q? │GPU 0 │GPU 1 │
      ├──────┼──────┤
      Q? │GPU 2 │GPU 3 │
      └──────┴──────┘
      Each GPU computes one tile of QK?

      內(nèi)存復雜度降到O(n2/p2)。64張卡組成8×8網(wǎng)格時,每卡內(nèi)存需求下降64倍。

      attn = mosaic.MultiAxisAttention(
      embed_dim=128,
      num_heads=8,
      attention_axis=1,
      backend="mesh2d",
      mesh_shape=(8, 8)
      )

      感知集群拓撲的組合策略

      在實際部署環(huán)境里,不同GPU之間的通信帶寬差異很大。節(jié)點內(nèi)GPU走NVLink能到900 GB/s,跨節(jié)點通過InfiniBand通常只有200 GB/s左右。

      ComposedAttention就是針對這種拓撲特征設計的:

      # 4 nodes × 8 GPUs = 32 total
      composed = mosaic.ComposedAttention(
      mesh_shape=(4, 8), # (nodes, gpus_per_node)
      head_parallel=True, # Split heads across nodes (slow link)
      seq_parallel="ring" # Ring within nodes (fast link)
      )

      需要更精細控制的話,可以用 HierarchicalAttention:

      hier = mosaic.HierarchicalAttention(
      intra_node_size=8,
      intra_node_strategy="local", # Compute locally within node
      inter_node_strategy="ring" # Ring between node leaders
      )

      重通信走快鏈路輕通信才跨節(jié)點。



      實現(xiàn)細節(jié)

      整個庫大約800行Python,核心代碼如下:

      class MultiAxisAttention(nn.Module):
      def forward(self, x):
      # 1. Move attention axis to seq position
      x, inv_perm = self._permute_to_seq(x)
      # 2. Flatten batch dims, project QKV
      x = x.view(-1, seq_len, embed_dim)
      qkv = self.qkv_proj(x).view(batch, seq, 3, heads, head_dim)
      q, k, v = qkv.permute(2, 0, 3, 1, 4).unbind(0)
      # 3. Dispatch to backend
      out = self._attn_fn(q, k, v) # local, ring, or mesh2d
      # 4. Project output, restore shape
      out = self.out_proj(out.transpose(1, 2).reshape(...))
      return out.permute(inv_perm)

      后端封裝了現(xiàn)有的成熟實現(xiàn):local后端調(diào)用F.scaled_dot_product_attention(也就是FlashAttention),ring后端用ring-flash-attn庫的ring_flash_attn_func,mesh2d是自定義的all-gather加SDPA,所有的底層都跑的是FlashAttention內(nèi)核。

      所有后端統(tǒng)一用FlashAttention的融合GEMM+softmax實現(xiàn)。后端函數(shù)在初始化時就綁定好,前向傳播不做分支判斷。張量操作盡量用x.view()而不是x.reshape(),保持內(nèi)存連續(xù)性。集合通信的目標張量預分配好,避免torch.cat的開銷。模塊級別做導入不在每次前向傳播時產(chǎn)生import開銷。

      快速上手

      安裝:

      pip install git+https://github.com/stprnvsh/mosaic.git
      # With ring attention support
      pip install flash-attn ring-flash-attn

      單節(jié)點啟動:

      torchrun --nproc_per_node=4 train.py

      多節(jié)點的話:

      # Node 0
      torchrun --nnodes=2 --nproc_per_node=8 --node_rank=0 \
      --master_addr=192.168.1.100 --master_port=29500 train.py
      # Node 1
      torchrun --nnodes=2 --nproc_per_node=8 --node_rank=1 \
      --master_addr=192.168.1.100 --master_port=29500 train.py

      訓練腳本示例:

      import mosaic
      import torch.distributed as dist
      dist.init_process_group("nccl")
      ctx = mosaic.init(sp_size=dist.get_world_size())
      model = MyModel().to(ctx.device)
      # Data is pre-sharded: each GPU has seq_total / world_size tokens
      x_local = load_my_shard()
      out = model(x_local) # Communication handled by Mosaic

      總結(jié)

      最后,Mosaic不會自動并行化模型(這個用nnScaler),不管數(shù)據(jù)并行(PyTorch DDP/FSDP的事),也不處理模型分片(交給FSDP或Megatron)。

      Mosaic專注于一件事:多軸注意力的分片路由,這套方案最初是給nanoTabPFN做的,一個表格數(shù)據(jù)Transformer。

      這個模型要同時在rows(150k個)和features(5個)兩個維度做注意力。標準Ring Attention對維度語義沒有感知,它只認序列這個概念,分不清rows和features的區(qū)別。

      所以Mosaic需求很明確:小軸本地算,大軸分布式算,軸的路由邏輯不能侵入模型代碼,有興趣的可以試試。

      https://avoid.overfit.cn/post/791e0f30540e4d289a43d01d383e8ab2

      作者:Pranav Sateesh

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      歐爾班宣布反制措施:在我們耗盡石油之前,烏克蘭人將先耗盡資金

      歐爾班宣布反制措施:在我們耗盡石油之前,烏克蘭人將先耗盡資金

      陳恧侃故事
      2026-03-07 11:31:12
      現(xiàn)場直擊:伊朗防空系統(tǒng)攔截美以目標

      現(xiàn)場直擊:伊朗防空系統(tǒng)攔截美以目標

      新華社
      2026-03-06 10:54:01
      鄭爽分享美國近況,穿搭不輸當紅明星,自曝做醫(yī)美網(wǎng)友直呼認不出

      鄭爽分享美國近況,穿搭不輸當紅明星,自曝做醫(yī)美網(wǎng)友直呼認不出

      萌神木木
      2026-03-06 17:33:33
      河南女孩六年前為救父親性命,稱誰給40萬就嫁給誰,如今過得如何

      河南女孩六年前為救父親性命,稱誰給40萬就嫁給誰,如今過得如何

      牛鍋巴小釩
      2026-03-06 19:45:04
      致敬西虹市首富?切爾西眾人開球前將球圍在中間,解說員啞然失笑

      致敬西虹市首富?切爾西眾人開球前將球圍在中間,解說員啞然失笑

      懂球帝
      2026-03-07 13:08:08
      廣西女子發(fā)現(xiàn)罕見青竹鯉,時不時側(cè)身蹭水底,網(wǎng)友:魚生天花板!

      廣西女子發(fā)現(xiàn)罕見青竹鯉,時不時側(cè)身蹭水底,網(wǎng)友:魚生天花板!

      貍貓之一的動物圈
      2026-03-06 09:38:48
      小學生實名投訴極氪 建議取消讓她寫作業(yè)的小桌板!極氪回應

      小學生實名投訴極氪 建議取消讓她寫作業(yè)的小桌板!極氪回應

      快科技
      2026-03-06 23:12:33
      王震堅決反對中顧委副主任排名,薄一波:我是常務,就這么定了

      王震堅決反對中顧委副主任排名,薄一波:我是常務,就這么定了

      芊芊子吟
      2026-03-06 09:45:07
      莫雷加德全家抵達重慶:對這座城市印象深刻,會請樊振東推薦美食

      莫雷加德全家抵達重慶:對這座城市印象深刻,會請樊振東推薦美食

      乒談
      2026-03-07 00:19:01
      中國女籃72-66再勝巴西,不是張子宇王思雨,她17+7成新核

      中國女籃72-66再勝巴西,不是張子宇王思雨,她17+7成新核

      林子說事
      2026-03-07 08:15:14
      速度滑冰世錦賽:寧忠?guī)r收獲短距離全能、男子1000米兩項季軍

      速度滑冰世錦賽:寧忠?guī)r收獲短距離全能、男子1000米兩項季軍

      懂球帝
      2026-03-07 07:21:57
      高市早苗被逼到絕路:派也死,不派也死

      高市早苗被逼到絕路:派也死,不派也死

      鯨探所長
      2026-03-07 12:02:36
      霍爾木茲海峽船只遭襲4死3重傷!兩萬海員被困,伊朗稱不會關閉海峽,但與以美有關船只不得通行;普京與伊總統(tǒng)通話:通過多種渠道保持聯(lián)系

      霍爾木茲海峽船只遭襲4死3重傷!兩萬海員被困,伊朗稱不會關閉海峽,但與以美有關船只不得通行;普京與伊總統(tǒng)通話:通過多種渠道保持聯(lián)系

      大風新聞
      2026-03-07 10:05:06
      霍震霆也沒想到,46歲的霍啟剛,會在兩會上憑一個舉動給霍家長臉

      霍震霆也沒想到,46歲的霍啟剛,會在兩會上憑一個舉動給霍家長臉

      攬星河的筆記
      2026-03-06 23:55:22
      結(jié)束了!整整27年生涯!曝冠軍主帥最后一舞

      結(jié)束了!整整27年生涯!曝冠軍主帥最后一舞

      籃球?qū)崙?zhàn)寶典
      2026-03-06 18:57:43
      晴好周末,出游安排起來 | 天氣早知道

      晴好周末,出游安排起來 | 天氣早知道

      上觀新聞
      2026-03-07 11:57:06
      針對“不敢休、不讓休”怪圈,國家出手了!

      針對“不敢休、不讓休”怪圈,國家出手了!

      國是直通車
      2026-03-07 09:12:15
      村里紅白事從不回,男子母親離世,鄰居等著看笑話,結(jié)果長了見識

      村里紅白事從不回,男子母親離世,鄰居等著看笑話,結(jié)果長了見識

      子芫伴你成長
      2026-02-23 12:21:40
      重回國乒?塵埃落定,劉國梁發(fā)聲,崗位曝光,布局國乒男隊發(fā)展

      重回國乒?塵埃落定,劉國梁發(fā)聲,崗位曝光,布局國乒男隊發(fā)展

      卿子書
      2026-03-06 09:25:27
      比賽還沒開打,上海申花先迎來兩個壞消息,新賽季斬獲開門紅懸了

      比賽還沒開打,上海申花先迎來兩個壞消息,新賽季斬獲開門紅懸了

      零度眼看球
      2026-03-07 08:58:12
      2026-03-07 13:40:49
      deephub incentive-icons
      deephub
      CV NLP和數(shù)據(jù)挖掘知識
      1940文章數(shù) 1456關注度
      往期回顧 全部

      科技要聞

      OpenClaw爆火,六位"養(yǎng)蝦人"自述與AI共生

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      體育要聞

      塔圖姆歸來:凱爾特人的春之綠

      娛樂要聞

      周杰倫田馥甄的“JH戀” 被扒得底朝天

      財經(jīng)要聞

      針對"不敢休、不讓休"怪圈 國家出手了

      汽車要聞

      逃離ICU,上汽通用“止血”企穩(wěn)

      態(tài)度原創(chuàng)

      旅游
      藝術
      家居
      親子
      本地

      旅游要聞

      文旅部部長:7名外國游客到上海旅游,買了40箱貨;“成為中國人”成了熱詞

      藝術要聞

      Mark Grantham | 城市街景

      家居要聞

      暖棕撞色 輕法奶油風

      親子要聞

      六個月寶寶查出散光,原因竟是父母長期身旁玩手機,媽媽懵了:我一直以為他閉著眼就沒事

      本地新聞

      食味印象|一口入魂!康樂烤肉串起千年絲路香

      無障礙瀏覽 進入關懷版