解决Linux Nvidia并行任务强行终止后kill不死进程 您所在的位置:网站首页 linux中如何杀掉一个任务 解决Linux Nvidia并行任务强行终止后kill不死进程

解决Linux Nvidia并行任务强行终止后kill不死进程

#解决Linux Nvidia并行任务强行终止后kill不死进程| 来源: 网络整理| 查看: 265

kill杀死程序流程 检查GPU进程nvidia-smi 单卡任务kill指令kill -GPU索引号 -PID 多卡任务kill指令fuser -v /dev/nvidia*kill -PID 小结 最近在学习Pytorch的DistributedDataParallel API进行多GPU并行计算的实现,并行虽好,但是一旦代码有bug手动强行终止运行,经常出现部分进程还没终止的现象,还在后台运行占用资源,必须手动杀死进程。然而kill进程却没那么顺利,有些进程怎么也杀不死,看了好些方法都没用,最后自己摸索了出来,特此记录一下这个坑。 由于服务器上不是所有用户都有根权限,所以指令可能无效。如果出现无效的情况,加上根权限即可

sudo 你的指令 检查GPU进程 nvidia-smi

强行终止代码运行后查看一下GPU运行情况,看看各个GPU的负载和进程

nvidia-smi

在这里插入图片描述 可以看到GPU0和GPU2上都有进程,其中PID为8545和10632的进程是torch运行产生的,而且GPU0利用率达到了100%

单卡任务kill指令 kill -GPU索引号 -PID

尝试使用指定GPU索引号和PID的指令杀死进程,无效,进程还在

kill -GPU -PID 多卡任务kill指令 fuser -v /dev/nvidia* sudo fuser -v /dev/nvidia*

查看nvidia上所有进程的详细信息 在这里插入图片描述 发现进程号PID为8545、10632的进程居然在8个GPU上都存在,而nvidia-smi显示只在GPU0或者2上。这就很容易理解了,前面单卡杀进程指令指定了GPU,但是这个PID的进程在所有GPU上运行着,自然杀不死,也就是说我被nvidia-smi的进程信息误导了。我灵机一动,既然进程在所有GPU上,不指定GPU,只指定PID会怎么样呢?

kill -PID sudo kill -PID

重要补充!!!若sudo kill 无效,尝试加上-9,即

sudo kill -9 -PID

手动地一个一个的输入上面的两个进程 在这里插入图片描述

再次查看进程信息 在这里插入图片描述 在这里插入图片描述 发现我的账号(brian)的进程全部都被终止了,可以说是极度舒服了,我都快要哭出来了2333

小结 对于在单卡上的任务,可直接使用kill -GPU -PID杀掉进程若使用单卡杀进程指令杀不死进程,fuser -v /dev/nvidia*检查PID号进程是否在多个GPU上运行若2==True则使用kill -PID杀死在多个GPU上同时运行的进程nvidia-smi信息不全,fuser -v /dev/nvidia*查看进程更准若指令无效加上根权限sudo,建议指令前加根权限


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有