NVIDIA GPU “利用率”误解

最近的工作总是和 GPU 绕不开,有一个资源效能方向的工作要提升 GPU 的“利用率”,本周是期望 GPU 能够不仅仅用起来,而且有效的用起来、用满。

我们的监控系统中有一个 GPU 利用率的指标,调研之后发现,这个有点“玄幻”,这个不是 GPU 利用率,或者说,现在没有一个合适的指标能表征 GPU 利用率。

英伟达官方 GPU 利用率定义

GPUUtilrate

依据这个公示,如果一个 GPU,有 10 个 SM,并且只有一个 SM 在工作那么利用率是 = 1/10*100% = 10%。
然而通过nvidia-smi工具可以看到,获取的 GPU 利用率是 100%,非常奇怪,和上面的逻辑对不上。

nvidia-smi 中的 GPU 利用率

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

__global__ void simple_kernel() {
while (true) {}
}

int main() {
simple_kernel<<<1, 1>>>();
cudaDeviceSynchronize();
}

此代码片段将在单个流多处理器 (SM) 上启动指定的内核(线程)。根据常规理解,GPU的“利用率”应该计算为1 / num_sm * 100%。例如:

  • 如果 GPU 上有 10 个 SM,则“GPU 利用率”应为 10%。
  • 如果 GPU 上有 20 个 SM,则“GPU 利用率”应为 5%。
    然而,据观察,nvidia-smi 可能会报告”GPU-Util” 100%,如以下示例输出所示:
1
2
3
4
5
6
7
8
9
10
$nvidia-smi
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM2... Off | 00000000:1A:00.0 Off | 0 |
| N/A 42C P0 67W / 300W | 2602MiB / 32510MiB | 100% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

GPU-Util 误导

nvidia-smi命令行工具基于 NVIDIA 管理库 (NVML);nvidia-smi输出的结果中的确有GPU-Util,但是这里的定义是什么呢?

1
2
3
4
5
6
7
8
9
10
// https://github.com/NVIDIA/go-nvml/blob/v0.12.0-1/gen/nvml/nvml.h#L210

/**
* Utilization information for a device.
* Each sample period may be between 1 second and 1/6 second, depending on the product being queried.
*/
typedef struct nvmlUtilization_st {
unsigned int gpu; //!< Percent of time over the past sample period during which one or more kernels was executing on the GPU
unsigned int memory; //!< Percent of time over the past sample period during which global (device) memory was being read or written
} nvmlUtilization_t;

根据NVML的定义,“GPU利用率”是指 在过去的样本期间内发生某些活动的时间百分比。这里竟然是时间片
具体来说:

  • GPU 利用率:这表示一个或多个内核在 GPU 上执行的时间百分比。
  • 内存利用率:这表示读取或写入全局(设备)内存的时间百分比。

含义:NVML定义的“利用”概念可以不符合我们的共同理解。它仅测量给定采样周期内设备使用的时间部分,而不考虑该时间内使用的流式多处理器 (SM) 的数量。 通常,我们将“利用率”视为正在使用的 GPU 处理器的部分。

所以,这个数据并不能代表 GPU 是不是用满了,更好的指标应该是 SM 利用率,可能更合适。或者进一步说,每个 GPU 用在推理、训练的场景都不一样,我们应该使用业务的 SLO 指标来驱动 GPU 资源的使用情况建设,如果能够进行压测评估GPU 的情况,那将是最准确的。

NVIDIA GPU “利用率”和“饱和度”

最近的工作总是和 GPU 绕不开,有一个资源效能方向的工作要提升 GPU 的“利用率”,本周是期望 GPU 能够不仅仅用起来,而且有效的用起来、用满。

我们的监控系统中有一个 GPU 利用率的指标,调研之后发现,这个有点“玄幻”,这个不是 GPU 利用率,或者说,现在没有一个合适的指标能表征 GPU 利用率。

英伟达官方 GPU 利用率定义

GPUUtilrate

依据这个公示,如果一个 GPU,有 10 个 SM,并且只有一个 SM 在工作那么利用率是 = 1/10*100% = 10%。
然而通过nvidia-smi工具可以看到,获取的 GPU 利用率是 100%,非常奇怪,和上面的逻辑对不上。

nvidia-smi 中的 GPU 利用率

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

__global__ void simple_kernel() {
while (true) {}
}

int main() {
simple_kernel<<<1, 1>>>();
cudaDeviceSynchronize();
}

此代码片段将在单个流多处理器 (SM) 上启动指定的内核(线程)。根据常规理解,GPU的“利用率”应该计算为1 / num_sm * 100%。例如:

  • 如果 GPU 上有 10 个 SM,则“GPU 利用率”应为 10%。
  • 如果 GPU 上有 20 个 SM,则“GPU 利用率”应为 5%。
    然而,据观察,nvidia-smi 可能会报告”GPU-Util” 100%,如以下示例输出所示:
1
2
3
4
5
6
7
8
9
10
$nvidia-smi
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM2... Off | 00000000:1A:00.0 Off | 0 |
| N/A 42C P0 67W / 300W | 2602MiB / 32510MiB | 100% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

GPU-Util 误导

nvidia-smi命令行工具基于 NVIDIA 管理库 (NVML);nvidia-smi输出的结果中的确有GPU-Util,但是这里的定义是什么呢?

1
2
3
4
5
6
7
8
9
10
// https://github.com/NVIDIA/go-nvml/blob/v0.12.0-1/gen/nvml/nvml.h#L210

/**
* Utilization information for a device.
* Each sample period may be between 1 second and 1/6 second, depending on the product being queried.
*/
typedef struct nvmlUtilization_st {
unsigned int gpu; //!< Percent of time over the past sample period during which one or more kernels was executing on the GPU
unsigned int memory; //!< Percent of time over the past sample period during which global (device) memory was being read or written
} nvmlUtilization_t;

根据NVML的定义,“利用率”是指 在过去的样本期间内发生某些活动的时间百分比。具体来说:

  • GPU 利用率:这表示一个或多个内核在 GPU 上执行的时间百分比。
  • 内存利用率:这表示读取或写入全局(设备)内存的时间百分比。

含义:NVML定义的“利用”概念可以不符合我们的共同理解。它仅测量给定采样周期内设备使用的时间部分,而不考虑该时间内使用的流式多处理器 (SM) 的数量。通常,我们将“利用率”视为正在使用的 GPU 处理器的部分。

所以,这个数据并不能代表 GPU 是不是用满了,更好的指标应该是 SM 利用率,可能更合适。或者进一步说,每个 GPU 用在推理、训练的场景都不一样,我们应该使用业务的 SLO 指标来驱动 GPU 资源的使用情况建设,如果能够进行压测评估GPU 的情况,那将是最准确的。

AI && Arch Summit 20250427

最近爆火的MCP(Model Context Protocol),读这一篇就够了
MCP(模型上下文协议)是 Anthropic 提出的标准化协议,旨在统一 AI 模型与外部工具、数据源的交互方式,如同 AI 的“USB-C”。它解决了传统函数调用存在的平台依赖问题,实现工具调用的统一性。MCP 简化了 AI 应用开发集成,其优势包括统一标准、生态系统、模型灵活性和数据安全。用户可接入现有服务器使用功能,开发者主要创建服务器定义工具。AI 模型基于工具描述(通过 Prompt)智能选择并调用工具,完成复杂任务。

deepwiki
“一个涵盖所有 GitHub 代码库的免费百科全书”。DeepWiki 是一款由 Devin 推出的智能工具,它的主要作用是帮助开发者快速理解各种开源代码库。你可以通过 DeepWiki 一键为你的 GitHub 仓库生成类似文档的 wiki 页面,而且你可以向 Devin 询问关于该仓库的问题。
它利用 AI 技术分析代码库,帮你快速掌握代码的核心内容,包括整体架构、主要功能模块和实现方式。简单来说,DeepWiki 就像是一位了解各种代码库的专家助手,随时准备帮你解读那些复杂的代码。

综述:DeepSeek Infra/V1/MoE/V2/V3/R1 & 开源关键技术
DeepSeek 的基础架构以及开源的相关核心技术概要、综述。

(Un)coupling in distributed systems - Part 1
(Un)coupling in distributed systems - Part 2
深入探讨系统的解耦设计,不仅仅是架构解耦,更多的是功能解耦、时间解耦等,方便深入理解系统解耦的设计工作,对架构提升、稳定性设计等方向分析非常深入!

AwesomeMacOSApp:我的 macOS 都安装了什么

自己的 macOS 安装了很多效率工具,每次换 macOS 的时候自己还需要下载一番,偶尔名字还有记不住的情况,正好进行一次整理。

工作

效率

  • Google Chrome: 目前 macOS 端最棒的浏览器。安装了以下的扩展 extension:
    1. 剪藏: 剪辑到好文章到印象笔记。
    2. AdGuard广告拦截器: 顾名思义,拦截广告使用,净化上网。
    3. Easy Auto Refresh: 设置 X 秒自动刷新页面,对查看一些监控页面很好用。
    4. Hide X.com Ads: 屏蔽 X 平台的广告。
    5. iCloud 密码: 使用 macOS 端的密码管理器填写 Chrome 的用户名和密码。
    6. JSON-handle: 将 https 接口等返回的 JSON 内容格式化、美化。
    7. Share on twitter: 分享一些自己喜欢的内容到 X/Twitter,可以选择文字也可以分享整篇文章。
    8. Vimium C: 加强版 Chrome 端使用vim 控制浏览器行为,比如关闭页面、打开链接等。
    9. Web Highlights: 对页面的文字内容增加颜色,已经买断,方便下次浏览页面的时候找到文档的重点。同时支持在web highlights app 内查看全量的标记文章、文字以及进行阶段性的复习,增强记忆。必备!
    10. 沉浸式翻译: 浏览英文网站文字&&视频必备,可以快速将文章和主流网站的视频翻译成你需要的语言。
  • Quitter: 实现 macOS 上的软件可以超过一定时间自动最小化、自动 quit 退出等,避免占用 macOS 资源。
  • Raycast: macOS 最佳的 App 启动、文件查找等效率工具,每日使用 N 次,效率提升 Max。
  • keka: macOS 端最佳解压软件。
  • Things: macOS 端最棒的待办管理软件,支持多端同步等,每天查看 N 次。
  • Skim: macOS 上最佳的 PDF 阅读 App。
  • MarginNote: 看 PDF 文档的学习工具,可以进行脑图生成、记忆测试等,非常棒!建议买!
  • Easydict: 一个简洁优雅的词典翻译 macOS App。开箱即用,支持离线 OCR 识别以及多种翻译途径。
  • Manico: 使用多种快捷键组合启动 App,每日使用 N 次。
  • Hidden Bar: 一款超轻量的 MacOS 实用程序,可帮助隐藏菜单栏图标。免费!
  • Paste: 非常精美、漂亮的剪贴板管理工具,可以保留非常多的剪贴板历史。唯一不足:暂时发现不能自己添加同时包含图片和文字的 snippet,不过,这个 App 非常漂亮,忍了。
  • Chatwise: 可以支持 OpenAI、OpenRouter 等多种途径添加模型的模型 client,同时支持 MCP,更新迭代非常快!已经买断!
  • popclip: 使用鼠标选择一部分文字的时候可以弹出来 pop,里面可以安装自己喜欢的插件功能,比如快速百度搜索、翻译等。

理财

  • iCost记账: 手机端和 macOS 端同步的记账工具,每日使用大约 3~4 次。App Store 有下载。

安全

  • LuLu: LuLu 是免费的开源 macOS 防火墙,防止一些软件联网,例如 xx 输入法等,断其网络连接权限,避免上传个人隐私数据。