二、TorchRec中的分片

TorchRec中的分片


文章目錄

  • TorchRec中的分片
  • 前言
  • 一、Planner
  • 二、EmbeddingTable 的分片
    • TorchRec 中所有可用的分片類型列表
  • 三、使用 TorchRec 分片模塊進行分布式訓練
    • TorchRec 在三個主要階段處理此問題
  • 四、DistributedModelParallel(分布式模型并行)
  • 總結


前言

  • 我們來了解TorchRec架構中是如何分片的

一、Planner

  • TorchRec planner 幫助確定模型的最佳分片配置。

  • 它評估嵌入表分片的多種可能性,并優化性能。

  • planner 執行以下操作:

    • 評估硬件的內存約束。
    • 根據內存獲取(例如嵌入查找)估算計算需求。
    • 解決特定于數據??的因素。
    • 考慮其他硬件細節,例如帶寬,以生成最佳分片計劃。

二、EmbeddingTable 的分片

  • TorchRec sharder 為各種用例提供了多種分片策略,我們概述了一些分片策略及其工作原理,以及它們的優點和局限性。通常,我們建議使用 TorchRec planner 為您生成分片計劃,因為它將為模型中的每個嵌入表找到最佳分片策略。
  • 每個分片策略都確定如何進行表拆分、是否應拆分表以及如何拆分、是否保留某些表的一個或幾個副本等等。分片結果中的每個表片段,無論是一個嵌入表還是其中的一部分,都稱為分片。
  • 可視化 TorchRec 中提供的不同分片方案下表分片的放置

不同分片方案下表分片的放置

TorchRec 中所有可用的分片類型列表

  • 表式 (TW):顧名思義,嵌入表作為一個整體保留并放置在一個 rank 上。
  • 列式 (CW):表沿 emb_dim 維度拆分,例如,emb_dim=256 拆分為 4 個分片:[64, 64, 64, 64]。
  • 行式 (RW):表沿 hash_size 維度拆分,通常在所有 rank 之間均勻拆分。
  • 表式-行式 (TWRW):表放置在一個主機上,在該主機上的 rank 之間進行行式拆分。
  • 網格分片 (GS):表是 CW 分片的,每個 CW 分片都以 TWRW 方式放置在主機上。
  • 數據并行 (DP):每個 rank 保留表的副本。

分片后,模塊將轉換為它們自身的分片版本,在 TorchRec 中稱為 ShardedEmbeddingCollectionShardedEmbeddingBagCollection。這些模塊處理輸入數據的通信、嵌入查找和梯度。

三、使用 TorchRec 分片模塊進行分布式訓練

  • 有許多可用的分片策略,我們如何確定使用哪一個?
    • 每種分片方案都有相關的成本,這與模型大小和 GPU 數量相結合,決定了哪種分片策略最適合模型。
  • 在沒有分片的情況下,每個 GPU 保留嵌入表的副本 (DP),主要成本是計算,其中每個 GPU 在前向傳遞中查找其內存中的嵌入向量,并在后向傳遞中更新梯度。
  • 使用分片時,會增加通信成本:
    • 每個 GPU 都需要向其他 GPU 請求嵌入向量查找,并通信計算出的梯度。這通常被稱為 all2all 通信。
    • 在 TorchRec 中,對于給定 GPU 上的輸入數據,我們確定數據每個部分的嵌入分片所在的位置,并將其發送到目標 GPU。
    • 然后,目標 GPU 將嵌入向量返回給原始 GPU。在后向傳遞中,梯度被發送回目標 GPU,并且分片會通過優化器進行相應的更新。
  • 如上所述,分片需要我們通信輸入數據和嵌入查找。

TorchRec 在三個主要階段處理此問題

我們將此稱為分片嵌入模塊前向傳遞,該傳遞用于 TorchRec 模型的訓練和推理

  • 特征 All to All / 輸入分布 (input_dist)

    • 將輸入數據(以 KeyedJaggedTensor 的形式)通信到包含相關嵌入表分片的適當設備
  • 嵌入查找

    • 使用特征 all to all 交換后形成的新輸入數據查找嵌入
  • 嵌入 All to All/輸出分布 (output_dist)

    • 將嵌入查找數據通信回請求它的適當設備(根據設備接收到的輸入數據)
  • 后向傳遞執行相同的操作,但順序相反。

四、DistributedModelParallel(分布式模型并行)

  • 以上所有內容最終匯集成 TorchRec 用于分片和集成計劃的主要入口點。
  • 在高層次上,DistributedModelParallel 執行以下操作:
    • 通過設置進程組和分配設備類型來初始化環境。
    • 如果沒有提供 sharder,則使用默認的 sharder,默認 sharder 包括 EmbeddingBagCollectionSharder
    • 接收提供的分片計劃,如果未提供,則生成一個。
    • 創建模塊的分片版本,并用它們替換原始模塊,例如,將 EmbeddingCollection 轉換為 ShardedEmbeddingCollection
    • 默認情況下,使用 DistributedDataParallel 包裝 DistributedModelParallel,使模塊既是模型并行又是數據并行。

總結

  • 對TorchRec中的分塊策略進行了解。

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

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

相關文章

如何在 Spring Boot 項目中使用 MyBatis 進行批量操作以提升性能?

MyBatis 提供了 ExecutorType.BATCH 類型,允許將多個 SQL 語句進行組合,最后統一執行,從而減少數據庫的訪問頻率,提升性能。 以下是如何在 Spring Boot 項目中使用 MyBatis 進行批量操作的關鍵點: 1. 配置 MyBatis 使…

Redis 字符串(String)詳解

1. 什么是字符串類型 在 Redis 中,字符串(String) 是最基本的數據類型。它可以包含任何數據,比如文本、JSON、甚至二進制數據(如圖片的 Base64 編碼),最大長度為 512 MB。 字符串在 Redis 中不…

Elasticsearch 系列專題 - 第四篇:聚合分析

聚合(Aggregation)是 Elasticsearch 的強大功能之一,允許你對數據進行分組、統計和分析。本篇將從基礎到高級逐步講解聚合的使用,并結合實際案例展示其應用。 1. 聚合基礎 1.1 什么是聚合(Aggregation)? 聚合是對文檔集合的統計分析,類似于 SQL 中的 GROUP BY 和聚合…

YOLO學習筆記 | YOLOv8 全流程訓練步驟詳解(2025年4月更新)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 這里寫自定義目錄標題 一、數據準備1. 數據標注與格式轉換2. 配置文件生…

context上下文(一)

創建一個基礎的context 使用BackGround函數,BackGround函數原型如下: func Background() Context {return backgroundCtx{} } 作用:Background 函數用于創建一個空的 context.Context 對象。 context.Background() 函數用于獲取一個空的 cont…

Java中常見的設計模式

Java中常見的設計模式 Java 中有 23 種經典設計模式,通常被分為三大類:創建型、結構型和行為型。每個設計模式都解決了不同類型的設計問題。以下是幾種常見設計模式的總結,并附帶了實際應用場景、示例代碼和詳細的注釋說明。 一、創建型設計…

責任鏈設計模式(單例+多例)

目錄 1. 單例責任鏈 2. 多例責任鏈 核心區別對比 實際應用場景 單例實現 多例實現 初始化 初始化責任鏈 執行測試方法 歡迎關注我的博客!26屆java選手,一起加油💘💦👨?🎓😄😂 最近在…

springboot 處理編碼的格式為opus的音頻數據解決方案【java8】

opus編碼的格式概念: Opus是一個有損聲音編碼的格式,由Xiph.Org基金會開發,之后由IETF(互聯網工程任務組)進行標準化,目標是希望用單一格式包含聲音和語音,取代Speex和Vorbis,且適用…

vue項目引入tailwindcss

vue3項目引入tailwindcss vue3 vite tailwindcss3 版本 初始化項目 npm create vitelatest --template vue cd vue npm install npm run dev安裝tailwindcss3 和 postcss 引入 npm install -D tailwindcss3 postcss autoprefixer // 初始化引用 npx tailwindcss init -p…

Google ADK(Agent Development Kit)簡要示例說明

一、環境準備與依賴安裝 1.1 系統 硬件: GPU NVIDIA 3070加速模型推理,內存64GB軟件: Python 3.11Docker 28.04(用于容器化部署)Kubernetes 1.25(可選,用于集群管理) 1.2 安裝 A…

批量給文件編排序號,支持數字序號及時間日期序號編排文件

當我們需要對文件進行編號的時候,我們可以通過這個工具來幫我們完成,它可以支持從 001 到 100 甚至更多的數字序號編號。也可以支持按照日期、時間等方式對文件進行編號操作。這是一種操作簡單,處理起來也非常的高效文件編排序號的方法。 工作…

【系統架構】AI時代下,系統架構師如何修煉

在AI時代,系統架構師的角色正經歷深刻變革,需在技術深度、工具應用與思維模式上全面升級。以下結合行業趨勢與實踐建議,總結系統架構師的修煉路徑: 一、掌握AI工具,重構工作流 自動化文檔與設計 利用生成式AI(如DeepSeek、ChatGPT)完成70%的需求文檔、接口設計及架構圖生…

圖像顏色空間對比(Opencv)

1. 顏色轉換 import cv2 import matplotlib.pyplot as plotimg cv2.imread("tmp.jpg") img_r cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_g cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_h cv2.cvtColor(img, cv2.COLOR_BGR2HSV) img_l cv2.cvtColor(img, cv2.C…

JDBC驅動autosave缺陷的修復與配置指南

opengauss-jdbc-6.0.0.jar和opengauss-jdbc-6.0.0-og.jar版本修復了:autosavealways時,事務嵌套太深,導致棧溢出問題。如果使用的版本低于opengauss-jdbc-6.0.0版本,需要通過替換jdbc驅動和修改url參數來解決autosave缺陷。以下是…

K8S-證書過期更新

K8S證書過期問題 K8S證書過期處理方法 Unable to connect to the server: x509: certificate has expired or is not yet valid 1、查看證書有效期: # kubeadm certs check-expiration2、備份證書 # cp -rp /etc/kubernetes /etc/kubernetes.bak3、直接重建證書 …

2025 年網絡安全終極指南

我們生活在一個科技已成為日常生活不可分割的一部分的時代。對數字世界的依賴性日益增強的也帶來了更大的網絡風險。 網絡安全并不是IT專家的專屬特權,而是所有用戶的共同責任。通過簡單的行動,我們可以保護我們的數據、隱私和財務,降低成為…

Python的那些事第四十九篇:基于Python的智能客服系統設計與實現

基于Python的智能客服系統設計與實現 摘要 隨著人工智能技術的飛速發展,智能客服系統逐漸成為企業提升客戶服務質量和效率的關鍵工具。本文詳細介紹了基于Python的智能客服系統的設計與實現方案,涵蓋了系統架構、核心功能、技術選型及優化建議,旨在為企業構建高效、智能的客…

第Y1周:調用YOLOv5官方權重進行檢測

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 文章目錄 1、前言2、下載源碼3、運行代碼 1、前言 YOLOv5分為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四個版本,這里以YOLOv5s為例。 2、下載源碼 安…

Python小程序 - 文件處理3:正則表達式

正則表達式:文本年鑒表。遺留的問題很多。。。用AI再想想 需求:讀入txt文件,過濾文件有關年記錄 0)讀入txt文件 1)以“。”,中文句號,為界區分一句,最小統計單位 2)年格…

【antd + vue】Tree 樹形控件:默認展開所有樹節點 、點擊文字可以“選中/取消選中”節點

一、defaultExpandAll 默認展開所有樹節點 1、需求:默認展開所有樹節點 2、問題: v-if"data.length"判斷的層級不夠,只判斷到了物理那一層,所以只展開到那一層。 3、原因分析: 默認展開所有樹節點, 如果是…