GPU(CUDA)性能分析 — GPU Flight 介绍
Source: Dev.to
为什么我开始使用 GPU Flight
在对 CUDA 应用进行分析时,你通常会:
- 安装诸如 Nsight 的分析工具
- 或者手动将 CUPTI 集成到你的应用中,这往往会使代码变得复杂且难以维护
- 在云端或容器化环境中还要处理额外的复杂性
这种工作流可能不太方便——尤其是在生产系统中。我想要一种更轻量的方案,像 GPU 的飞行记录仪 那样工作。
GPU Flight 将结构化的分析日志直接写入主机。一个独立的组件(GPUFL Agent)会抓取这些日志文件并将其转发到后端服务或其他目的地,从而使 GPU 可观测性更加灵活,且更易于集成到分布式系统中。
什么是 GPU Flight?
GPU Flight 旨在 轻量且模块化。
- 如果你只需要监控,开销极小。
- 开启更深层次的分析则会提供更详细的指标。
目标是暴露有用的 GPU 指标,让你能够清晰地了解:
- GPU 如何管理资源
- 你的程序如何利用 GPU 资源
- 性能瓶颈出现在何处
项目结构
GPU Flight 目前由多个组件组成:
1️⃣ gpufl‑client
https://github.com/gpu-flight/gpufl-client
用户在应用中嵌入的客户端库,用于监控和分析。
2️⃣ gpufl‑agent
https://github.com/gpu-flight/gpufl-agent
尽管名字里有 “agent”,它 不是 AI 代理 🙂 它负责跟踪日志文件并将分析数据转发到配置的目标位置。
3️⃣ gpufl‑desktop
https://github.com/gpu-flight/gpufl-desktop
最初计划作为桌面查看器;目前聚焦于基于 Web 的前端。部分仓库仍为私有,因为尚未达到生产就绪状态;等核心功能稳定后会公开。
GPU Flight 支持哪些指标?
GPU Flight 在多个层面捕获可观测性。
1️⃣ 系统 & GPU 监控(NVML)
- 主机内存使用情况
- GPU 内存使用情况(已用/空闲/总量)
- GPU 利用率
- 内存利用率
- 温度
- 功耗
- 时钟频率(Graphics / SM / Memory)
- PCIe 收发带宽
- 功率和热节流标志
示例 JSON 片段:
{
"type": "system_sample",
"util_gpu": 57,
"temp_c": 39,
"power_mw": 54415,
"clk_sm": 1740
}
2️⃣ CUDA 设备能力
静态架构信息:
- 计算能力
- L2 缓存大小
- 每块共享内存
- 每块寄存器数量
- SM 数量
- Warp 大小
3️⃣ CUDA API 与 Kernel 事件(CUPTI)
- API 进入/退出时间戳
- Kernel 执行开始/结束时间戳
- 网格/块维度
- 共享内存使用量
- 寄存器使用量
- 占用率
- 关联 ID
- 内存拷贝事件(HtoD、DtoH)
Python 支持
GPU Flight 正在扩展,以支持使用 CUDA 的 Python 应用(例如 PyTorch)。这使得在不深度修改现有代码的情况下,对 GPU 密集型机器学习工作负载进行分析成为可能。
接下来会做什么?
在下一篇文章中,我将演示一个最小的 CUDA 示例,并展示如何:
- 集成
gpufl-client - 运行 kernel
- 检查生成的分析日志
- 解读停顿原因和指标
感谢阅读——这仅仅是个开始。