Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

  • 知识蒸馏

  • PEFT

  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

  • 集成学习

  • Mamba

  • PyTorch

    • PyTorch概述

    • Tensors

    • 数据处理

    • 模型

    • 训练

    • 并行计算

    • 可视化

    • 实战

    • timm

    • Pytorch Lightning

    • 数据增强

    • 面经与bug解决

      • model
      • Pytorch中的多个loss和的梯度回传
      • DDP
        • 为什么会发生这个错误?
        • 解决方案
          • 方法 1:手动设置环境变量
          • 方法 2:代码里手动设置
          • 方法 3:使用 `torchrun` 运行
        • 总结
    • 常用代码片段

    • Reference
  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

  • 深度学习调参指南

  • AINotes
  • PyTorch
  • 面经与bug解决
Geeks_Z
2025-03-11
目录

DDP

ValueError: Error initializing torch.distributed using env:// rendezvous: environment variable RANK expected, but not set 本地pycharm debug报错,该如何修改

这个错误是因为在 本地 PyCharm 调试 分布式训练代码时,没有正确设置环境变量,导致 torch.distributed 无法找到 RANK 变量。


为什么会发生这个错误?

在使用 torch.distributed 进行多 GPU 训练时,PyTorch 需要一些环境变量来确定进程的分布式信息:

  • RANK: 当前进程的编号(进程 ID)
  • WORLD_SIZE: 进程总数
  • LOCAL_RANK: 当前进程在本节点的编号(用于 GPU 绑定)
  • MASTER_ADDR: 主节点 IP
  • MASTER_PORT: 进程间通信端口

当使用 torchrun 或 torch.distributed.launch 运行时,这些变量会自动设置。但在 PyCharm 本地调试 时,这些变量不会自动传递,所以 PyTorch 会报 RANK expected, but not set 错误。


解决方案

方法 1:手动设置环境变量

在 PyCharm 里设置 RANK 相关变量:

  1. 打开 PyCharm,进入 Run/Debug Configurations

  2. 选择你的调试脚本(比如 main.py)

  3. 找到 Environment variables(环境变量)

  4. 添加以下环境变量:

    RANK=0
    WORLD_SIZE=1
    LOCAL_RANK=0
    MASTER_ADDR=127.0.0.1
    MASTER_PORT=29500
    
    1
    2
    3
    4
    5
  5. 保存后运行 Debug

这样 PyTorch 会认为它是单机单进程模式,不会去找其他进程,也不会报错。


方法 2:代码里手动设置

如果不想改 PyCharm 设置,可以直接在 Python 代码里设置环境变量:

import os
import torch
import torch.distributed as dist

# 手动设置分布式环境变量(仅用于 Debug)
os.environ["RANK"] = "0"
os.environ["WORLD_SIZE"] = "1"
os.environ["LOCAL_RANK"] = "0"
os.environ["MASTER_ADDR"] = "127.0.0.1"
os.environ["MASTER_PORT"] = "29500"

# 初始化分布式训练
dist.init_process_group(backend="nccl")
1
2
3
4
5
6
7
8
9
10
11
12
13

这样即使本地单进程运行,torch.distributed 也不会报错。


方法 3:使用 torchrun 运行

如果你希望保持分布式运行方式(而非单机单进程调试),可以用 torchrun 在本地启动:

torchrun --nproc_per_node=1 main.py
1

这样 torchrun 会自动设置 RANK 变量,并且 PyTorch 不会报错。


总结

解决方案 适用场景 操作方式
方法 1:手动设置环境变量 PyCharm 本地 Debug PyCharm 里设置 RANK=0, WORLD_SIZE=1
方法 2:代码里 os.environ 设置 代码可修改,方便 Debug 在 Python 代码里手动写入 os.environ
方法 3:用 torchrun 运行 仍然希望保持分布式运行 终端运行 torchrun --nproc_per_node=1 main.py

对于 PyCharm 本地调试,推荐 方法 1 或 2。如果要 模拟多 GPU 运行,可以尝试 方法 3。

上次更新: 2025/06/25, 11:25:50
Pytorch中的多个loss和的梯度回传
参数相关

← Pytorch中的多个loss和的梯度回传 参数相关→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式