上下文並行(Context Parallelism, CP)
3 秒看懂
一句話: 把一整條超長文本序列切成多段,分給多張 GPU 各算一塊,再通過通訊把注意力計算”拼”回來——讓單機裝不下的超長上下文,在叢集上跑起來。
3 分鐘產業解釋
為什麼需要它?
大型模型訓練/推論面臨一個根本矛盾:序列越長,注意力計算量呈 O(n²) 增長,視訊記憶體佔用也線性增長。當上下文視窗從 4K 擴充套件到 128K、甚至百萬級 token 時,單張 GPU 無論算力還是視訊記憶體都扛不住。
傳統的三維並行——張量並行(TP)、流水線並行(PP)、資料並行(DP)——分別切模型的寬度、深度和資料樣本維度,但沒有切”序列”這個維度。上下文並行(CP)就是補上這第四刀。
核心直覺
把一句話比作一根長麵條:
- TP 是把麵條豎著切薄(切模型頭/層內維度)
- PP 是把麵條橫著一段段切(切模型層)
- DP 是給不同廚師各發一根麵條(不同樣本)
- CP 是把同一根麵條切成 N 段,N 個廚師各煮一段,最後把湯底味道對齊(交換注意力所需的 K/V 資訊)
誰在用?
- Meta FAIR:訓練 Llama 3 系列長上下文版本時引入 Context Parallelism,是該術語的主要推動者
- NVIDIA:在 Megatron-Core 架構中集成了 CP 支援,與 TP/PP/DP 組合成四維並行
- Google DeepMind:TPU Pod 上的長序列訓練方案包含類似的序列切分思路(具體實現細節未充分揭露)
- DeepSpeed:提出 Ulysses 方案,屬於 CP 的一種通訊模式變體
15 分鐘專家深入
基本機制
CP 的核心挑戰在於:注意力計算天然需要所有 Q 與所有 K/V 的互動。你把序列切開了,每張卡只有一段 Q 和對應的 K/V,但要算完整注意力,就必須拿到其他卡上的 K/V(或等價資訊)。
目前主流有兩種通訊拓撲來解決這個問題:
方案一:Ring Attention(環形注意力)
源自 Liu et al. 2023 的論文 Ring Attention with Blockwise Transformers for Near-Infinite Context。
原理示意(4 張 GPU 的環):
GPU0 ──→ GPU1 ──→ GPU2 ──→ GPU3 ──→ GPU0
(Q0,K0,V0) (Q1,K1,V1) (Q2,K2,V2) (Q3,K3,V3)
每一步:
- 每張 GPU 用本地 Q 與當前持有的 K/V 塊算一個 partial attention
- 然後把 K/V 塊沿環發給下一張 GPU
- 經過 N-1 步後,每張 GPU 都"見過了"所有 K/V 塊
優點: 通訊與計算可以流水線重疊——在算當前塊注意力的同時,下一塊 K/V 已經在路上。頻寬需求是點對點(P2P),通訊量隨並行度線性增長。
缺點: 環上步數 = 並行度 - 1,延遲隨 GPU 數線性增加;需要精細的排程來保證計算和通訊的 overlap。
方案二:All-to-All(全交換)
DeepSpeed Ulysses 採用的方案,思路是:
步驟 1: All-to-All 通訊,把各 GPU 上的 Q/K/V 從"按序列切分"重排為"按注意力頭切分"
步驟 2: 每張 GPU 負責若干頭的完整序列注意力(此時又回到了 TP 的計算模式)
步驟 3: All-to-All 通訊,把結果重排回"按序列切分"
優點: 只需兩步 All-to-All,延遲不隨並行度線性增長(取決於集合通訊拓撲)。
缺點: All-to-All 在大規模跨節點時通訊開銷可能較大;需要在單次通訊中交換更多資料。
因果掩碼的特殊處理
在自迴歸(causal)模型中,每個 token 只能看到它前面的 token。CP 切分後,處於序列前段的 GPU 完全不需要後面 GPU 的 K/V(因果掩碼會把它們置零)。利用這個特性,實際通訊量可以大幅減少——這是一種”掩碼感知”的最佳化。
具體來說:如果將序列等分為 N 段,GPU i 只需要 GPU 0 到 GPU i 的 K/V(因果方向),因此:
- GPU 0 不需要任何遠端 K/V
- GPU N-1 需要所有 GPU 的 K/V
這對 ring attention 的排程有顯著最佳化空間——部分環步可以直接跳過或標記為零計算。
與其他並行維度的組合
CP 在實踐中幾乎從不單獨使用,而是嵌入到四維並行中:
總 GPU 數 = TP × PP × DP × CP
典型配置示例(訓練 70B 級長上下文模型):
TP=8(節點內 NVLink 頻寬高)
PP=2(跨節點流水線)
DP=若干(資料並行組數)
CP=若干(上下文並行組數)
CP 的通訊模式主要是跨節點 P2P(ring)或 All-to-All,對互連頻寬的要求低於 TP(TP 需要在前向/反向每層都做 AllReduce),但高於純 DP。
技術原理
數學基礎
給定輸入序列長度 $S$,總注意力頭數 $H$,head dimension $d$。
標準注意力:
\text{Attn}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right) V
其中 Q, K, V \in \mathbb{R}^{S \times H \times d}。
CP 切分後(以 $N$ 張 GPU 為例):
每張 GPU $i$ 持有:
Q_i \in \mathbb{R}^{(S/N) \times H \times d}K_i \in \mathbb{R}^{(S/N) \times H \times d}V_i \in \mathbb{R}^{(S/N) \times H \times d}
要計算 Q_i 的完整注意力,需要與所有 K_j, V_j(j = 0, \ldots, N-1)互動:
\text{Attn}_i = \text{OnlineSoftmax}\left(\frac{Q_i [K_0; K_1; \ldots; K_{N-1}]^T}{\sqrt{d}}\right) [V_0; V_1; \ldots; V_{N-1}]
線上 Softmax(Online/Flash Softmax)
直接拼接所有 K/V 再算 softmax 需要把完整 S \times S 矩陣放在記憶體裡,這正是我們要避免的。實際實現依賴 FlashAttention 的分塊 softmax 技巧:
演算法:Ring Attention + FlashAttention 分塊計算
對每張 GPU i:
初始化: O_i = 0, m_i = -inf, l_i = 0 # 輸出、最大值、softmax 分母
for j = 0 to N-1: # 遍歷環上的 K/V 塊(含本地塊)
# 當前持有的 K/V 塊為 K_j, V_j
# 分塊計算(內層 FlashAttention 分塊迴圈,此處省略)
S_ij = Q_i @ K_j^T / sqrt(d) # (S/N) × (S/N)
# 因果掩碼:如果 j > i,mask 掉無因果關係的部分
# (具體掩碼形狀取決於段的相對位置)
m_ij = rowmax(S_ij)
P_ij = exp(S_ij - m_ij)
l_ij = rowsum(P_ij)
# 線上合併
m_new = max(m_i, m_ij)
O_i = O_i * exp(m_i - m_new) + P_ij @ V_j * exp(m_ij - m_new)
l_i = l_i * exp(m_i - m_new) + l_ij * exp(m_ij - m_new)
m_i = m_new
# 環通訊:把 K_j, V_j 發給下一張 GPU,同時接收 K_{j+1}, V_{j+1}
ring_send_recv(K_j, V_j)
O_i = O_i / l_i # 最終輸出
關鍵點:
- 數值穩定:通過維護 running max(
m_i)和 running sum(l_i)來實現線上 softmax 合併,避免溢位 - 視訊記憶體友好:任意時刻只需持有一個 K/V 塊,視訊記憶體佔用為 O(S/N) 而非 O(S)
- 通訊-計算重疊:ring_send_recv 與 P_ij @ V_j 計算可以非同步並行
通訊量分析
| 方案 | 通訊量(每層前向) | 通訊模式 | 頻寬敏感度 |
|---|---|---|---|
| Ring Attention | O(S·H·d·(N-1)/N) ≈ O(S·H·d) 累積 | P2P 點對點 | 中等,可 overlap |
| All-to-All (Ulysses) | 2 × O(S·H·d)(重排+逆重排) | All-to-All 集合通訊 | 較高,單次大塊 |
注:以上為定性量級分析,具體通訊位元組數取決於實現細節(如是否壓縮、是否 FP8 傳輸等)。
反向傳播
CP 的反向傳播需要對注意力計算求梯度。由於 softmax 的分塊線上計算特性,反向時同樣需要遍歷環上的 K/V 塊。這導致 CP 的反向通訊量約為前向的 2-3 倍(需要傳回梯度相關的 K/V 塊,以及可能的重新計算)。
實踐中常結合 梯度檢查點(activation checkpointing):前向時只儲存少量中間狀態,反向時重算部分注意力,以換回視訊記憶體節省。
技術演進史
| 時間 | 事件 | 意義 |
|---|---|---|
| 2017 | Vaswani et al. 提出 Transformer | 注意力 O(n²) 問題的起點 |
| 2021 | Megatron-LM v2 釋出 | 確立 TP+PP+DP 三維並行範式 |
| 2022 | FlashAttention (Dao et al.) | 分塊/tiling 注意力實現 IO-aware 計算,視訊記憶體從 O(S²) 降至 O(S),為 CP 提供底層運算元基礎 |
| 2023.10 | Liu et al. 釋出 Ring Attention 論文 | 系統性提出環形通訊 + 分塊注意力組合,實現近無限上下文 |
| 2023-2024 | DeepSpeed 釋出 Ulysses | 提出 All-to-All 通訊模式的序列並行方案 |
| 2024 | Meta 在 Llama 3 長上下文訓練中採用 Context Parallelism | 工業級落地驗證,CP 成為訓練 128K+ 上下文模型的標準並行維度 |
| 2024 | NVIDIA Megatron-Core 整合 CP | CP 正式成為四維並行(TP+PP+DP+CP)的一等公民 |
| 2024 | FlashAttention-3 (Hopper 架構最佳化) | 與 CP 深度整合,支援 FP8/非同步化 |
注:以上時間線基於公開論文/部落格/會議演講梳理,部分日期為近似。
技術路線對比
| 維度 | Ring Attention | All-to-All (Ulysses) | 純 TP 切頭 |
|---|---|---|---|
| 序列切分 | ✅ 切序列 | ✅ 切序列(重排後等價切頭) | ❌ 不切序列 |
| 通訊模式 | P2P 環形 | 集合 All-to-All | AllReduce |
| 通訊量 | O(S·H·d) 累積 | 2·O(S·H·d) | O(S·H·d) per layer(AllReduce) |
| 通訊-計算 overlap | ✅ 天然支援 | ⚠️ 需要額外排程 | ❌ 同步 |
| 支援的並行度上限 | 受環延遲限制(實用中 ≤ 節點數級) | 受 All-to-All 拓撲限制 | 受 head 數/節點內 NVLink 限制 |
| 因果掩碼最佳化 | ✅ 可跳過部分環步 | ⚠️ 需要 mask 無效區域 | 不適用 |
| 與 FlashAttention 整合 | ✅ 原生相容 | ✅ 需要適配 | ✅ |
| 適用場景 | 超長上下文、跨節點 | 中長上下文、高速互連 | 通用 |
| 代表實現 | Meta/NVIDIA Megatron-Core | DeepSpeed Ulysses | Megatron-LM TP |
注:通訊量為每層前向的量級估算,實際取決於實現配置。
上下游
上游依賴
硬體層:
├── 高頻寬互連(NVLink/NVSwitch 節點內,InfiniBand/RoCE 跨節點)
├── 大容量 HBM(存放 K/V 快取)
└── 高算力 GPU(Tensor Core 加速矩陣運算)
運算元層:
├── FlashAttention / FlashAttention-2/3(分塊注意力核心運算元)
├── NCCL(集合通訊庫,支援 P2P 和 All-to-All)
└── CUDA Graph / Stream(非同步通訊-計算 overlap)
架構層:
├── Megatron-Core(NVIDIA 官方四維並行)
├── DeepSpeed(微軟 Ulysses 方案)
└── PyTorch FSDP2 / DTensor(分散式張量抽象)
下游應用
長上下文訓練:
├── Llama 3 128K 上下文訓練
├── 長文件理解 / 程式碼倉庫級理解
└── 多模態長序列(影片幀 + 文本)
長上下文推論:
├── 128K+ 上下文推論服務(vLLM 等推論架構考慮類似思路)
└── KV Cache 分散式管理
科學計算:
└── 超長序列 DNA/蛋白質序列建模
關鍵指標
| 指標 | 說明 | 典型量級(估算) |
|---|---|---|
| CP 並行度 | 切分序列的 GPU 數 | 通常 2-8(受通訊開銷約束) |
| 序列長度擴充套件能力 | 相比單卡可支援的最大序列長度 | 線性擴充套件:CP=N → 支援約 N 倍序列長度 |
| 計算效率(MFU) | 相比無 CP 的模型浮點利用率變化 | 開銷約 [估算] 5%-15%,取決於 overlap 質量和互連頻寬 |
| 通訊/計算比 | 通訊時間佔總計算時間的比例 | 良好 overlap 下 < [估算] 10%;差條件下可 > 30% |
| 視訊記憶體節省 | 注意力部分視訊記憶體從 O(S) 降至 O(S/N) | 對長序列效果顯著;但模型引數和最佳化器狀態不減少 |
| 跨節點頻寬需求 | Ring 方案每步傳遞一個 K/V 塊 | 塊大小 = (S/N) × H × d × dtype_bytes,需與計算時間匹配 |
注:以上量級為基於演算法分析的估算,具體數值取決於模型規模、序列長度、硬體配置和實現最佳化程度。
供需與市場資料
供給側
CP 的落地推動了以下硬體/軟體需求:
| 供應環節 | CP 帶來的需求 | 市場影響 |
|---|---|---|
| GPU 互連 | CP 對跨節點頻寬敏感,推動高速互連需求 | InfiniBand / RoCE 需求上升(NVIDIA IB 業務受益) |
| HBM 容量 | 長序列 K/V Cache 需要更多視訊記憶體 | HBM 產能緊張(SK Hynix/Samsung/Micron 受益) |
| 網路裝置 | 跨節點 CP 需要低延遲網路 | 交換器/網絡卡需求(Broadcom/NVIDIA networking) |
| 訓練架構 | 四維並行增加軟體複雜度 | 架構整合價值上升(NVIDIA Megatron-Core 生態鎖定) |
需求側
- 128K+ 上下文已成標配趨勢:GPT-4 Turbo (128K)、Claude (200K)、Gemini (1M+)、Llama 3.1 (128K)
- 長上下文訓練不是可選項而是必選項,CP 是實現手段之一
- 推論側也在探索類似的序列切分(如 Prefill 階段的 CP),以支援長上下文低延遲推論
市場資料
- 長上下文模型訓練所需 GPU 叢集規模通常在 [廠商未充分揭露] 數千至數萬卡級別
- CP 不直接創造獨立市場,而是 “賣水人”邏輯——推動高速互連和大容量 HBM 的消耗量增長
注:具體訓練叢集規模和成本資料屬於各廠商機密,上文為行業公開資訊推斷。
代表公司與資本對映
| 角色 | 公司/組織 | CP 相關動作 | 資本對映 |
|---|---|---|---|
| 架構定義者 | NVIDIA | Megatron-Core 整合 CP 為四維並行一環 | NVDA(直接受益於生態鎖定 + GPU 銷售) |
| 架構參與者 | Microsoft | DeepSpeed Ulysses 方案 | MSFT(Azure AI 基礎設施) |
| 模型訓練方 | Meta | Llama 3 長上下文訓練使用 CP | META(開源生態 + 自用訓練) |
| 模型訓練方 | TPU 長序列方案(具體實現未充分揭露) | GOOGL | |
| 互連供應 | NVIDIA Networking (Mellanox) | InfiniBand 為 CP 跨節點通訊主力 | NVDA |
| 互連供應 | Broadcom | RoCE 網絡卡/交換器 | AVGO |
| HBM 供應 | SK Hynix / Samsung / Micron | 長序列訓練推高 HBM 需求 | 000660.KS / 005930.KS / MU |
| 推論架構 | vLLM / TensorRT-LLM 等 | 長上下文推論的序列切分最佳化 | 開源/內部工具 |
投資邏輯
核心鏈條
長上下文成為標配
↓
訓練 128K+ 上下文需要 CP
↓
CP 需要:① 大量 GPU ② 高速互連 ③ 大容量 HBM
↓
受益標的:NVDA(GPU+互連) > AVGO(網路) > HBM 三巨頭 > 訓練雲端廠商
邊際變化判斷
| 判斷 | 理由 |
|---|---|
| CP 是訓練側的剛需 | 128K 已成下限,百萬級上下文競賽中 CP 幾乎不可替代 |
| CP 推高”單任務 GPU 消耗” | 同樣規模模型,加入 CP 維度意味著需要更多 GPU 來訓練同一任務 |
| 互連價值佔比上升 | CP 的通訊密集特性使得網路頻寬成為瓶頸,高速互連的”單價×數量”增長 |
| 軟體架構護城河加深 | 四維並行的複雜度遠超三維,Megatron-Core 的整合優勢進一步鞏固 NVIDIA 生態 |
| 邊際遞減風險 | CP 並行度受限於通訊延遲,不能無限加卡;極長上下文可能需要演算法層面突破(如線性注意力) |
風險點
- 演算法替代風險:線性注意力、狀態空間模型(Mamba 等)如果在長上下文任務上追平 Transformer 效能,CP 需求可能下降
- 通訊技術突破:如果晶片互連頻寬大幅提升(如光學互連),CP 的通訊瓶頸消失,其”推高硬體需求”的邏輯減弱
- 推論側趨勢:推論更多依賴 KV Cache 壓縮/稀疏注意力,不一定用 CP,投資邏輯更偏訓練側
常見誤讀糾偏
誤讀 1:“Context Parallelism 就是 Megatron-LM 的 Sequence Parallelism”
糾偏: 這是最常見的混淆。兩者不同:
| Context Parallelism (CP) | Megatron-LM Sequence Parallelism (SP) | |
|---|---|---|
| 切什麼 | 切注意力計算中的序列維度(Q/K/V 按 sequence split) | 切 LayerNorm / Dropout 中的序列維度(這些操作在 TP 下未被切分) |
| 解決什麼問題 | 超長序列放不下單卡 | TP 中 LayerNorm 等操作存在冗餘計算 |
| 通訊模式 | Ring P2P 或 All-to-All | 與 TP 共用 AllReduce/ReduceScatter |
| 是否互補 | ✅ 可以同時使用 | ✅ 可以同時使用 |
Megatron-Core 中兩者共存:SP 負責非注意力部分的序列維度最佳化,CP 負責注意力部分的序列切分。將二者混為一談會導致對通訊模式和並行策略的根本性誤解。
誤讀 2:“CP 讓任何模型都能無限擴充套件上下文長度”
糾偏: CP 只解決了注意力計算的算力和視訊記憶體瓶頸。但長上下文還有其他卡點:
- 位置編碼外推:RoPE 等位置編碼在超出訓練長度後效能衰退,這不是 CP 能解決的
- 注意力稀釋:即使算力夠了,模型在超長上下文中能否有效”注意到”遠處資訊,取決於架構和訓練策略
- 通訊延遲的硬約束:Ring Attention 的延遲隨並行度線性增長,存在實際上限
誤讀 3:“Ring Attention 的通訊開銷一定小於 All-to-All 方案”
糾偏: 取決於並行度和互連拓撲。Ring 的累積通訊量隨環長線性增長,當 CP 並行度較大時,每張卡的通訊累積量可能超過 All-to-All 的兩步通訊。特別是在高頻寬全連線拓撲(如 NVSwitch 連線的節點內)下,All-to-All 的效率可能更優。方案選擇是 “通訊模式 × 互連拓撲 × 並行度” 的聯合最佳化問題,沒有絕對優劣。
學習路徑
入門(1-2 小時)
- 閱讀 Vaswani et al. Attention Is All You Need 中注意力機制部分(理解 Q/K/V 和 O(n²) 問題)
- 閱讀 Tri Dao 的 FlashAttention 部落格/論文簡介(理解分塊注意力和 IO-aware 計算)
進階(3-5 小時)
- 精讀 Liu et al. Ring Attention with Blockwise Transformers for Near-Infinite Context(2023)—— CP 的理論基礎
- 閱讀 DeepSpeed 團隊關於 Ulysses 的部落格文章和論文
- 閱讀 Megatron-Core 文件中關於 CP 的部分
深度(動手實踐)
- 在 NVIDIA Megatron-Core 程式碼中找到 CP 相關實現,理解
ContextParallel和SequenceParallel的具體區別 - 閱讀 FlashAttention-2/3 原始碼中與 CP 相容相關的改動
- 模擬計算:給定模型大小、序列長度、GPU 數量,推算 CP 的通訊量和預期 MFU
推薦資源
- 論文:Ring Attention (Liu et al., 2023)、FlashAttention (Dao et al., 2022/2023)
- 程式碼:NVIDIA/Megatron-LM(GitHub)、microsoft/DeepSpeed(GitHub)
- 部落格:NVIDIA 技術部落格關於 Llama 3 訓練基礎設施的文章、Meta 工程部落格關於 Llama 長上下文訓練的內容
- 演講:GTC/Talks 中關於四維並行策略的 session
一句話總結
上下文並行(CP)是訓練超長上下文大型模型的第四個並行維度——切序列、換 K/V、拼注意力——它不改變模型架構,但讓 Transformer 的注意力計算在叢集上實現了序列維度的近線性擴充套件,是 128K+ 時代訓練基礎設施的關鍵拼圖。
延伸閱讀與來源
| 來源 | 說明 |
|---|---|
| Liu et al., Ring Attention with Blockwise Transformers for Near-Infinite Context, 2023 | Ring Attention 理論基礎 |
| Jacobs et al., DeepSpeed Ulysses: System Optimizations for Enabling Training of Extreme Long Sequence Transformer Models, 2023 | All-to-All 方案 |
| Dao et al., FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness, 2022 | 分塊注意力運算元基礎 |
| Dao et al., FlashAttention-2, 2023 | 效能最佳化版本 |
| NVIDIA Megatron-Core 文件 | 四維並行整合實現 |
| Meta 工程部落格(Llama 3 系列) | 工業級 CP 落地參考 |
| Shoeybi et al., Megatron-LM, 2019/2021 | TP/PP/DP 三維並行基線,理解 CP 如何補充 |
注:本頁技術細節基於公開論文、架構文件和行業公開資訊整理。涉及的具體配置引數和效率資料,凡無明確來源標註的,均為基於演算法分析的估算或定性描述,不代表任何廠商的實際實現規格。