You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DDP训练CoDi模型时遇Default process group未初始化错误求助

解决CoDi模型DDP训练进程组未初始化错误

这个错误的核心是DDP的分布式进程组没有被正确初始化,以下是针对性的排查和修复步骤:

1. 修正分布式启动脚本(ddp_train.sh)

必须使用PyTorch官方推荐的分布式启动器启动训练,不能直接用python train.py。修改你的ddp_train.sh为如下格式:

#!/bin/bash
# 指定可用GPU,根据实际GPU数量调整
export CUDA_VISIBLE_DEVICES=0,1,2,3
# 启动分布式训练,nproc_per_node等于单节点GPU数量
torchrun --nproc_per_node=4 train.py

如果使用较旧的PyTorch启动方式,也可以替换为:

python -m torch.distributed.launch --nproc_per_node=4 train.py

2. 确保train.py中正确初始化进程组

在训练代码的最开始(模型初始化前)必须调用进程组初始化逻辑,同时处理好GPU设备分配:

import os
import torch
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP

def main():
    # 初始化分布式进程组,GPU场景下用nccl后端
    dist.init_process_group(backend="nccl")
    # 获取本地rank并设置当前设备
    local_rank = int(os.environ["LOCAL_RANK"])
    torch.cuda.set_device(local_rank)

    # 初始化你修改后的CoDi模型(已移除图像视频模块)
    model = YourModifiedCoDiModel()
    model = model.cuda(local_rank)
    # 用DDP包装模型
    model = DDP(model, device_ids=[local_rank])

    # 后续的数据加载、训练循环逻辑...
    # 注意数据加载需使用DistributedSampler保证每个进程拿到不同的数据分片

    # 训练结束后销毁进程组
    dist.destroy_process_group()

if __name__ == "__main__":
    main()

重点:dist.init_process_group必须在任何CUDA操作或模型初始化之前执行,否则会导致初始化失败。

3. 排查环境与依赖问题

  • 检查NCCL通信是否正常:可以运行PyTorch自带的NCCL测试脚本,确认GPU之间能正常通信。
  • 确保所有进程的工作目录一致,避免因相对路径问题导致配置、数据加载异常,间接影响进程组初始化。

4. 针对CoDi修改的额外检查

因为你移除了图像和视频模块,要确认:

  • 模型的所有参数都正确迁移到了指定GPU上,没有残留的多模态模块参数导致设备不匹配。
  • 原CoDi代码中与DDP相关的逻辑(比如分布式采样器、梯度同步)没有被误删。

内容的提问来源于stack exchange,提问作者NakataKoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:17:20