为什么,使用 Huggingface Trainer,单个 GPU 训练比 2 个 GPU 更快?
pytorch 411
原文标题 :Why, using Huggingface Trainer, single GPU training is faster than 2 GPUs?
我有一个带有 2 个 V100 的 VM,我正在使用 Huggingface 提供的非常好的 Trainer API 训练类似 gpt2 的模型(相同的架构,更少的层)。我正在使用 pytorch 后端。
我观察到,当我使用完全相同的数据和 TrainingArguments 训练完全相同的模型(6 层,~82M 参数)时,在单个 GPU 上的训练比在 2 个 GPU 上的训练要快得多:~5hrs vs ~6.5hrs。
如何调试此类问题以了解导致减速的原因?
额外说明:
- 2 gpus 都在使用(观看 nvidia-smi 输出)
- 我正在使用 fp16 精度
- 我的 TrainingArguments 值为:
{
"optim": "adamw_torch",
"evaluation_strategy": "epoch",
"save_strategy": "epoch",
"fp16": true,
"gradient_checkpointing": true,
"per_device_train_batch_size": 16,
"per_device_eval_batch_size": 16,
"dataloader_num_workers": 4,
"dataloader_pin_memory": true,
"gradient_accumulation_steps": 1,
"num_train_epochs": 5
}
nvidia-smi topo -m
的输出为:
$ nvidia-smi topo -m
GPU0 GPU1 CPU Affinity NUMA Affinity
GPU0 X SYS 0-11 N/A
GPU1 SYS X 0-11 N/A
我知道如果没有 NVLink,gpu 间的通信就不会那么快,但这会是像我观察到的那样减速的唯一原因吗?如果是这样,我能做些什么吗?或者我在 2GPU 上的训练时间总是会变慢(从而使多 GPU 训练基本上没用)?