【大模型02---Megatron-LM】

文章目錄

  • Megatron-LM
    • 數據并行
    • 模型并行
      • 張量并行
      • 流水線并行
    • 3D并行


Megatron-LM

Megatron是當前大模型訓練時經常使用的一種分布式并行框架,它通過采用DP,TP,PP等來加速模型的訓練,反正就是一個字,好。
大模型在訓練的時候,顯存占用是非常大的,比如一個175B的模型,假設模型參數用FP32表示,即4Byte,那逛模型參數就要700G,梯度700G,Adam兩個動量1400G,很明顯,裝都裝不下,所以采用這些并行技術使得它可以在有限的資源下進行訓練。

補充:Adam優化器:
主要是用來動態調整學習率和梯度更新的方向,每一次更新的時候需要保存其一階矩和二階矩,其中一階矩是梯度的平均值,二階矩是梯度的平方,主要用來動態調整學習率。一階矩和二階矩分別表示為m和v,其相對SGD訓練更加穩定。每一次更新的時候,都需要依賴上一次的計算出的一階矩和二階矩,也就是每一個參數都對對應一個一階矩和二階矩。

數據并行

假設有N張卡,每一張卡都保存一個模型的副本,現在可以將一個batch的數據分割為多個mini-batch,然后分發給每一個模型副本,進行前向傳播,并計算損失和梯度,然后通過All-Reduce操作進行通信和廣播,對每一個GPU計算的梯度進行規約(同步加平均),然后將梯度分發給每一個GPU,每張卡獨立更新,單獨更新模型參數,此時由于更新的梯度相同,模型的初始參數相同,經過更新后,每一個GPU上模型的參數也相同。
但是這種數據并行有哪些限制呢?
第一個是可以使用的GPU數量受限于batch的大小,假設batch是64,那你最多也只能用64張卡了。
另一個就是GPU利用率可能拉不滿,如果batch的數量固定式512,你GPU太多,分發給每一個GPU的數據量太小,那GPU 更新塊,但是通信頻率也就增加了,可能會限制訓練速度。
在這里插入圖片描述

所有 GPU 必須一起等到梯度計算完成,才能開始 all-reduce,否則會造成阻塞卡頓。 數據并行最適合模型較小、計算量大、batch size 較大時使用。模型較大或 GPU 太多時要考慮混合并行或 ZeRO 分布式技術。 All-Reduce 是一種通信操作,由 NCCL / MPI / Gloo 等通信庫負責實現。它不是庫,而是庫提供的功能

模型并行

梯度累積:
主要是用來模仿大batch進行更新的操作,因為大batch更新往往更見穩定,但是受限于顯存,所以可以用梯度累積的方式,當累積到固定數量的batch之后再進行優化器更新,它通過將多個小 batch 的梯度累加,然后在累積到設定的步數后進行一次更新,從而 模擬了大 batch 的梯度平均效果。

激活檢查點:
主要是用來緩解激活值對顯存的占用壓力,因為按照反向傳播公式,每一個參數更新時,都需要前一層的激活值,這樣的話,每一次更新的時候就需要存儲每一個節點的激活值,對顯存的占用太高,所以就采用梯度檢查點的方式,每隔一定的步數保存激活值,兩個激活值之間的沒有保存的激活值,通過前向傳播再算出來,這也就是用時間換空間了,總的來說,現在所占用的空間復雜度降為 Q ( N ) Q(\sqrt{N}) Q(N ?),相當于在更新的時候再做了一次前向傳播。
這也是為什么模型在模型在訓練的時候,不考慮激活值占用顯存的問題,因為它可以通過技術原因繞過去。
在這里插入圖片描述

張量并行

如果一個GPU裝不下一整個模型,那么就可以對模型進行拆分,相當于橫著或者豎著來一刀,一般來說,對于大矩陣的乘積計算,我們可以將其分成多個小矩陣的乘積和加和,根據拆分方式的不同可以分為行并行和列并行,一般來說,列并行更好一些,因為在計算激活值的時候不需要先進行通信。通信的原因還是GELU是非線性函數,需要根據全局的信息進行計算。
在這里插入圖片描述
行并行:
在這里插入圖片描述
列并行:
在這里插入圖片描述
在這里插入圖片描述

流水線并行

流水線并行通過將模型按網絡層劃分為多組,每一組在一個GPU上。
目前主流的流水線并行方法包括Gpipe和PipeDream,降低空泡率。Megatron用的時Visual pipeline.1F1B,一前向一反向。
實際上流水線并行和張量并行是正交的,可以同時存在。

3D并行

在這里插入圖片描述
3D并行就是混合數據并行DP,張量并行TP和流水線并行PP。四路張量,四路流水線,2路數據

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

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

相關文章

魔百和網絡機頂盒CM211-1硬件解析

先來個正面照 背面照 核芯 無線網卡 支持WiFi與藍牙 硬盤 正面內存與背面內存

Kratos 與Golang Cms的關系

Kratos 與 Golang CMS 的關系 Kratos 是 Bilibili 開源的一款輕量級 Go 語言微服務框架,專注于構建高性能、可擴展的后端服務。雖然它本身并不是一個完整的 CMS(內容管理系統),但它可以用于開發 CMS 系統的后端或 API 服務。 我們的目標是提供全面的微服務開發技術。基于…

在vue3+vite中給 Video視頻 添加字幕

Video視頻 添加字幕 方式一: 使用 track標簽template標簽中css樣式修改方式二:直接讀取.vtt文件方式一: 使用 track標簽 參考1:https://blog.csdn.net/weixin_42321819/article/details/112442773 參考2:https://blog.csdn.net/foren_whb/article/details/80810552 template標…

UE4手動實現billboard效果讓物體始終面向相機正面

一個很簡單的需求,但在網上竟然沒查到。首先不能用FindLookAtRotation,因為這是用location算的,是讓物體朝向相機的方向,而不是朝向相機的正面。區別如下圖所示: 然后想用billboard component,不過這個原生…

在阿里云上搭建n8n

0.安裝docker 0.1 刪除Docker相關源 #刪除Docker相關源 sudo rm -f /etc/yum.repos.d/docker*.repo #卸載Docker和相關的軟件包 sudo dnf -y remove \ docker-ce \ containerd.io \ docker-ce-rootless-extras \ docker-buildx-plugin \ docker-ce-cli \ docker-compose-plug…

Qt中的OpenGL (4)[紋理]

文章說明 本文是學習OpenGL的筆記,主要參考大神JoeyDeVries的LearnOpenGL第六課《紋理》,并將教程中的代碼基于Qt進行實現。 學習目標 掌握紋理基本知識掌握紋理貼圖目錄結構 |- |-- HelloTextures|--- hello_textures.cpp|--- hello_textures.h|--- main.cpp|--- CMakeLi…

【Java多線程從青銅到王者】阻塞隊列(十)

阻塞隊列 阻塞隊列也是一種隊列,先進的先出 阻塞隊列就是對普通的隊列做出的拓展 阻塞隊列的特性 1.線程安全的,我們普通的隊列值線程不安全的 2.具有阻塞的特性: a》如果針對一個已經滿了的隊列進行如隊列操作的話,入隊列操作就…

Python打卡第52天

浙大疏錦行 作業: 對于day41的簡單cnn,看看是否可以借助調參指南進一步提高精度。 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import ma…

力扣100- 環形鏈表

方法一 遍歷 循環鏈表&#xff0c;查找鏈表節點是否重復出現 public boolean hasCycle(ListNode head) {Set<ListNode> set new HashSet<>(); if (head null) return false; while (head ! null) {if (set.contains(head)) {return true;}set.add(head);head …

Java + Spring Boot + Mybatis 插入數據后,獲取自增 id 的方法

在 MyBatis 中使用 useGeneratedKeys"true" 獲取新插入記錄的自增 ID 值&#xff0c;可通過以下步驟實現&#xff1a; 1. 配置 Mapper XML 在插入語句的 <insert> 標簽中設置&#xff1a; xml 復制 下載 運行 <insert id"insertUser" para…

Meta發布V-JEPA 2世界模型及物理推理新基準,推動AI在物理世界中的認知與規劃能力

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

觸覺智能RK3576核心板工業應用之軟硬件全國產化,成功適配開源鴻蒙OpenHarmony5.0

在全球科技競爭加劇和供應鏈安全日益重要的背景下&#xff0c;實現關鍵軟硬件的全國產化替代已成為國家戰略和產業共識。在這一背景下&#xff0c;觸覺智能推出RK3576核心板,率先適配開源鴻蒙OpenHarmony5.0操作系統&#xff0c;真正實現了從芯片到操作系統的全棧國產化方案&am…

前端基礎知識ES6系列 - 01(var、let、const之間的區別)

一、var 在ES5中&#xff0c;頂層對象的屬性和全局變量是等價的&#xff0c;用var聲明的變量既是全局變量&#xff0c;也是頂層變量 注意&#xff1a;頂層對象&#xff0c;在瀏覽器環境指的是window對象&#xff0c;在 Node 指的是global對象 var a 10; console.log(window…

Python Docker 鏡像構建完整指南:從基礎到優化

Python 是一門廣泛使用的編程語言,在容器化環境中,構建和使用 Python 鏡像是非常常見的任務。本文將提供一個完整的指南,包括選擇基礎鏡像、制作流程、不同場景下的應用、安全性最佳實踐以及鏡像優化策略。 1. 選擇合適的基礎鏡像 1.1 官方 Python 鏡像 Docker Hub 提供了…

【狂飆AGI】第1課:大模型概述

目錄 &#xff08;一&#xff09;大模型概念解析&#xff08;二&#xff09;大模型發展歷程&#xff08;三&#xff09;大模型發展現狀&#xff08;1&#xff09;OpenAI&#xff08;2&#xff09;微軟&#xff08;3&#xff09;谷歌&#xff08;4&#xff09;Meta &#xff08;…

vite ts 配置使用@ 允許js

1.vite.config.ts 配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import { fileURLToPath, URL } from node:url import setup_extend from vite-plugin-vue-setup-extend// https://vite.dev/config/ export default defineConfig({plugins: …

使用Ollama+open-webui搭建本地AI模型

本地搭建AI模型 說明&#xff1a;1、下載Ollama2、下載模型3、pip安裝open-webui&#xff08;不推薦&#xff09;1、Python版本不對應2、下載wheels失敗 4、docker安裝open-webui 說明&#xff1a; 在windows上搭建本地AI&#xff0c;使用Ollamaopen-webui的方式&#xff0c;可…

第 87 場周賽:比較含退格的字符串、數組中的最長山脈、一手順子、訪問所有節點的最短路徑

Q1、[簡單] 比較含退格的字符串 1、題目描述 給定 s 和 t 兩個字符串&#xff0c;當它們分別被輸入到空白的文本編輯器后&#xff0c;如果兩者相等&#xff0c;返回 true 。# 代表退格字符。 **注意&#xff1a;**如果對空文本輸入退格字符&#xff0c;文本繼續為空。 示例 …

linux安裝阿里DataX實現數據遷移

目錄 下載datax工具包(如果下載慢&#xff0c;請嘗試其他國內鏡像站或其他網站下載相應資源) 解壓工具包到當前目錄里 接著進入conf配置目錄并創建一個myjob.json&#xff08;臨時測試json&#xff09;&#xff0c;myjob.json內容如下&#xff0c;用于模擬test庫tab1表數據同…

C++ 引用介紹

很好&#xff01;既然你有 C 的基礎&#xff0c;那么理解 C 的「引用&#xff08;reference&#xff09;」會容易很多。我們來一步步講清楚這個概念。 &#x1f31f; 一句話總結&#xff1a; C 引用&#xff08;reference&#xff09;就是已存在變量的“別名”&#xff0c;它不…