筆記-分布式計算基礎

Distributed Computing

劃分

  • 數據并行(DataParallelism)

    image-20250602212512685

    將數據分為n份,發送到n個GPU上,每個GPU上都存在一個完整的大模型

    缺點: 模型太大

  • Pipeline Parallelism(串行的)

    image-20250602212607260

    將模型做split,每個GPU負責一部分,GPU1運行完后將結果發送給GPU2

    缺點:

    1. 不好分割
    2. 分割成差不多的計算量是個大的問題
    3. 速度受限于最慢的GPU模塊
    4. 可能會出現許多空閑狀態的GPU
  • Tensor Parallelism

    更細化的,在tensor維度上

    image-20250602213308606

    會造成額外的通信

Data Parallelism

parameter server

  • Parameter server

    image-20250602213807371

    分為兩個部分

    1. Parameter Server : recieive gradients from workers and send back the aggregated results
    2. workers: compute gradients using splitted dataset and send to parameter server

    這種方式不太適合大模型

  • 步驟

    1. replicate models to workers

      image-20250602214308099

    2. split data to workers

      image-20250602214356800

    3. compute gradient

      image-20250602214427915

    4. Aggregate and synchronize gradient

      image-20250602214541708

    5. Gradient update and update model parameters

      image-20250602214605315

  • All in one picture

    image-20250602214638138

  • Parameter server:代碼

    image-20250602214858669

parameter server 通信-Communication:reduce and broadcast

  • one-to-many communication: a type of operations performed across all workers

    image-20250602215147152

    1. Reduce : 類似聚合,但是在聚合過程中進行平均或求和
    2. Broadcast: 向所有的workers發送相同的復制
  • Parameter server 的bottle neck(瓶頸)image-20250602215723394

    parameter server主要起的作用就是同步信息的作用,不希望有類似server的節點:All-Reduce

  • Naive All reduce implementation

    image-20250602220114316

    需要循環,每次傳輸所有的數據

  • Better All reduce implementation

    image-20250602220225305每個節點只和旁邊的節點做交互,也需要循環三次,但每次只傳輸旁邊的一部分

  • 更聰明的方式: Recursive Halving reduce(遞歸減半規約)

    image-20250602221008971

    同上面的類似,也是臨近的workers交換,對于8個worker來說,做了3次的iteration,然后交換間隔是20,21,232^0,2^1,2^320,21,23,這樣可以將時間復雜度從O(N)降到O(log?N)O(N)降到O(\log N)O(N)降到O(logN)


Zero-1/2/3 and FADP

  • 如果我們訓練一個非常大的大模型,那么即使是最好的GPU也沒法完全將模型權重完全加載到內存中,然而,訓練需要存儲梯度和優化器

    image-20250608093818287

    在fp32精度下,如果模型的weight占2bytes,那么其gradients大概也占2bytes左右,如果優化器使用Adam,其optimizer states因為要存儲parameters, momentum 和variance,所以大概需要6倍(這個倍數取決于配置,再怎么配置一般也都是weight的三到四倍),即使是使用A100或者H100顯卡(80G)來訓練,最多也只能訓練5.0B的模型

    image-20250608094812014

  • 第一種方式 ZERO-1

    沒個GPU存放完整的額weight和gradients,分割optimizer states 到N個不同的GPU卡上,假設N=64,則這時候用80G的顯卡,大概能訓練19B參數量的模型

    image-20250608095500614

  • 第二種方式ZERO-2

    相比zero-1,除了optimizer states,我們還將gradients也分布在不同的GPU上,假設N=64, 則這時候用80G的顯卡,大概能訓36B參數量的模型

    image-20250608095720011

  • 第三種方式ZERO-3

    將optimizer states,gradients and weights都分布在不同的GPU上,假設N=64, 則這時候用80G的顯卡,大概能訓320B參數量的模型

    image-20250608095751984

  • 在pytorch中,ZERO-3等價于FSDP (FullyShardedDataParallel),即所有的參數都做parallelism

    難點在于GPU之間的通信,如何將GPU前后向傳播聯合起來計算

    image-20250608100006519


Pipeline Parallelism

  • 與數據并行不同,Pipeline直接對模型進行分割

    image-20250608100444827

Naive Implementation

  • 下圖表示的是4層網絡在訓練的時候,使用F代表Forward,B代表Backward,下面圖中的(b)Training timeline,其橫軸為時間軸,假設這4層網絡分別存放在4個GPU上

    image-20250608101502157

    所以計算的順序為GPU0->GPU1->GPU2->GPU3->GPU3->GPU2->GPU1->GPU0,那么這四個GPU沒個都使用了兩個時間單元,占有率都是 28=0.25\frac{2}{8}=0.2582?=0.25,這意味著其他75%的時間都是空閑的,而且這25%還是在假設沒個pipeline的執行時間是一樣的情況下,否則這個占有率還可能更低,這個是pipeline并行的一大問題,沒有辦法很好的利用到GPU的資源

    image-20250608102014445

    同一時間點只有一個設備在計算,其他的都在等待。

Micro-batch

  • 讓它多跑一跑不斷地將計算給到流水線,如下圖,將batch為16的分為4個batch為4的(Micro-batch技術),下圖下面的部分,這時候T=14, 那么每個GPU的使用率就是4?84?14=47\frac{4*8}{4*14}=\frac{4}{7}4?144?8?=74?,這樣空閑的時間實際上就下降了很多,當然如果再將任務拆解的更小,還可以提升使用

    image-20250608103629478

    注意,紅色為空閑時間

    image-20250608103705415

  • 如何提高Pipeline Paralisem的效率?盡量將任務拆解的更小,然后做micro-batch


Tensor Parallelism

  • 在pipeline Parallelism中再做tensor Parallelism,還可以提高pipeline Parallelism的效率

  • tensor并行的核心關鍵點:如何把運算拆解

    注意,這里后續還需要進行一個類似reduce的操作

    image-20250608104351334

MLP

  • MLP和Self-Attention的tensor并行

    image-20250608104717468

  • partition in First FFN Layer,注意這里用兩個GPU設備來舉例

    image-20250608104913542

  • partition in Second FFN Layer,注意這里用兩個GPU設備來舉例

    image-20250608105010845


self-attention

  • 假設這里是用三個GPU來舉例 ,每個GPU分別來存儲QKV,先在各GPU上分別計算QKV

    image-20250608105337896

    softmax計算

    image-20250608105623292

    計算Z

    image-20250608105705016

    所以tensor parallelism核心是怎么將這些操作設計出來


不同并行方法的總結

  • 總結image-20250608105903210

    Data Oarallelism

    1. 分割數據
    2. copy數據到N的設備上
    3. 高利用率,高內存開銷,設備間低通信
    4. 優化:ZeRO 1/2/3,FSDP

    Pipeline Parallelism

    1. 按層分割模型
    2. 低利用率,低內存開銷,適中的通信要求

    Tensor Parallelism

    1. 按tensor維度分割模型
    2. 高利用率,低內存開銷,高通信要求(有許多all-reduce操作)

3D并行

  • 將上面的三種并行方法都混在一起

    下面的相同的顏色表示同一個server里面的GPU(Model Parallel是Tensor Parallelism)

    image-20250608110829348

    需要注意的是:

    為什么同一個server中用 ModelParallel(Tensor Parallelism)

    因為tensor并行是高通信的,GPU之間需要經常交互,同一個server中交互更快

  • 如何設計并行?

    當模型太大,無法加載到一個GPU上:使用pipeline parallelism來拆分模型

    當layer太大,無法加載到一個GOU上:使用tensor parallelism來拆分layer


帶寬:bandwith

  • 通信的時間可能比計算的時間更長,所以我們需要降低通信的開銷

    在同一個數據中心,數據通信網絡延遲可能是1毫秒到10毫秒,無線wifi連接數據通信延遲是100ms,地球間的通信網絡延遲大概是500毫秒到1秒,但是在同一個機架內(同一個GPU集群上)那么延遲1納秒,非常小

    image-20250608113058999

  • 減小傳輸的數據大小

    在worker之間,或者在GPU之間,減小傳輸的數據(gradient,parameters)大小

    1. 梯度剪枝
    2. 量化(會損失精度和信息)

    image-20250608113157955

  • 壓縮通信:梯度剪枝

    注意梯度剪枝是一種基于梯度信息的剪枝方法。它通過分析梯度的大小來決定哪些神經元或連接是重要的,哪些可以被移除,區別于梯度裁剪

    image-20250608114020010


KV Cache

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88659.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Studio 2024,小白入門喂飯級教程

一、下載Android Studio 1、從安卓官網安卓官網下載Android Studio。 ? ? 二、安裝Android Studio 1、雙擊android-studio-2024.3.2.15-windows.exe。 ? ?? ? ? ? ? 三、新建工程 1、雙擊桌面圖標? 打開Android Studio。 ? 選“Empty Views Activity…

AI智能體 | 使用Coze制作一鍵生成單詞洗腦循環視頻,一天批量生成100條視頻不是夢!(附保姆級教程)

目錄 一、整體工作流設計 二、制作工作流 2.1 開始節點 2.2 大模型-單詞 2.3 大模型_圖像生成 2.4 輸出 2.5 圖像生成_1 2.6 輸出_2 2.7 畫板_2 2.8 文本處理 2.9 輸出_3 2.10 speech_synthesis_1x5 2.11 get_audio_duration_1 2.12 代碼 2.13 get_audio_durati…

質量屬性場景(Quality Attribute Scenario)深度解析

本質定義:質量屬性場景(Quality Attribute Scenario)是精確描述軟件系統質量要求的結構化方法,通過標準化的場景模板將抽象的質量屬性轉化為可測量、可驗證的具體行為描述,為架構設計提供客觀評估基準。 一、質量屬性場景核心結構 1. 六元組標準模板 #mermaid-svg-AGbvPVRu…

Java_Springboot技術框架講解部分(一)

首先講解一下:Java技術棧中,目前Spring Boot在國內的關注趨勢也日漸超過Spring。Spring Boot是Spring家族中的一個全新的框架,它用來簡化Spring應用程序的創建和開發過程。采用Spring Boot可以非常容易和快速的構建基于Spring框架的應用程序&…

從OpenMV到執行器:當PID算法開始“調教”舵機

如果到現在還不會驅動舵機——朋友,電賽的元器件清單每年都在對你“明示”,二維云臺都快成祖傳考題了!補課?現在!立刻!(當然,如果你臉皮夠厚,也可以私信騷擾作者&#xf…

xml映射文件的方式操作mybatis

映射文件 在Java spring中使用mybatis有兩種方式,一種是注釋的方式,一種是xml映射文件的方式。在簡單的功能需求可以使用注釋,方便簡潔。而在大的功能邏輯上,更推薦使用xml映射文件,方便管理且結構清晰。 首先xml文件結…

Carla自動駕駛仿真_快速安裝與運行Carla

大家好,我是橙子,今天給大家介紹Carla的基礎安裝和使用 目錄 1.Carla介紹 2.Carla的安裝與使用 3.Carla0.9.15安裝包下載: ?編輯 4.運行Demo 5.運行一個簡單場景: 6.相關資源 1.Carla介紹 Carla 是一個開源的自動駕駛仿…

遠程登錄docker執行shell報錯input is not a terminal問題

背景 最近要遠程去k8s docker里面獲取信息,于是,寫了一個如下的命令,執行完之后,報錯了。 ssh 192.168.100.2 sudo crictl exec -it xxx.docker /usr/bin/lscpu --online --extended錯誤信息如下: time“2025-07-11T21…

使用FastAdmin框架開發二

繼上一篇使用FastAdmin框架開發-CSDN博客教程 部署完項目后我們就可以邊開發邊調試了 在開發前我們可以先做一些基本設置 安裝成功后會生成一個項目后臺的地址http://域名/VrHGtzlfMB.php/index/login,后臺入口文件是隨機生成的,當然我們也可以根據我…

【DB2】load報錯SQL3501W、SQL3109N、SQL2036N

最近老遇到遷移測試LOAD時報錯,如圖所示但是換成import又可以看描述是說load的內容將不會進入備份暫掛狀態balbala… 下面的錯誤是說ixf文件無效 這里一直以為是SQL3501W的問題,去各種研究load參數和db2set里面的load參數,各種調整都不行 又以…

YOLO家族內戰!v5/v8/v10誰才是你的真命天子?(附保姆級選擇指南)

在目標檢測領域,YOLO系列始終是工業部署與學術研究的焦點。從風靡全網的YOLOv5,到全面升級的YOLOv8,再到突破性能瓶頸的YOLOv10——每一次迭代都帶來全新可能。作為開發者,究竟該選哪一代?本文用千字長文對比表格為你徹…

Claude Code是什么?國內如何使用到Claude Code?附國內最新使用教程

2025年已過大半,相信你也聽說過 Claude——它是近年最受關注的 AI 模型之一,而 Claude Code 則是它面向編程場景的特別版本,專為代碼理解、生成與重構而生,尤其擅長處理大項目、長上下文,和開發者對話更自然。 但對于一…

雙輪驅動:政策激勵與外部制約下的國產服務器市場演進

2025年6月,科智咨詢正式發布《中國國產服務器市場研究報告(2025)》,報告從國產服務器產業概述、政策環境分析、市場現狀與競爭格局、面臨挑戰與市場機遇等維度,深入剖析國產服務器市場現狀及未來發展趨勢。2022年10月&…

【工具變量】全國省市區縣土地出讓結果公告數據(2000-2024年)

土地出讓結果公告數據是指政府主管部門在完成國有土地使用權出讓后,依法依規對外公開的結果信息,涵蓋土地出讓時間、出讓方式、競得人、成交價、用地性質、面積等關鍵信息。土地出讓數據是研究中國土地市場供需變化、城市發展軌跡以及地方財政收入結構的…

前端面試專欄-算法篇:22.樹結構(二叉樹、B樹、紅黑樹)

🔥 歡迎來到前端面試通關指南專欄!從js精講到框架到實戰,漸進系統化學習,堅持解鎖新技能,祝你輕松拿下心儀offer。 前端面試通關指南專欄主頁 前端面試專欄規劃詳情 樹結構(二叉樹、B樹、紅黑樹&#xff09…

爬蟲-數據解析

1.解析概述特性re (正則表達式)bs4 (BeautifulSoup)xpath (lxml)pyquery本質文本模式匹配HTML/XML 解析器 (DOM樹操作)XML路徑語言 (節點導航)jQuery 式 CSS 選擇器 (封裝lxml)學習曲線陡峭中等中等簡單 (熟悉jQuery/CSS)靈活性極高 (處理任意文本)高 (容錯好,DOM操…

MySQL8.0基于GTID的組復制分布式集群的環境部署

前言: 需要清楚知道:MySQL 復制組能夠以一種自動優先選擇的單主模式運行,在某個時間只有一個服務器接受更新 。但是對于更高優先級的用戶,組能夠以多主模式部署,所有的服務器都能夠接受更新,即使它們是同時…

中國國際會議會展中心模塊化解決方案的技術經濟分析報告

——以模塊化、可持續材料與ESG為核心的運營效益提升路徑研究-----中國會展經濟研究會原副會長,學術委員會副主任 姚望一、報告概述1.1報告目的本報告深入探討了一種經濟視角下的綜合評估,針對某國際會議會展中心采用的一種模塊化、多功能、可持續升級的…

模擬開關、可編程增益儀表放大器電路

一、模擬開關1.CD4052CD4052是一種模擬多路開關,也可以稱作是一個模擬多路復用器,輸入引腳可以提供可變電壓,可以通過輸出引腳獲得相同電壓,常見的封裝有DIP16、SOP16、TSSOP16。 CD4052的引腳功能如下圖,可以用于控制…

時序數據庫 TDengine × SSRS:專為工業、能源場景打造的報表解決方案

每當聽到“做報表”三個字,是不是內心都會先嘆口氣?尤其在工業、能源、制造等場景,面對那些結構固定、字段繁多、格式要求嚴苛的報表任務,用 Excel 手動拼,真的是既費時又容易出錯。 現在解決方案來了——時序數據庫 …