---
# System prepended metadata

title: 平行程式 NTHU-PP-Chap12-Distributed Training-Part1
tags: [平行程式]

---

教材:10710周志遠教授平行程式
https://www.youtube.com/playlist?list=PLS0SUwlYe8cxqw70UHOE5n4Lm-mXFXbZT

20250918 筆記
內容可能有錯僅供參考
在這個章節開始投影片和10710周志遠教授平行程式有差異，接下來以
NTHU-PP-2021 (Chinese) 為主


[NTHU-PP-Chap12-Distributed Training-Part1](https://www.youtube.com/watch?v=yOZYl_hVnvM&list=PLQTDfc8kgjhMKtgumyK0gmEelnTtqJGsp&index=28)

進入到分散式深度學習部分，這部分是新的並沒有包含在 2018 年的影片

今日大綱
1.深度學習基礎概念
2.深度學習的特性與挑戰
3.深度學習的硬體加速
4.通訊瓶頸與解決方案
5.深度學習的軟體堆疊
6.深度學習系統與伺服器


#### **深度學習的分散式與平行計算 (Distributing and Computing for Deep Learning)**


本章節是課程的最後一個部分，將探討分散式平行計算如何影響和應用於深度學習（Deep Learning）這一熱門領域。課程會從計算效能的角度來看深度學習，特別著重於**分散式深度學習 (Distributed Deep Learning)**，尤其是模型訓練（training）部分的概念、實現方式及相關函式庫（library）。我們將介紹如 TensorFlow 等框架如何利用這些工具，其中 **Horovod** 是 Uber 開發的知名平行模型訓練函式庫。本章也會涵蓋 ML system、AutoML、AI 晶片，以及不同計算環境下的效能與系統相關知識，並介紹 **聯邦式學習 (Federated Learning)** 與傳統分散式學習的差異。

**一、 深度學習基礎概念**

*   **人工智慧 (AI)**：目標是讓電腦系統或機器實現像人一樣的行為。圖靈測試 (Turing Test) 是一個判斷機器是否具有人工智慧的著名標準。
*   **機器學習 (Machine Learning)**：AI 的一種實現方法，讓機器或電腦能夠自我學習，並從資料中做出決策或預測。在資料充足且計算能力夠強的情況下，機器學習能夠訓練出強大的模型或演算法。
*   **深度學習 (Deep Learning)**：機器學習的一個分支，**透過人工類神經網路 (Artificial Neural Network, ANN)** 作為模型進行學習的方法。之所以稱為「深度」，是因為這些神經網路通常堆疊了許多層（數十甚至上百層）。
*   **深度學習的強大之處**：
    *   **通用函數逼近器 (Universal Function Approximator)**：從理論角度看，神經網路建立的模型可以描述世界上任何函數。這表示模型本身不會限制其學習能力。
    *   **複雜模型與參數**：神經網路可以有非常多層，使其模型變得非常複雜，擁有大量參數，從而能夠學習更複雜的問題。
    *   **自動特徵擷取 (Automatic Feature Extraction)**：相較於傳統機器學習需要手動設定特徵，深度學習（特別是前幾層）能自動從資料中學習並提取特徵，例如人臉辨識中的線條、眼睛部位等。
*   **深度學習模型訓練**：
    *   **訓練目的**：調整神經網路中的係數或參數 (parameter)，使其能夠適配所有輸入資料。
    *   **監督式學習 (Supervised Learning)**：常見的訓練方式，每個輸入資料都有對應的標籤 (label)，模型輸出與標籤比較，計算誤差 (error)。
    *   **梯度下降 (Gradient Descent)**：主要用於修正參數的方法，目標是找到使誤差（loss）最小的參數設定。透過計算梯度 (gradient)，模型可以朝著誤差降低的方向調整參數。
    *   **計算流程**：
        1.  **前向傳播 (Forward Propagation)**：資料輸入，經過各層函數計算，產生輸出和誤差。
        2.  **反向傳播 (Backpropagation)**：根據誤差計算梯度，回頭修正模型參數。
    *   **計算特性**：深度學習的計算過程（前向傳播、梯度計算、反向傳播）**非常規律**，使其非常適合**平行計算**。

**二、 深度學習的特性與挑戰**

*   **廣泛適用性**：能應用於各式各樣的資料和問題，因為任何問題都可以數位化、資料化，任何決策都可以量化為模型輸出。
*   **易於應用與彈性**：相較於傳統機器學習，深度學習在應用或微調時，不一定需要深入的數學或統計學知識，常透過增加層數、調整參數或資料前處理來改善結果。模型具有模組化特性，可以像積木一樣組合，容易建構出表現良好的模型。
*   **資料驅動 (Data-driven)**：資料量越多，越有機會得到更好的結果，即使模型沒有大的改變，它也能從資料中自我學習。這也是深度學習超越傳統機器學習的關鍵原因之一。
*   **計算需求快速增長**：
    *   **模型複雜度增加**：模型越來越複雜，層數和參數越來越多。
    *   **資料集規模擴大**：通常資料集越大，結果越好。
    *   **訓練時間延長**：需要更長時間的迭代訓練才能收斂或獲得更好的結果。
    *   **超參數調優空間巨大 (Hyperparameter Tuning)**：除了模型參數外，還有學習率、Dropout 率等超參數，其組合空間龐大，找到最佳參數需要花費大量時間。
    *   **OpenAI 的研究顯示，AI 模型的計算需求呈指數級增長，甚至超過摩爾定律 (Moore's Law) 的速度**。早期成功的模型如 AlexNet，其突破性表現很大程度上歸因於計算能力的提升。

**三、 深度學習的硬體加速**

*   **GPU (Graphics Processing Unit)**：
    *   GPU 是推動深度學習發展的關鍵力量，其計算能力遠超 CPU。
    *   採用 **SIMD (Single Instruction, Multiple Data) 架構** 和 **大量平行處理 (Massive Parallel Processing)**，能有效處理規律且大量的計算任務。
*   **AI 晶片與 Tensor Core**：
    *   深度學習中的神經網路計算常涉及 **捲積 (Convolution)** 運算，本質上是**矩陣乘加 (Matrix Multiply-Add, MMA)** 運算（A\*B+C）。
    *   **Tensor Core** (張量核心) 是專門針對此類二維矩陣計算設計的加速器，能將整個運算硬體化 (hardware)，大幅提升效能。例如，NVIDIA V100 GPU 內含 640 個 Tensor Core，其計算能力（120 TFLOPS）遠高於傳統 GPU 核心。
    *   這反映了當前趨勢：**應用特定 (Application-Specific) 或專用 (Purpose-Built) 硬體**的效能遠超通用型解決方案。

**四、 通訊瓶頸與解決方案**

*   **通訊挑戰**：真正的難點通常不在計算，而在於**溝通 (Communication)**，包括記憶體和多個 GPU 之間資料的傳輸。在多 GPU 系統中，GPU 間的通訊通道頻寬不足是主要瓶頸，例如透過 PCI-e 傳輸的頻寬遠低於 GPU 內部或計算能力。
*   **NVIDIA NVLink**：
    *   NVIDIA 開發的硬體解決方案，是一種專為 GPU 之間（也可 CPU-GPU 間，但需 CPU 廠商支援）設計的高速匯流排 (bus)。
    *   提供極高的頻寬（早期 300GB/s，現已達 600-900GB/s），遠超 PCI-e。
    *   **實施方式**：
        1.  GPU 直接整合 NVLink 介面，通常為 SXM (Server Module) 模組形式。
        2.  一般 GPU 卡透過額外附加的 NVLink 匯流排連接到主機板。
    *   **拓撲 (Topology)**：GPU 之間的連接方式（拓撲）非常重要，它會影響通訊效能。較新的 GPU 伺服器會採用全連接 (fully-connected) 的 NVLink 拓撲，提供更均勻的通訊效能。
    *   **CPU Socket 影響**：跨 CPU Socket 的 GPU 通訊可能需要透過 CPU，導致效能下降，因此研究者常優化網路拓撲以避免此情況。

**五、 深度學習的軟體堆疊**

*   **CUDA**：NVIDIA GPU 的基本程式設計模型。
*   **NVIDIA 加速函式庫**：
    *   **cuBLAS (CUDA Basic Linear Algebra Subprograms)**：負責基本的線性代數計算。
    *   **cuDNN (CUDA Deep Neural Network library)**：專門針對深度學習神經網路計算（如卷積、活化函數等）優化的函式庫，與硬體緊密整合，效能極佳。
    *   **NCCL (NVIDIA Collective Communications Library)**：NVIDIA 的集體通訊 (Collective Communication) 函式庫，提供高度優化的集體通訊操作（如 all-reduce），尤其針對 GPU 和 NVLink 環境設計。它在 GPU 上實現了類似 MPI 的通訊操作，對分散式訓練至關重要。NCCL 2.0 之後甚至可以支援跨節點的多 GPU 通訊。
*   **深度學習框架 (Deep Learning Frameworks)**：如 PyTorch 和 TensorFlow 等，在底層都會呼叫這些 NVIDIA 函式庫來實現高效能計算。
*   **軟硬體整合**：NVIDIA 透過封閉的軟體環境和底層程式碼，實現軟硬體的高度整合，以提供最大的加速和效率。

**六、 深度學習系統與伺服器**

*   **整合式解決方案**：高性能的深度學習機器或伺服器，通常整合了多個 GPU、NVLink、高速 SSD 儲存、高速網路 (如 InfiniBand) 等技術。
*   **NVIDIA DGX 系列**：NVIDIA 推出的整合式深度學習伺服器 (如 DGX-1, DGX-2)，其造價昂貴（數百萬台幣），塞滿了高性能硬體，類似於超級電腦等級的配備。
*   **資源共享與利用**：由於這些資源昂貴，如何有效共享和分配 GPU 伺服器或叢集給不同使用者，是一個重要的系統計算議題。
*   **台灣 AI 超級電腦 (Taiwania 2)**：台灣建置的 AI 超級電腦，整合了前述的 DGX 伺服器，將其連接成超級電腦。雖然與傳統超級電腦的基準測試和應用不同，但其設計針對 AI 訓練優化。

---
其他課程連結

[平行程式1C~2B Introduction parallel programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Syxh3H7Kxe)
[平行程式3A~3D The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJh7QFVKle)
[平行程式4A~4B IO Parallel IO and Program Analysis](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJLMsuHFgg)
[平行程式5A~5B The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/SJh57hIFle)
[平行程式6A~6B Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/r1X9kX_Fle)
[平行程式 6C~6D Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/S1DPjoYFlx)
[平行程式 7A~8A Pthread:Synchronization Problem & Tools](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJu-_0tKge)
[平行程式 8B~8D Synchronization Tools & Open Multi-Processing(OpenMP)](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1ki4E2Fee)
[平行程式 9A~9B Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJTYMrpKlx)
[平行程式 10A~10B Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/B1cY6M1qee)
[平行程式 10C~10D Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BkgFaNg5gg)
[平行程式 11A~11B Parallel Work Pool and Termination / Parallel Sorting](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1hfOw-5xl)
[平行程式 12A~12B Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Symo-zQ9eg)
[平行程式 12C~12D Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJYNKDVceg)
[平行程式 13A-13B  Sychronous Parallelism](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJ2UJ2Bqex)
[平行程式 14A~14B Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BksS4yP5eg)
[平行程式 14C~14D Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJrfTUd9xx)
[平行程式 15A~15B Parallel Programming Model on GPU](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/ByWnl-t5gg)
[平行程式 16A~16B What is Compute Unified Device Architecture(CUDA)?](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HyYpsjcqgl)
[平行程式 17A~18A 平行運算的CUDA](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1dUeBT5lg)
[平行程式 18B~19A  記憶體層級 / CUDA的優化](https://hackmd.io/@JuitingChen/HyF44e1jge)
[平行程式 19B~19D 記憶體層級 / CUDA的優化 ](https://hackmd.io/@JuitingChen/ryPEu4lieg)
[平行程式 20A~20B CUDA優化全域和區域記憶體/共享記憶體](https://hackmd.io/@JuitingChen/r1X659Zoxl)
[平行程式 21A~21B Parallel Reduction / Distributed Computing Framework](https://hackmd.io/@JuitingChen/HyiOpozjxl)
[平行程式 NTHU-PP-Chap10-Big Data-Part1 ](https://hackmd.io/@JuitingChen/Hyc-e3Golx)
[平行程式 NTHU-PP-Chap10-Big Data-Part2 ](https://hackmd.io/@JuitingChen/ryC_QTXoxl)
[平行程式 NTHU-PP-Chap11-MapReduce](https://hackmd.io/@JuitingChen/HJgBXJOsge)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part1](https://hackmd.io/@JuitingChen/ryh5hBtsge)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part2](https://hackmd.io/@JuitingChen/rJ2G7kdjxg)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part3](https://hackmd.io/@JuitingChen/HkA471dilx)
[平行程式 NTHU-PP-Chap13-UCX-Part1](https://hackmd.io/@JuitingChen/rJbq103ieg)
[平行程式 NTHU-PP-Chap13-UCX-Part2](https://hackmd.io/@JuitingChen/SJpNmk_ixl)
[平行程式 NTHU-PP-Chap13-UCX-Part3](https://hackmd.io/@JuitingChen/HkIUYa13xe)
