如果 Sentence Transformers 库在训练或推理期间抛出 PyTorch CUDA 错误,问题通常源于 GPU 相关的配置或资源限制。这些错误常常是由于 CUDA/PyTorch 版本不匹配、GPU 内存不足或设备处理不当引起的。第一步是通过检查错误消息(例如,“CUDA out of memory” 与 “device-side assert triggered”)并验证您的环境设置来确定原因。
首先确认 CUDA 已正确配置。运行 torch.cuda.is_available()
以确保 PyTorch 检测到 GPU。如果返回 False
,请根据您的 GPU 版本重新安装支持 CUDA 的 PyTorch。例如,如果您的 GPU 支持 CUDA 11.8,通过 pip install torch==2.0.1+cu118
安装 PyTorch。接下来,检查内存问题:训练大型模型或使用高批量大小可能会耗尽 GPU 内存。减少批量大小(例如,使用 per_device_train_batch_size=16
而非 32)或使用混合精度(在 TrainingArguments
中设置 fp16=True
)。如果需要,在每个训练步骤后使用 torch.cuda.empty_cache()
释放缓存的内存。此外,确保在 GPU 训练期间数据不会意外地存储在 CPU 上——使用 .to('cuda')
显式地将张量移动到设备上。
如果版本不匹配问题持续存在,请验证 PyTorch、CUDA Toolkit 和 NVIDIA 驱动程序之间的兼容性。例如,PyTorch 2.0 需要 CUDA 11.7/11.8 以及驱动程序版本 ≥ 450.80.02。使用 nvidia-smi
检查驱动程序版本并在必要时更新。对于与设备相关的错误(例如,张量位于错误的设备上),请确保您的模型和数据位于同一设备上。一个常见的错误是在没有适当处理的情况下将 CPU 训练的检查点加载到 GPU 上——在推理之前使用 model.to('cuda')
。如果错误仍然存在,请使用最小示例(例如,一个微型模型和数据集)进行测试,以排除代码特定问题。调试 CUDA 错误通常需要迭代测试,但系统地隔离组件(硬件、驱动程序、代码)可以简化解决方案。