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: 主节点 IPMASTER_PORT: 进程间通信端口
当使用 torchrun 或 torch.distributed.launch 运行时,这些变量会自动设置。但在 PyCharm 本地调试 时,这些变量不会自动传递,所以 PyTorch 会报 RANK expected, but not set 错误。
解决方案
方法 1:手动设置环境变量
在 PyCharm 里设置 RANK 相关变量:
打开 PyCharm,进入 Run/Debug Configurations
选择你的调试脚本(比如
main.py)找到 Environment variables(环境变量)
添加以下环境变量:
1
2
3
4
5RANK=0
WORLD_SIZE=1
LOCAL_RANK=0
MASTER_ADDR=127.0.0.1
MASTER_PORT=29500保存后运行 Debug
这样 PyTorch 会认为它是单机单进程模式,不会去找其他进程,也不会报错。
方法 2:代码里手动设置
如果不想改 PyCharm 设置,可以直接在 Python 代码里设置环境变量:
1 | |
这样即使本地单进程运行,torch.distributed 也不会报错。
方法 3:使用 torchrun 运行
如果你希望保持分布式运行方式(而非单机单进程调试),可以用 torchrun 在本地启动:
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。



