如何借助nvidia-smi通过PID查询各进程的GPU内存使用量?
基于PID查询GPU内存占用的实用方法
nvidia-smi的默认输出格式确实繁琐,单纯用grep很难精准提取目标PID的显存数据,这里提供几个直接可行的命令组合方案:
1. 批量查询指定PID列表
假设你要查询的PID是1234 5678 9012,用这条命令一次性获取所有目标PID的显存占用:
nvidia-smi --query-compute-apps=pid,used_memory --format=csv,noheader,nounits | awk -v pids="1234 5678 9012" 'BEGIN{split(pids, pid_list, " "); for(p in pid_list) target_pids[pid_list[p]]=1} $1 in target_pids {print "PID " $1 ": " $2 " MB 显存"}'
命令说明:
nvidia-smi --query-compute-apps=pid,used_memory --format=csv,noheader,nounits:让nvidia-smi输出仅包含PID和已用显存的精简CSV格式(无表头、无单位)awk部分:先把传入的PID列表转为哈希映射,再过滤出属于目标列表的PID,输出对应的显存数据
2. 单个PID快速查询
如果只查单个PID,用这条更简洁的命令:
# 替换成你要查询的PID TARGET_PID=1234 nvidia-smi --query-compute-apps=pid,used_memory --format=csv,noheader,nounits | grep "^$TARGET_PID," | awk '{print "PID " $1 ": " $2 " MB 显存"}'
3. 从文件读取PID批量查询
如果你的PID列表保存在文件(比如pids.txt,每行一个PID),可以用:
nvidia-smi --query-compute-apps=pid,used_memory --format=csv,noheader,nounits | awk 'NR==FNR{target_pids[$0]=1; next} $1 in target_pids {print "PID " $1 ": " $2 " MB 显存"}' pids.txt -
注意点:
- 确保当前用户有权限执行nvidia-smi,部分服务器环境可能需要加
sudo - 如果进程未实际占用GPU显存(比如处于挂起状态),不会出现在nvidia-smi的进程列表中
内容的提问来源于stack exchange,提问作者rwxrwxr--
相关产品推荐
相关产品推荐

