4. 特殊配置
4.1. 多实例 GPU (MIG)
多实例 GPU (MIG) 是一项允许将 GPU 分区为多个 CUDA 设备的功能。分区在两个级别上进行:首先,一个 GPU 可以拆分为一个或多个 GPU 实例。每个 GPU 实例声明拥有一个或多个流式多处理器 (SM)、GPU 总体内存的子集,以及可能的其他 GPU 资源,例如视频编码器/解码器。其次,每个 GPU 实例可以进一步分区为一个或多个计算实例。每个计算实例独占拥有其分配的 GPU 实例的 SM。但是,GPU 实例内的所有计算实例共享 GPU 实例的内存和内存带宽。每个计算实例都充当 CUDA 设备并以唯一的设备 ID 运行。有关如何配置 MIG 实例的更多信息,请参阅驱动程序发行说明以及 nvidia-smi
CLI 工具的文档。
从分析的角度来看,计算实例可以是两种类型之一:隔离或共享。
隔离计算实例拥有其所有分配的资源,并且不与另一个计算实例共享任何 GPU 单元。换句话说,计算实例的大小与其父 GPU 实例的大小相同,因此没有任何其他同级计算实例。跟踪和分析适用于隔离的计算实例。
共享计算实例使用 GPU 资源,这些资源也可能被同一 GPU 实例中的其他计算实例访问。由于这种资源共享,不允许从共享单元收集分析数据。尝试从共享单元收集指标将导致 NaN 值。未来版本将提供更好的错误报告。仍然可以从共享计算实例独占拥有的 GPU 单元收集指标。跟踪适用于共享计算实例。
为了让用户能够确定目标设备上可用的指标,添加了新的 API,可以在开始分析会话之前使用这些 API 查询计数器可用性。请参阅 API NVPW_RawMetricsConfig_SetCounterAvailability
和 cuptiProfilerGetCounterAvailability
。
GPU 上的所有计算实例共享相同的时钟频率。为了获得具有多遍收集的一致指标值,建议在分析会话期间锁定 GPU 时钟。CLI 工具 nvidia-smi
可用于通过调用 nvidia-smi --lock-gpu-clocks=tdp,tdp
为整个 GPU 配置固定频率。这会将 GPU 时钟设置为基本 TDP 频率,直到您通过调用 nvidia-smi --reset-gpu-clocks
重置时钟。
4.2. NVIDIA 虚拟 GPU (vGPU)
CUPTI 支持 NVIDIA 虚拟 GPU (vGPU) 上的跟踪和分析功能。NVIDIA vGPU 支持活动、回调和分析 API,但不支持事件和指标 API。如果您想使用 NVIDIA vGPU 支持的分析功能,则必须为每个需要它们的 vGPU VM 启用它们。这些可以通过设置 vGPU 插件参数 enable_profiling
来启用。如何为 vGPU VM 设置参数取决于您使用的虚拟机监控程序。默认情况下启用跟踪,它不需要任何特定设置。但是,虚拟机 (VM) 迁移后,跟踪结果可能不准确。因此,建议设置 vGPU 插件参数 enable_profiling
以获得准确的结果。有关 支持的 GPU 列表、如何使用 vGPU 插件参数 启用分析功能 以及关于将 CUPTI 与 NVIDIA vGPU 结合使用的 限制,请参阅 NVIDIA 虚拟 GPU 软件文档。
4.3. 适用于 Linux 的 Windows 子系统 (WSL)
WSL 或适用于 Linux 的 Windows 子系统是 Windows 的一项功能,使用户可以直接在 Windows 10 和更高版本的操作系统版本上运行原生 Linux 应用程序、容器和命令行工具。CUPTI 在 Volta 及更高版本的 GPU 架构的第二代 WSL (WSL 2) 上支持跟踪 API 活动和回调。分析器 API 事件和指标在 WSL 上不受支持,而分析和 PC 采样 API 仅在 WSL 2 和 Windows 11 系统上受支持。