现场是这样的。用 accelerate launch 启动训练,日志里只有一个进程,显卡只有一张显存上涨,配置里明明选了多卡。
中间走过弯路,把「启动命令没带配置文件,用了默认值」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。配置里选成了单卡模式,参数没有落到文件;num_processes 与环境变量不一致;机器上可见设备被限制成一张。
先重新生成配置文件并确认选项
accelerate config
随后启动时显式指定进程数
accelerate launch --num_processes 4 train.py
接着确认配置文件里记录的设备数量
python -c "import json;print(json.load(open(os.path.expanduser('~/.cache/huggingface/accelerate/default_config.yaml'))))"
剩下的就是检查可见设备变量
python -c "import os;print(os.environ.get('CUDA_VISIBLE_DEVICES'))"
别只看报错消失,验证要多做一步。启动日志里出现四个进程,四张卡显存同时上涨,训练吞吐接近单卡的四倍。
这里还有个坑。配置文件是用户级的,换项目后很容易沿用上一次的设置,遇到只跑单卡先看默认配置而不是改代码。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。