教材:10710周志遠教授平行程式 https://www.youtube.com/playlist?list=PLS0SUwlYe8cxqw70UHOE5n4Lm-mXFXbZT 20250923 筆記 內容可能有錯僅供參考 這部分是 2023 新的 UCX 章節 [NTHU-PP-Chap13-UCX-Part3](https://www.youtube.com/watch?v=qQ1kUavHxbQ&list=PLQTDfc8kgjhMKtgumyK0gmEelnTtqJGsp&index=32&t=2s) 今日大綱 1.UCP 架構與層次 2.UCP API 使用流程與連線建立 3.UCP 溝通類型 4.HPCX 和 UCC 介紹 5.SHARP 介紹 ### UCP 架構與層次 UCP 描述了其 programming 的方式,它具有層次結構: 1. **Context**: * 通常對應到一個 **process 或 application**。 * 一個 process 一般只會呼叫一次 UCP Init 來建立 context。 * Context 負責檢查 API 的 capability。 * 它會檢查 **network interface**,確認哪些 transport 方式是可用的。 * 它會根據 configuration 決定之後 context 可以使用的 transport。 * 它是被回傳的 token 或 handler。 2. **Worker**: * 位於 Context 下一層。 * 通常對應到一個 **thread**。 * 負責實際的 transport communication 運作。 * Worker object 是特殊的 **memory object**,可以被傳輸到遠端 process 並仍可啟動。 * Worker 的實作必須能與所有底層 transport (transportation layer) 相容。 * 一個 Worker 可以操作多個 Endpoint。 3. **Endpoint**: * 位於 Worker 下一層。 * 對應到 **Queue** 或是 **connection**。 * Endpoint 最終是透過它來與遠端另一個 process 或電腦進行溝通。 * 一個 Endpoint 只能被一個 Worker 操縱。 UCX 的 UCP 實作會自動幫我們選擇 transport 方式與 transport 選項。 ### UCP API 使用流程與連線建立 UCP 在做 setup 或 initialization 時相對複雜,通常用於大資料傳輸或需要高傳輸效能的場景。 #### 1. 初始化 Context * 透過呼叫 `UCP_Init` 函式來初始化 Context。 * 初始化過程涉及許多參數,建議參考 reference。 * 有分 **parameter** 和 **configuration** 兩關的設定。 * 初始化會回傳 **context handler**。 * 初始化實作的差異性(如用於 MPI 或 share memory)會影響所需參數。 #### 2. 建立 Worker * 下一步是呼叫 `ucp_worker_create`。 * 它需要傳入 context。 * 在 Hello World 範例中,使用了單純的 **single mode** (single process/single thread)。 * 建立 Worker 後,需要呼叫 API 取得 **Worker address**。這個 address 非常重要,它是一個特殊的 memory address,與 transport 方式相關,但 Worker 的實作確保它能被任何 transport 看懂和使用。 #### 3. 建立 Endpoint (連線建立) * 建立 Endpoint 的目的是建立 **connection**。 * UCP 的連線建立需要 **out-of-band communication**。 * 在建立 Endpoint 之前,Client 端必須先取得 remote 端的 **peer address** (例如 IP 或 worker address),這些資訊需要透過傳統方式(如 **TCP/IP socket programming**)先行傳輸。 * Server 端會將其 Worker address 傳送到 Client 端。 * Client 端拿到這個 address 後,才能呼叫 `ucp_ep_create`,將 peer address 作為參數傳入,以完成 connection 的建立。 #### 4. Worker Progress * 由於 UCP 的溝通多為 **非同步**。 * 需要呼叫 **`UCP_Worker_Progress`** API。 * 這個 API 像是在做 **polling**,它會要求 Worker 檢查 connection queue 內的 request 狀態,看是否已完成或有進度 (progress)。 * Hello World 範例中的 `UCP_Wait` 函式是 user program 自己實作的 **blocking code**,它透過迴圈不斷呼叫 `progress`,直到狀態為 complete。 * 傳輸完成後,相關的 request 資源 (像是 memory) 必須被 `release` 掉。 ### UCP 溝通類型 #### 兩側通訊 (Two-Sided Communication) * **Send 與 Receive**。 * 這類溝通通常使用 **tag matching**:Send 和 Receive 都有一個 `tag` 欄位,兩端的 tag 必須匹配才能成功接收。 * UCP 提供的 Send 是 **non-blocking** 的。 * Receive API 包含 `mask` 參數,用來加速 tag matching,減少延遲 (latency)。 * 非阻塞式呼叫會產生 **status handle/token**,用於追蹤傳輸結果。 * 相關輔助 API 包含 `Cancel` (取消傳輸)。 #### 單側通訊 (One-Sided Communication, One-sided) 單側通訊(例如 RDMA)特別適合高效能傳輸。One-sided communication 的重要特點是 **不涉及 remote 端的 CPU 運算** (offload),而是由網卡處理。 #### 前置準備:Memory Management * One-sided 必須先有 **memory management** 準備。 * **Memory Map**: 呼叫 `memory map` API 來 reserve 一塊 memory region。此 region 屬於 context。 * **Key Creation**: 之後必須產生 **memory key**。 * Memory key 必須透過網路傳輸到 remote 端,讓對方能夠進行 One-sided 讀寫。 * **Pack/Unpack**: Key 在傳輸前需要 `pack` 成統一形式,接收後需要 `unpack`,以確保不同架構的電腦能夠正確使用 (處理資料格式或 memory layout 差異)。 #### 操作類型 1. **Atomic Operations (utonomic operation)**: * 執行很簡單、用來完成同步化的操作,例如 AD (Add)、decrease、AND 或 OR。 * 多個遠端使用者可以同時透過網路修改同一塊 memory 上的變數。 2. **Put**: * 將資料寫入遠端記憶體。 * **不保證** 原子性 (atonomic),多人同時操作可能造成 race condition。 * 通常用於 one-to-one 的 one-sided 寫入操作。 3. **Get**: * A 端呼叫 Get,將遠端 B 端的資料取回。 * 流程包含 request 從 A 到 B,資料從 B 回到 A。 #### UCP 與 GPU 整合 UCX 的目標是將溝通細節隱藏起來,包括 GPU 傳輸。 * UCP 能夠 **remotely** 直接操作遠端電腦 **GPU memory** 上的資料。 * 實作上,只需將 buffer 資源配置到 **GPU global memory** (例如使用 `cuda_m_m_lock` 相關 API)。 * 後續的 UCP API 呼叫(如 Put/Get)與操作 Host memory 的方式 **一模一樣**,程式邏輯無需改變。 * UCX 會判斷記憶體在 GPU 上,並自動使用 GPU 的 transport 方式進行傳輸。 ### HPCX 與 Collective Communication (HPCX and UCC) #### HPCX 軟體套件 * HPCX 是一個為 High Performance Computing 設計的軟體套件 (software stack/package)。 * 它將多個元件整合在一起,包括與 UCX **編譯整合** 好的 **MPI** (如 Open MPI)。 * 它讓上層應用程式設計者可以直接使用 MPI,而底層則透過 UCX 處理溝通。 * HPCX 包含的元件還有 **NV_N (Nvidia EFA)** 函式庫,以及 **UCC**。 #### UCC (Unified Collective Communication) * UCC 專注於處理 **Collective Code** (集體通訊操作)。 * Collective Code 包含 Broadcast、Reduce、Allreduce 等操作。 * UCC 的角色與 UCX 相似,但 UCX 專注於 P2P 溝通。 * UCC 實作這些操作,避免使用者自己用 UCP 刻寫。 * 集體操作的實作通常是 **hierarchical (層次性)** 的。 * UCC 的溝通需要一個 **group** 的概念,這個 group entity/context 應用於一組 connection 上。 * 使用時,可以在運行 MPI 程式時設定參數 (如 `UCC_enable=1`),讓 PI 的集體操作走 UCC 路徑來加速。 ### SHARP (Scalable Hierarchical Aggregation and Reduction Protocol) SHARP 是一種更底層的加速技術,專為集體操作設計。 * **硬體需求**: SHARP 需要 **特殊 Switch** (而非特殊網卡) 來運作。 * **運作原理**: 這些特殊的 Switch(稱為 **in-network computing** 或 **programmable switch**)具有運算能力。它們可以在封包傳輸中,直接在 Switch 內進行運算處理。 * **用途**: SHARP 用來加速 Collective Code,特別是 **aggregation** 和 **reduction**。 * **優勢**: 提升效能、減少網路流量、提高 scalability。 * 這種技術的重點是將運算從 CPU 卸載到網路硬體中。 * 在平行程式設計中,SHARP 專注於處理 Aggregation 和 Reduction 兩種操作,因為這些操作對於分散式機器學習(如模型訓練)非常重要。 * SHARP 是 **hardware-based solution**。通常在 InfiniBand Switch 系統中提供。 --- 其他課程連結 [平行程式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)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up