训练LayoutLMv3时触发RuntimeError: cuDNN内部错误求助
LayoutLMv3多GPU训练cuDNN内部错误排查方案
问题场景
使用4张V100 GPU训练最新版本LayoutLMv3,执行trainer.train()时触发如下错误:
RuntimeError Traceback (most recent call last) /tmp/ipykernel_31278/4032920361.py in <module> ----> 1 trainer.train() /data/anaconda3/envs/my_env/lib/python3.7/site-packages/transformers/trainer.py in train(self, resume_from_checkpoint, trial, ignore_keys_for_eval, **kwargs) 1417 resume_from_checkpoint=resume_from_checkpoint, 1418 trial=trial, -> 1419 ignore_keys_for_eval=ignore_keys_for_eval, 1420 ) 1421 /data/anaconda3/envs/my_env/lib/python3.7/site-packages/transformers/trainer.py in _inner_training_loop(self, batch_size, args, resume_from_checkpoint, trial, ignore_keys_for_eval) 1655 tr_loss_step = self.training_step(model, inputs) 1656 else: -> 1657 tr_loss_step = self.training_step(model, inputs) 1658 1659 if ( /data/anaconda3/envs/my_env/lib/python3.7/site-packages/transformers/trainer.py in training_step(self, model, inputs) 2348 2349 with self.compute_loss_context_manager(): -> 2350 loss = self.compute_loss(model, inputs) 2351 2352 if self.args.n_gpu > 1: ... return self._conv_forward(input, self.weight, self.bias) File "/data/anaconda3/envs/my_env/lib/python3.7/site-packages/torch/nn/modules/conv.py", line 443, in _conv_forward self.padding, self.dilation, self.groups) RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
解决步骤
- 版本兼容性检查:确认PyTorch与cuDNN版本匹配,V100适配CUDA 11.x,建议搭配PyTorch 1.12+和cuDNN 8.2+,版本不匹配是这类错误的常见诱因。
- 调整batch size:多GPU训练时单卡batch过大可能超出cuDNN处理阈值,尝试将
per_device_train_batch_size减半,比如从16降至8。 - 禁用cuDNN自动调优:在训练代码开头添加
torch.backends.cudnn.benchmark = False,避免cuDNN选择不兼容的卷积优化算法。 - 清理GPU缓存:启动训练前执行
torch.cuda.empty_cache(),释放GPU中残留的无效显存。 - 校验输入数据:检查输入张量的维度、数据类型(需为float32)是否符合LayoutLMv3要求,异常数据会导致卷积层触发内部错误。
- 单GPU验证:先使用单张V100启动训练,确认模型和数据无问题后再扩展到4卡,排除分布式训练配置的潜在问题。
内容的提问来源于stack exchange,提问作者rusubbiz muzkaq
相关产品推荐
相关产品推荐

