GPU调试

在 Linux 系统中,查询运行在某个特定 GPU 上的进程主要有以下几种方法,最常用的是 NVIDIA 官方提供的工具。

1. 使用 nvidia-smi (最常用)

这是最直接的方法。在终端输入以下命令:

bash 复制代码
nvidia-smi

如何查看:

  1. 在输出的上半部分,你会看到 GPU 的列表(ID 从 0 开始)。
  2. 往下看,找到 "Processes"(进程)表格。
  3. 关键列:
    • GPU UUID / GPU: 标识该进程运行在哪个 GPU 上。
    • PID: 进程 ID。
    • Type: 通常是 C (Compute 计算进程,如 Python/PyTorch) 或 G (Graphics 图形进程)。
    • Process Name: 进程名称。

只显示特定 GPU 的进程:

如果你只想看 GPU 0 上的进程,可以使用:

bash 复制代码
nvidia-smi --query-compute-apps=gpu_uuid,pid,process_name,used_memory --format=csv -i 0

2. 使用 fuser 查询设备文件

GPU 在 Linux 中被视为设备文件。你可以通过查询这些文件的使用者来找到进程。

步骤:

  1. 查看哪些进程占用了 /dev/nvidia* 设备:

    bash 复制代码
    sudo fuser -v /dev/nvidia*
  2. 输出解读:

    • 列表会显示 PID。
    • 通常 /dev/nvidia0 对应 GPU 0,/dev/nvidia1 对应 GPU 1,以此类推。

3. 结合 psnvidia-smi 进行关联查询

如果你通过 nvidia-smi 看到了 PID,想进一步查看这个 PID 具体是什么任务(例如是哪个 Python 脚本),可以使用 ps 命令。

查询特定 PID 的详细信息:

bash 复制代码
ps -fp <PID>

或者

bash 复制代码
ps aux | grep <PID>

批量查询(高级用法):

你可以编写一行命令,直接列出 GPU 进程及其对应的命令行参数:

bash 复制代码
# 先获取所有 GPU 进程的 PID,然后查询这些 PID 的详细信息
nvidia-smi --query-compute-apps=pid --format=csv,noheader,nounits | xargs -I {} ps -p {} -o pid,ppid,cmd,%mem,%cpu --sort=-%mem

4. 使用 gpustat (第三方工具,更美观)

如果你安装了 gpustat (可以通过 pip install gpustat 安装),它提供了一个更简洁的界面。

安装与使用:

bash 复制代码
pip install gpustat
gpustat -cp

输出特点:

  • -c 参数显示命令名(Command)。
  • -p 参数显示 PID。
  • 它通常能直接显示是哪个 Python 脚本在占用,比原生 nvidia-smi 更直观。
相关推荐
众人皆醒我独醉4 天前
源码导读:一张地图看懂 KServe 仓库
面试·云计算·gpu
众人皆醒我独醉5 天前
MLOps 流水线:从训练到推理的 CI/CD
面试·llm·gpu
Flynt6 天前
本地跑大模型到底选哪个?我用llmfit把32000星的项目实测了一遍
ai编程·gpu·ollama
styshoo6 天前
[NVSentinel] metadata-collector模块调研
kubernetes·gpu·ai infra·nvsentinel
众人皆醒我独醉7 天前
AI 工作负载可观测性:DCGM + Prometheus + Grafana
面试·llm·gpu
众人皆醒我独醉7 天前
GPU 集群 IaC:Terraform + Ansible 部署自动化
面试·ansible·gpu
Smoothcloud_润云7 天前
从“模型服务”到“Agent 调度”:AI 推理基础设施为什么正在重构?
llm·agent·gpu
Eloudy9 天前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
程序员老陆10 天前
OpenGL 在视频渲染里的角色:它到底加速了什么?
音视频·gpu·opengl
众人皆醒我独醉11 天前
训练加速实战:Flash Attention、Gradient Checkpointing 与数据流水线
后端·面试·gpu