純CPU場景下C++的分布式模型訓練框架設計思路

0. 參數分配

  • 稠密參數MPI 集合通信(All-Reduce / Broadcast / Reduce-Scatter)。
  • 稀疏參數brpc Parameter Server 異步推拉。
    完全去掉 NCCL/GPU 相關部分。

1. 整體拓撲

┌----------------┐         ┌----------------┐
│ Worker-0       │         │ PS-0           │
│ Worker-1       │?------? │ PS-1           │
│ ...            │  brpc   │ ...            │
│ Worker-N       │         │ PS-M           │
└----------------┘         └----------------┘▲│MPI(TCP/InfiniBand)▼
MPI_COMM_WORLD(稠密參數)
  • 稠密梯度:通過 MPI 標準集合操作(MPI_AllreduceMPI_Bcast 等)實現同步。
  • 稀疏參數:Worker 與 PS 之間用 brpc + protobuf 通信,異步推拉。

2. 關鍵模塊(C++)

cpu_dist/
├── common/
│   ├── tensor.h            // 純 CPU 張量(FP32/FP64)
│   └── mpi_context.h       // MPI_Init / Finalize 封裝
├── dense/
│   ├── mpi_allreduce.h     // MPI All-Reduce 封裝
│   └── optimizer.h         // 本地 SGD / AdamW
├── sparse/
│   ├── ps_server.h/cc      // brpc Parameter Server
│   ├── ps_client.h/cc      // brpc Client
│   └── table.h             // 稀疏表(unordered_map + 鎖)
├── proto/
│   └── message.proto       // protobuf 消息
└── launcher.cc             // 主進程入口

3. MPI 通信層(稠密參數)

3.1 封裝 MPI All-Reduce

// dense/mpi_allreduce.h
class MPIAllReduce {public:explicit MPIAllReduce(MPI_Comm comm) : comm_(comm) {}template <typename T>void AllReduceSum(std::vector<T>& buf) {std::vector<T> recv(buf.size());MPI_Allreduce(buf.data(), recv.data(), buf.size(),GetMPIType<T>(), MPI_SUM, comm_);buf.swap(recv);}private:MPI_Comm comm_;
};
  • 支持 float / double / int
  • 支持 In-place All-ReduceMPI_IN_PLACE)。

4. brpc Parameter Server(稀疏參數)

與之前設計一致,僅通信后端為 brpc

  • proto 定義不變(PullRequest, PushRequest)。
  • PS 端 實現 brpc::Service,用 brpc::Server 啟動。
  • Worker 端brpc::Channel 連接 PS,支持 輪詢/一致性哈希 負載均衡。

5. 主進程結構(launcher.cc)

int main(int argc, char* argv[]) {MPI_Init(&argc, &argv);int rank, size;MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);bool is_ps = (rank >= FLAGS_worker_num);if (!is_ps) {// WorkerMPIAllReduce ar(MPI_COMM_WORLD);PSClient ps(FLAGS_ps_list);WorkerLoop(ar, ps);} else {// Parameter ServerPSServer server;server.Start(FLAGS_ps_port);}MPI_Finalize();
}

6. Worker 主循環

void WorkerLoop(MPIAllReduce& ar, PSClient& ps) {Model model;DataLoader dl(FLAGS_data_path);for (int step = 0; step < FLAGS_max_step; ++step) {auto batch = dl.Next();std::vector<float> dense_grad;std::vector<int64_t> sparse_keys;std::vector<float> sparse_grad;// 前向 & 反向model.Backward(batch, &dense_grad, &sparse_keys, &sparse_grad);// 1. 稠密梯度 MPI All-Reducear.AllReduceSum(dense_grad);// 2. 稀疏梯度異步 Pushps.PushAsync(0, sparse_keys, sparse_grad);// 3. 稀疏參數 Pullstd::vector<float> sparse_emb;ps.Pull(0, sparse_keys, &sparse_emb);// 4. 參數更新model.Update(dense_grad, sparse_emb);}
}

7. 部署與運行

7.1 啟動腳本(OpenMPI)

# 4 worker + 2 ps
mpirun -np 6 \-x LD_LIBRARY_PATH \./launcher \--worker_num 4 \--ps_list "0.0.0.0:8000,0.0.0.0:8001"
  • worker_numrank 0~3 為 Worker,后 rank 4~5 為 PS。
  • MPI 負責稠密通信,brpc 負責稀疏通信,兩者互不干擾。

8. 性能調優

建議
MPI使用 OpenMPI 4.xIntel MPI(CPU 親和、NUMA 優化)。
brpc配置 輪詢 + 批處理(64~256 key/RPC),開啟 8bit 量化壓縮
線程MPI 與 brpc 線程分離,brpc 用 bthread,避免與 MPI 線程沖突。

至此,“CPU + MPI(稠密) + brpc Parameter Server(稀疏)” 的完整框架已就緒。

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

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

相關文章

訓練日志7.21

conda環境&#xff0c;服務器原因無法使用&#xff0c;需重新搭建 學習一下預訓練和微調相關內容&#xff0c;對于預訓練整體的流程&#xff0c;還不太清楚&#xff0c;自己估計是訓練不動&#xff0c;只能微調

Java 高頻算法

Java高頻算法面試題 以下是Java面試中常見的高頻算法題目&#xff0c;涵蓋了數據結構、算法思想和實際應用場景。 一、數組與字符串 1. 兩數之和 public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map new HashMap<>();for (int i 0; i <…

汽車控制系統——CAPL腳本

CAPL (Communication Access Programming Language) 是一種專門用于嵌入式系統和汽車電子測試領域的編程語言&#xff0c;特別是在 CAN (Controller Area Network) 總線和汽車網絡通信系統中被廣泛使用。它由 Vector 公司開發&#xff0c;主要用于編寫與汽車控制單元 (ECU) 進行…

深入解析Hive SQL轉MapReduce的編譯原理:從AST抽象語法樹到Operator執行樹

Hadoop與Hive SQL簡介Hadoop生態系統的核心架構作為大數據處理領域的基石&#xff0c;Hadoop生態系統采用分布式架構設計&#xff0c;其核心組件構成了一套完整的解決方案框架。HDFS&#xff08;Hadoop Distributed File System&#xff09;作為底層存儲系統&#xff0c;采用主…

在 React 中實現全局防復制hooks

用于防止頁面內容被復制、剪切或通過右鍵菜單操作。它接受三個可配置參數&#xff1a;disableCopy&#xff08;禁用復制&#xff0c;默認true&#xff09;、disableCut&#xff08;禁用剪切&#xff0c;默認true&#xff09;和 disableContextMenu&#xff08;禁用右鍵菜單&…

InfluxDB HTTP API 接口調用詳解(一)

引言 ** 在當今數字化時代&#xff0c;時間序列數據無處不在&#xff0c;從物聯網設備產生的傳感器數據&#xff0c;到金融領域的交易記錄&#xff0c;再到系統運維中的監控指標&#xff0c;這些數據蘊含著豐富的信息&#xff0c;對于企業的決策制定、業務優化以及問題排查等…

使用JMeter進行壓力測試(以黑馬點評為例、詳細圖解)

目錄 一、前言 二、使用JMeter進行壓力測試 一、前言 本博客主要記錄如何使用JMeter進行壓力測試&#xff0c;以黑馬點評P44利用互斥鎖解決緩存擊穿問題課程為例。至于如何完成JMeter的安裝配置及創建桌面快捷方式可以看我的另一篇博客&#xff0c;鏈接如下&#xff1a; 壓測…

舊手機部署輕量級服務器

將舊手機改造為Linux系統設備&#xff0c;不僅能賦予閑置設備新生&#xff0c;還能作為輕量級服務器、開發環境或學習平臺使用。以下是三種主流方案&#xff0c;涵蓋不同技術需求和安全等級&#xff0c;附操作步驟與避坑指南&#xff1a; ?? 一、三種安裝方案對比與選擇 方法…

micro avg、macro avg 和 weighted avg 的區別

問題描述&#xff1a; 在多分類任務的評估報告中&#xff0c;經常看到 micro avg、macro avg 和 weighted avg 三種平均指標&#xff0c;請解釋它們的區別以及各自的適用場景。&#x1f3af; 參考答案&#xff1a; 這三種平均指標是用來評估多分類模型性能的不同方式&#xff0…

Kafka灰度方案

一、kafka灰度方案架構設計方案&#xff1a;1、外部生產-內部消費場景&#xff1a;&#xff08;外部生產-內部消費&#xff09;解決方案&#xff1a;先通過kdis分流服務---消費外部生產的消息&#xff0c;然后根據管理后臺-灰度配置mcs-mimp-core應用默認的環境版本&#xff0c…

深入詳解K近鄰算法(KNN)在腦部疾病診斷中的應用與實現

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#,Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

黑馬點評練習題-給店鋪類型查詢業務添加緩存(String和List實現)

目錄 一、前言 二、需求 三、String實現 四、List實現 一、前言 這是黑馬點評實戰篇-商戶查詢緩存-0.3緩存練習題分析&#xff0c;練習給店鋪類型查詢業務添加緩存。這里我自己是通過String實現的&#xff0c;當然在網上查詢也能夠找到其他的實現方式。String實現我會展示自…

深度學習 pytorch圖像分類(詳細版)

目錄 一、項目簡介 二、模型訓練驗證保存 三、模型測試保存csv文件 四、單張圖片預測 五、模型評估 六、ONNX導出 七、ONNX推理 八、網絡結構與數據增強可視化 上篇我介紹了具體步驟&#xff0c;今天就以我實際開發的一個具體項目來講&#xff1a; 一、項目簡介 苯人的…

《AR眼鏡上聲學的應用與挑戰》

《2025GAS聲學大講堂—音頻產業創新技術公益講座》智能眼鏡專題講座第3講將于7月24日周四19點開講&#xff0c;本次邀請了 珠海莫界科技有限公司 高級算法工程師 胡立天 演講&#xff0c;講座主題&#xff1a;《AR眼鏡上聲學的應用與挑戰》&#xff08;點擊觀看直播&#xff09…

編譯支持cuda硬件加速的ffmpeg

本來以為很簡單&#xff0c;因為印象中自己在windows機器上使用過。 目前的實在一個docker環境下的ubuntu系統里。 官方操作文檔 按照官方操作文檔Using FFmpeg with NVIDIA GPU Hardware Acceleration - NVIDIA Docs的描述&#xff0c;步驟很簡單&#xff1a; 1、安裝nv-c…

在資源受限單片機中使用printf等可變參函數時的陷阱(2025年7月22日)

今天分享一個我最近在項目調試中遇到的“大坑”&#xff0c;這個坑來自一個我們既熟悉又依賴的朋友——printf函數。故事的主角&#xff0c;是一顆資源極其有限的STM32F030單片機&#xff0c;它只有區區4KB的RAM。 一切始于便利 項目初期&#xff0c;為了能方便地監控程序運行狀…

大數據之Hive:Hive中week相關的幾個函數

目錄1.dayofweek函數2.weekday函數3.weekofyear函數1.dayofweek函數 功能&#xff1a;統計某天為星期幾 dayofweek(date) - Returns the day of the week for date/timestamp (1 Sunday, 2 Monday, ..., 7 Saturday).dayofweek返回值為&#xff1a;1-7&#xff0c;1 星期…

基于深度學習Transform的steam游戲特征分析與可視化【詞云-情感詞典分析-主題分析-詞頻分析-關聯分析】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主一、項目背景與研究意義二、研究目標三、研究方法與實施流程第一階段&#xff1a;數據采集與預處理第二階段&#xff1a;多維度數據分析第三階段&#xff1a;綜合分析與策略建議輸出四、預期…

Qwen3-8B 與 ChatGPT-4o Mini 的 TTFT 性能對比與底層原理詳解

一、模型概述與上下文支持能力 1.1 Qwen3-8B 的技術特點 Qwen3-8B 是通義實驗室推出的 80 億參數大語言模型&#xff0c;支持 32,768 token 的上下文長度 。其核心優化點包括&#xff1a; FP8 量化技術&#xff1a;通過將權重從 32-bit 壓縮至 8-bit&#xff0c;顯著降低顯存…

recvmsg函數的用法

recvmsg 是 Linux 網絡編程中用于接收消息的高級系統調用&#xff0c;支持復雜數據結構和輔助數據的接收&#xff0c;適用于 TCP/UDP/UNIX 域套接字等場景?。以下是其核心用法詳解&#xff1a;?1. 函數原型與參數?#include <sys/socket.h> ssize_t recvmsg(int sockfd…