银河麒麟系统中CUDA进程强制终止后显存被残留GPU上下文锁定,需用fuser -v /dev/nvidia*定位隐藏进程,再通过管道命令批量清理;若fuser无输出则非进程占用,仅显示systemd/kthreadd属正常。

银河麒麟系统在运行TensorFlow、PyTorch等CUDA程序后,若强行终止进程,显存常被残留的GPU上下文锁定,top和ps均无法显示对应进程,导致新任务报错“out of memory”或“device-side assert triggered”。
定位隐藏的GPU占用进程
打开终端(Ctrl+Alt+T)→输入 su 并回车→输入 root 密码获取管理员权限。
执行 fuser -v /dev/nvidia*,该命令会列出所有正在访问 NVIDIA 设备节点的进程 PID、用户、命令名及访问类型(如 M 表示内存映射),这是唯一能暴露 GPU 隐形占用的权威方式。
注意:若输出为空,说明无残留进程,问题可能出在驱动未加载或 CUDA 上下文未初始化;若只显示 systemd 或 kthreadd,属内核线程正常行为,不可 kill。
批量清理残留GPU进程
方法一:管道式一键清理(推荐)
执行以下命令:sudofuser -v /dev/nvidia* | awk '{for(i=1;i
这条命令自动提取 fuser 输出中纯数字的 PID 列,过滤掉表头和非进程字段,再逐个发送 SIGKILL——比手动复制粘贴快且零遗漏。
方法二:按用户精准清理
若只想清空某用户(如 kylin)的 GPU 占用,先执行 fuser -v /dev/nvidia* | grep kylin,再对每行末尾的 PID 手动执行 kill -9 PID。此法避免误杀其他用户正在训练的模型。
验证显存是否释放
第一步:执行 nvidia-smi,观察右上角 “Used” 数值是否归零或回落至基础驱动占用(通常<100MB)。
第二步:若仍显示高占用,检查是否存在僵尸 CUDA 上下文——执行 nvidia-smi --gpu-reset -i 0(假设仅单卡,ID为0),该操作会硬重置 GPU,【会中断当前所有GPU计算任务】,仅在 kill 无效时启用。
第三步:重启 nvidia-persistenced 服务以恢复持久化模式:systemctl restart nvidia-persistenced,否则下次开机显存可能再次异常锁定。

















