现象
在使用 transformers 中的 Trainer 进行模型训练时,发现程序一直卡着,没有进入模型的 forward 函数。
日志中出现这句(内核版本太低可能导致进程挂起):
Detected kernel version 5.4.0, which is below the recommended minimum of 5.5.0; this can cause the process to hang. It is recommended to upgrade the kernel to the minimum version or higher.
一开始以为这个只是一个普通的 warning,没想到这就是问题所在。
环境
系统:Ubuntu 18.04.6 LTS
内核:5.4.0-149-generic
torch:2.2.1+cu121
transformers:4.44.2
问题排查与解决
- 该程序代码之前在一台 Windows 11 上正常运行过,该 Windows 11 中的 torch、cuda 版本与出现问题的 Ubuntu 有所不同;
- 参考上面的日志,判断该问题与代码本身无关,与软件版本有关;
- 在网上找到有类似案例,参考这个评论,有可能是使用多块GPU并行运算的原因;
- 然后尝试在代码开头加上
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
,以指定程序仅能使用第一块显卡(指定第2、3…块显卡也可以),发现上述问题确实解决了; - 但对于确实需要用多块显卡的程序,这种做法并没有解决实际问题,或许真的需要更新系统内核,不知道降低 transformers 的版本是否有用;
由于我的程序所需显存较小,一块就够用,所以没有接着探索,如果你其它解决方案,欢迎在评论区告知我,感谢。
还有个小插曲
- 一开始我把
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
放在import torch
等 import 语句之后,发现程序运行时仍是同时使用多块显卡,也就是该命令并未起效; - 询问 ChatGPT,得知该命令需要在 GPU 调用前使用,修改后确实有效: