当前位置: 首页 > news >正文

【推荐系统】深度学习训练框架(一):深入剖析Spark集群计算中Master与Pytorch分布式计算Master的区别

Master地址和端口:Driver vs Executor

问题的核心

在Spark cluster模式下,有两个层面的"master":

  1. Spark的Driver(主节点)
  2. DDP的Master进程

它们完全不同

两套Master系统

1. Spark的Driver(与我们的DDP无关)

Spark集群架构:
┌─────────────────────────────────────────────┐
│ Driver (主节点)                             │
│ - 运行在集群的某个节点上                    │
│ - IP: 192.168.1.100                         │
│ - 负责提交任务和管理资源                    │
│ - 与Executor通信                            │
└─────────────────────────────────────────────┘↓ (提交任务)
┌─────────────────────────────────────────────┐
│ Executor (工作节点)                         │
│ - 动态分配到集群                           │
│ - IP: 10.0.0.5 (每次可能不同)              │
│ - 执行具体的训练任务                       │
└─────────────────────────────────────────────┘

2. DDP的Master(我们当前配置的)

Executor内部(Executor IP = 10.0.0.5):
┌─────────────────────────────────────────────┐
│ torchrun Master                            │
│ - 运行在Executor内部                       │
│ - 地址: localhost                          │
│ - 端口: 23456                              │
│ - 协调DDP进程间的通信                      │
└─────────────────────────────────────────────┘↓ (DDP通信)
┌─────────────────────────────────────────────┐
│ Process 0 (rank 0) ←─┐                    │
│ Process 1 (rank 1) ←─┼──→ 连接到           │
│ Process 2 (rank 2) ←─┤    localhost:23456  │
│ Process 3 (rank 3) ←─┘                    │
└─────────────────────────────────────────────┘

关键答案

master_addrmaster_port是指Executor内部的DDP Master,与Spark Driver无关!

详细解释

Spark架构(Driver-Executor通信)

Driver (主节点)
├─ 功能:提交任务、管理资源、收集结果
├─ 通信:与Executor通过Spark RPC通信
└─ 地址:由Spark自动管理,我们不需要关心↓
Executor (工作节点)
├─ 功能:执行任务
├─ 通信:接收Driver的命令,发送结果给Driver
└─ 地址:动态分配,我们不需要知道

DDP架构(进程间通信)

Executor内部(只有这里用master_addr/master_port)
├─ torchrun启动Master进程
│  └─ 监听 localhost:23456
├─ Process 0 连接 localhost:23456
├─ Process 1 连接 localhost:23456
├─ Process 2 连接 localhost:23456
└─ Process 3 连接 localhost:23456

关键点

  • master_addr = localhost(Executor内部的地址)
  • master_port = 23456(Executor内部的端口)
  • 与Driver无关
  • 与Executor的外部IP无关

为什么使用localhost?

层级结构

┌─────────────────────────────────────────┐
│ Spark Driver                            │
│ - 管理整个Spark应用                     │
│ - 不参与DDP训练                         │
└──────────┬──────────────────────────────┘│ Spark提交任务↓
┌─────────────────────────────────────────┐
│ Executor (独立容器)                     │
│ IP: 10.0.0.5 (外部)                    │
│                                         │
│  ┌─────────────────────────────────┐   │
│  │ DDP Master (torchrun)          │   │
│  │ 监听: localhost:23456          │   │
│  │                                 │   │
│  │ ┌─────────┐                    │   │
│  │ │ Process │ ←─连接到localhost   │   │
│  │ │  0-3    │   :23456           │   │
│  │ └─────────┘                    │   │
│  └─────────────────────────────────┘   │
│                                         │
│  所有DDP通信在Executor内部进行         │
│  使用localhost,不涉及外部网络         │
└─────────────────────────────────────────┘

localhost的作用域

Executor外部:
├─ Spark集群看到 Executor IP = 10.0.0.5
└─ 但与DDP无关Executor内部:
├─ DDP使用 localhost (127.0.0.1)
├─ 所有进程在同一台机器上
└─ 通过本地回环接口通信

配置的位置

当前配置分析

# spark_train_ddp_wrapper.py
# 这个脚本运行在哪里?→ Executor上!def main():# 在Executor上运行的代码torchrun_cmd = ['--master_addr', 'localhost',    # Executor内部地址'--master_port', '23456',       # Executor内部端口]

运行位置

  1. Spark将spark_train_ddp_wrapper.py提交到Executor
  2. 脚本在Executor上执行
  3. master_addr和master_port用于Executor内部的DDP通信
  4. 与Driver完全无关

执行流程

完整的执行链路

┌──────────────────────────────┐
│ 你在本地机器上               │
│ $ ./spark_submit_hourly_ddp.sh
└──────────┬───────────────────┘↓ spark-submit提交
┌──────────────────────────────┐
│ Spark Driver                 │
│ (某个节点的192.168.1.100)    │
│ - 接收任务                   │
│ - 分配资源                   │
│ - 提交到Executor             │
│ - (不参与DDP训练)            │
└──────────┬───────────────────┘↓ 分配给Executor
┌──────────────────────────────┐
│ Executor                     │
│ (随机IP,如10.0.0.5)         │
│ - 运行spark_train_ddp_       │
│   wrapper.py                 │
│                              │
│  torchrun启动DDP:           │
│  ├─ Master监听               │
│  │   localhost:23456         │
│  ├─ Process 0 → localhost:   │
│  │   23456                   │
│  ├─ Process 1 → localhost:   │
│  │   23456                   │
│  ├─ Process 2 → localhost:   │
│  │   23456                   │
│  └─ Process 3 → localhost:   │
│      23456                   │
│                              │
│  所有通信在Executor内部!     │
└──────────────────────────────┘

关键区别

Driver的Master vs DDP的Master

类别Spark Driver MasterDDP Master
作用管理Spark任务协调DDP进程
地址Spark集群管理localhost
端口Spark默认(7077)23456(我们指定)
运行位置集群的某个节点Executor内部
是否需要知道不需要(Spark管理)需要(我们配置)

网络通信

Spark通信(Driver ↔ Executor):
┌──────────┐                      ┌──────────┐
│ Driver   │ ←── Spark RPC ──→   │ Executor │
│ IP: X.X  │                      │ IP: Y.Y  │
└──────────┘                      └──────────┘DDP通信(Executor内部的进程间):┌───────────┐│ Process 0 │└────┬──────┘│┌────────────┼────────────┐│            │            │↓            ↓            ↓
┌───────────┐            ┌───────────┐
│ DDP Master│ ←─────────→│ Process 1 │
│ localhost │            └───────────┘
│   :23456  │                  │
└───────────┘                  ││                         │└────────────┬────────────┘│┌───────────┐│ Process 2 │└───────────┘│┌───────────┐│ Process 3 │└───────────┘

总结

答案

master_addrmaster_port是指Executor内部的DDP Master,与Driver无关!

具体说明

  1. Spark Driver的Master

    • ❌ 不是我们配置的
    • ✅ 由Spark自动管理
    • ✅ 我们不需要关心
  2. DDP的Master(我们配置的)

    • ✅ 运行在Executor内部
    • ✅ 地址:localhost(Executor内部)
    • ✅ 端口:23456(Executor内部)
    • ✅ 用于DDP进程间通信

当前配置是正确的

'--master_addr', 'localhost',   # ✅ Executor内部的地址
'--master_port', '23456',       # ✅ Executor内部的端口

因为

  • 所有DDP进程在Executor内部
  • 使用localhost通信(本地回环)
  • 不需要知道Executor的外部IP
  • 不需要知道Driver的IP

常见误解

❌ 误解1:master_addr应该填Executor的IP

# 错误理解
'--master_addr', '10.0.0.5',  # Executor的IP

为什么错误

  • DDP进程在同一executor上
  • 通过localhost通信即可
  • 不需要外部IP

❌ 误解2:master_addr应该填Driver的IP

# 错误理解
'--master_addr', '192.168.1.100',  # Driver的IP

为什么错误

  • Driver不参与DDP训练
  • DDP的Master在Executor上运行
  • 使用localhost即可

✅ 正确理解:使用localhost

# 正确配置
'--master_addr', 'localhost',  # Executor内部的本地地址

为什么正确

  • 所有DDP进程在同一executor上
  • 使用本地回环接口通信
  • 简单且可靠

实际操作

查看配置的地方

  1. spark_train_ddp_wrapper.py(在Executor上运行)

    torchrun_cmd = ['--master_addr', 'localhost',    # ← 这里'--master_port', '23456',       # ← 这里
    ]
    

    ✅ 这些配置用于Executor内部的DDP通信

  2. spark_submit_hourly_ddp.sh(在本机运行)

    spark-submit \--master yarn \              # ← 这是Spark的Master--deploy-mode cluster \spark_train_ddp_wrapper.py
    

    ✅ 这是Spark的配置,与DDP无关

重要区别

配置位置作用
--master yarnspark-submitSpark的Master
--master_addr localhosttorchrunDDP的Master
--master_port 23456torchrunDDP的Master端口

它们是两套独立的系统!

http://www.dtcms.com/a/544720.html

相关文章:

  • PyTorch CV模型实战全流程(二)
  • i2s封装成自己定义8路音频数据发送方法
  • 读取指定文件夹中所有CSV文件,并解析内容
  • Docker镜像仓库的深度解析与实战指南
  • 推广网站怎么做模板网站关键词搜索优化怎么做
  • 展会画册、名片、书籍企业信息识别非结构化数据处理痛点突破:旗讯 OCR 技术解析与企业系统集成方案
  • 网站建设青雀wordpress游戏主题下载
  • 国内做网站网站代理建网站教程视频下载
  • 《边缘安全深耕:零信任落地全维度解析》
  • 【穿越Effective C++】条款8:别让异常逃离析构函数——C++异常安全的关键支柱
  • 深入仓颉(Cangjie)编程语言:if/else——从“流程控制”到“安全表达式”的进化
  • Java 转义字符全解析:从基础语法到安全编码实践
  • Rust:异步编程与并发安全的深度实践
  • 6.机器学习性能评估与决策树算法
  • 网络公司网站策划书免费网站建设绑定域名
  • Java 泛型详解:类型参数的力量
  • 基于python大数据的井盖监控系统的设计与开发
  • 记一次ThreadLocal导致的生产事故
  • Rust 入门基础:安全、并发与高性能的系统编程语言
  • PyCharm + 远程调试路径映射总结(以 diffusers 为例)
  • HTML常用特殊字符
  • 手机网站设计公司哪家好保定网站设计
  • 网站建设焦作合肥做网站的的公司有哪些
  • Rust HashSet 与 BTreeSet深度剖析
  • Java二分算法题目练习
  • AI工具赋能需求管理 Jira
  • PostgreSQL 六大索引
  • 2025年--Lc224--100. 相同的树(递归,dfs,带测试用例)-Java版
  • Python打造美观的桌面温馨提醒弹窗
  • 北京网站制作建设太原it培训机构