1. 常规做法
通过环境变量指定端口。
export MASTER_PORT=$MASTER_PORT
2. 多进程通信导致的问题
有时候,即使单卡训练任务,也指定了MASTER_PORT,可还是出现这种报错。我数了一下报错信息中"Address already in use"的出现次数,居然等于我在dataloader里面指定的num_workers数值。所以怀疑是多线程/进程通信问题。GPT4告诉我说也有可能是加载远程网盘数据在multi-workers情况下出现端口占用问题。解决办法很简单,加上一个参数即可“--dist-url auto”。
python xxx.py --dist-url auto [--other_options]
Happy Coding!