Clo*_*One 5 python gpu pytorch huggingface-transformers
我有一个带有 2 个 V100 的虚拟机,我正在使用 Huggingface 的非常好的 Trainer API 来训练类似 gpt2 的模型(相同的架构,更少的层)。我正在使用 pytorch 后端。
我观察到,当我使用完全相同的数据和 TrainingArguments 训练完全相同的模型(6 层,约 82M 参数)时,在单个 GPU 上的训练速度明显快于 2GPU:约 5 小时 vs 约 6.5 小时。
如何调试此类问题以了解导致速度下降的原因?
额外说明:
{
"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
}
Run Code Online (Sandbox Code Playgroud)
的输出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
Run Code Online (Sandbox Code Playgroud)
我知道,如果没有 NVLink,GPU 间通信的速度就不会那么快,但这是否是导致像我观察到的那样缓慢的唯一原因?如果是这样,我能做些什么吗?或者我在 2GPU 上的训练时间总是会变慢(从而使多 GPU 训练基本上毫无用处)?
将此保留在这里以供参考。原因是 "gradient_checkpointing": true,
。梯度检查点引起的速度下降在 2 个 GPU 上似乎比在单个 GPU 上更大。我真的不知道这个问题的原因,如果有人知道我会非常感激有人告诉我。