您的当前位置:首页正文

RTX 4000 series doesn‘t support faster communication broadband via P2P or IB.分布式报错

2024-11-13 来源:个人技术集锦

使用分布式训练在RTX40系显卡报错:NotImplementedError: Using RTX 4000 series doesn’t support faster communication broadband via P2P or IB. Please set NCCL_P2P_DISABLE=“1” and NCCL_IB_DISABLE=“1” or use accelerate launch which will do this automatically.

表示 GPU 不支持某些高效的通信模式(P2P 和 InfiniBand)。

解决方案:

第一种:
在运行你的 Python 脚本之前手动设置环境变量来禁用这些通信模式,用命令行设置环境变量:

export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1

然后在启动代码

也可以直接加载NCCL_P2P_DISABLE=1 NCCL_IB_DISABLE=1 python xx.py

如果在debug调试可以配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "env": {
                "CUDA_VISIBLE_DEVICES": "1,2",
                "NPROC_PER_NODE": "2",
                "MASTER_PORT": "29500",
                "NCCL_P2P_DISABLE": "1",
                "NCCL_IB_DISABLE": "1"
            },
            "args": [
                "--rlhf_type", "dpo",
                "--model_type", "qwen2-0_5b-instruct",
                ]
            }
        }

第二种:

accelerate launch 可以自动设置这些环境变量。你只需要通过 accelerate 启动命令
例如accelerate launch --multi_gpu --num_processes 2 --num_machines 1 xx.py
或accelerate launch --config_file xx.yaml xx.py


补充:

那么deepspeed启动和torchrun启动和accelerate launch这种分布式框架有啥区别?

1、deepspeed step2.py --deepspeed:直接使用 deepspeed 命令来启动训练脚本会自动处理了很多底层的配置。是微软开发的一个深度学习优化库,最经典就是ZeRO 优化
2、torchrun --nnodes 1 --nproc_per_node 1 sft.py --deepspeed ds_config.json:是 PyTorch 提供的分布式启动工具,更灵活可以直接控制 --nnodes 和 --nproc_per_node,是对 torch.distributed.launch 的改进和替代。并且不仅限于 DeepSpeed,还可以与其他分布式策略如DDP结合。
3、accelerate launch --multi_gpu --num_processes 2 dpo_train.py: Accelerate 是 Hugging Face 提供的一个高级封装工具,它将复杂的分布式训练配置简化为一个配置文件(或命令行选项),用户无需深入了解底层实现即可轻松启动分布式训练任务

Top