使用分布式训练在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 提供的一个高级封装工具,它将复杂的分布式训练配置简化为一个配置文件(或命令行选项),用户无需深入了解底层实现即可轻松启动分布式训练任务