我有一个业务需求,需要在同一进程中利用多个深度学习框架依次训练一个模型结构队列中的模型,目前涉及:tensorflow、torch和jittor,物理设备为总内存约20G的双GPU,cuda11.2。实际运行中,程序进行一开始并不会出现任何问题,但一般在程序进行约1h后,jittor会率先报错,然后引起其他框架的报错,同时使得当前进程因等待显卡消息陷入S态,无法中断或杀死,目前仅能通过reboot服务器关闭进程,报错信息如截图所示:
具体问题分析细节将会跟帖说明。
我有一个业务需求,需要在同一进程中利用多个深度学习框架依次训练一个模型结构队列中的模型,目前涉及:tensorflow、torch和jittor,物理设备为总内存约20G的双GPU,cuda11.2。实际运行中,程序进行一开始并不会出现任何问题,但一般在程序进行约1h后,jittor会率先报错,然后引起其他框架的报错,同时使得当前进程因等待显卡消息陷入S态,无法中断或杀死,目前仅能通过reboot服务器关闭进程,报错信息如截图所示:
首先,基本确定是jittor框架的问题,原因如下:
谢谢您的反馈,这个原因主要是jittor使用的是统一内存而不是设备内存,在设备内存不足的时候会导致出现illegal address的错误,为了规避这一点,您可以强制jittor使用设备内存,设置环境变量use_cuda_managed_allocator=0即可,另外建议您更新到最新版本的jittor
这种难以挽回的s态,主要是因为卡在cuda驱动层面,jittor框架很难直接控制
您好,谢谢您的答复,已解决我的疑问,现已基本理解jittor总体上的内存管理及配置方案:
use_cuda_managed_allocator=1时,采用统一内存管理,内存溢出可能会出现难以控制的S态
use_cuda_managed_allocator=0时,采用设备管理,类似tf的非贪婪式,可通过环境变量指定设备,内存溢出不会出现上述情况