你的显存被谁吃了?微软大佬开源新工具,按进程算清这笔账

源自16位全网作者

10:55

任务管理器只会甩给你一个数字

打开任务管理器,性能页写着「专用 GPU 内存 11.2 / 16 GB」。

然后呢?

你不知道这 11.2GB 里,多少是游戏贴图,多少是浏览器的硬件加速,多少是桌面合成器,多少是你昨晚顺手挂着没关的本地大模型。你更不知道为什么《三角洲行动》打两把就糊成马赛克——小红书那条「求助 三角洲爆显存怎么办」,470 赞 212 评,楼主原话是「像在玩我的世界」。小红书

你的显存被谁吃了?微软大佬开源新工具,按进程算清这笔账

想查?传统路子基本是死的。GeForce 卡在 Windows 的 WDDM 模型下,显存由操作系统统一调度,nvidia-smi 依赖的 NVML 按进程接口经常直接返回 `N/A`——温度功耗频率都读得到,唯独「每个进程占多少」读不出来。WSL 里更干脆,nvidia-smi 一个进程都不列,Linux 侧所有程序的显存全记在虚拟机进程 `vmwp.exe` 头上。看得见总数,看不见归属,不是工具不够努力,是数据源在这个平台上本身就不提供归属。GitHub知乎

11 月 3 日,有人把这笔账拆开了

微软的 Scott Hanselman 在 GitHub 上放了个项目叫 gputaskman,MIT 许可,Python 写的。自述只有一句话:任务管理器说用了 15GB,这个工具想回答「被谁用的」。仓库 11 月 3 日建立,到 11 月 7 日凌晨已经打了 4 个 release,最新 v0.3.1,271 star、15 fork。GitHub知乎

它不去读显存内容,走的是 Windows 自己的显卡计数器——覆盖 Direct3D、Vulkan、OpenGL、CUDA 四种用法,按进程给占用。然后在这骨架上叠一层「这是什么活」:加载了哪个运行时、打开了哪个模型文件、什么架构什么量化几层;如果是 LLM,把显存拆成权重 / KV 缓存 / 计算缓冲三块摆给你看。

你的显存被谁吃了?微软大佬开源新工具,按进程算清这笔账

最后一条是关键。系统自带工具告诉你「这个进程占了 3GB」,gputaskman 告诉你「这 3GB 里权重多少、上下文缓存多少」。前者只能让你干瞪眼,后者能直接回答:我该换更小的量化,还是该把上下文砍一半?

最值钱的用法是存两份快照,diff 一下

```
gputaskman --json > before.json

改配置 / 换模型 / 重启服务,然后发一个请求

gputaskman --json > after.json
gputaskman diff before.json after.json
```

作者在 RTX 4080 SUPER 上跑了一遍:llama-server(Vulkan 后端)+ gemma-3-270m,上下文从 `-c 4096` 改成 `-c 32768`,翻 8 倍。按 GGUF 元数据推算,KV 缓存该涨 504MB;实测专用显存只涨了 83MB。差在哪?不在工具算错,在模型结构。Gemma 3 用滑动窗口注意力,长上下文里只有最近一段窗口进缓存,所以按上下文长度线性推出来的值是个上界。GitHub知乎

反过来也成立:同一份文档的对照表里,Qwen3-0.6B 在 8192 上下文、f16 下,GGUF 推算 896MiB,llama.cpp 运行时日志也是 896MiB,一分不差。所以结论不是「理论值都虚高」,而是推算准不准取决于模型结构——架构、部分层卸载、KV 量化、滑动窗口,每一项都能把结果改掉。这工具的价值是把「推算涨多少」和「实测涨多少」并排摆着,让你自己看见差多少。GitHub

对买卡的人含义很直接:网上那张「XX 模型需要 XX 显存」的表,配的是别人的模型、别人的量化、别人的上下文。自己的账,得自己量一次。而现在显存正是整张卡上最贵的那部分——11 月 7 日的显卡日报里,RTX 5080 重新跌破一万五,5070 把 10 月涨价潮的涨幅全跌没了,GeForce 指数跌 3.46 个百分点报 162.95 点,但 9060 XT 的 16GB 版本逆势上涨。同一颗核心,多出来的 8GB 正在被单独定价。知乎

它比大多数工具诚实

文档把口径分得很清:设备计数器和进程占用是实测,模型身份和运行时是推断,权重与 KV 拆分是估算。WSL 下每一行还带记号——`*` 是可认定匹配,`?` 是按启动先后推的合理猜测,`n/a` 是对不上号。它没假装自己全知道。

顺手纠个很多人都踩过的坑:别把任务管理器「详细信息」页里各进程的显存加起来。Windows 的 `Dedicated Usage` 含跨进程共享资源,同一个 surface 可能同时记在应用、`csrss.exe` 和 `dwm.exe` 名下,加总就是双重计数。文档里那个实测样本很说明问题:DWM 那行老计数器读约 15.3GiB,`Local Usage` 只有约 1.4GiB。GitHub

你的显存被谁吃了?微软大佬开源新工具,按进程算清这笔账

上手前这几条得知道

装法:Windows 下便携 ZIP,整个解压(`_internal` 要留在 exe 旁边)直接跑 `gputaskman.exe`,不需要 Python 也不需要 CUDA Toolkit。Linux / WSL 便携包要 glibc 2.35+ 和 N 卡驱动,macOS 只能源码跑且仅支持 Apple 芯片。构建未代码签名,ZIP 附 `.sha256` 供校验。知乎GitHub

隐私:输出里带文件路径、命令行参数、模型名、本地端口,截图发社区前先自己遮一遍。

短板:多卡、混插厂商配置还需更多验证;A 卡在 Windows 上温度、显存活动、PCIe 读数部分机器拿不到,显示 `N/A`(不是 0)。它也不 dump 显存、不枚举游戏贴图,要定位到具体哪张贴图哪个 kernel,得换 PIX 或 Nsight。

两个细节:存 after 快照前先让模型完整回答一次请求,CUDA 和 Vulkan 懒分配、分配器还会缓存已释放的内存,早存会读到假象;进程按 PID 匹配,找不到时显示「未列出」而不是 0。


显存这轮涨价里,最亏的不是买贵了,是买多了。

先把账量清楚,再决定要不要为那多出来的 8GB 掏钱。

项目地址:github.com/shanselman/gputaskman

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章