NVIDIA Virtual PC (vPC): 规模调整指南

部署最佳实践

最成功的部署在用户密度(可扩展性)和高质量用户体验之间取得平衡。当 vPC 虚拟机在生产环境中使用时,通过收集关于适当密度规模调整的客观测量结果和来自最终用户体验的主观反馈来实现这一点。

image19.png

NVIDIA GPU 上的 NVIDIA vPC 提供了广泛的监控功能,使 IT 能够使用 NVIDIA GPU 的各种引擎。计算引擎、帧缓冲区、编码器和解码器的利用率都可以通过命令行界面工具 nvidia-smi 进行监控和记录,该工具可以在 hypervisor 或虚拟机内访问。此外,NVIDIA vGPU 指标与 Windows 性能监视器 (PerfMon) 以及 VMware vRealize Operations 等管理包集成。

要识别单个最终用户或为多个最终用户提供服务的物理 GPU 的瓶颈,请在 hypervisor 上执行以下 nvidia-smi 命令。

虚拟机帧缓冲区利用率

复制
已复制!
            

nvidia-smi vgpu -q -l 5 | grep -e "VM ID" -e "VM Name" -e "Total" -e "Used" -e "Free"

虚拟机 GPU、编码器和解码器利用率

复制
已复制!
            

nvidia-smi vgpu -q -l 5 | grep -e "VM ID" -e "VM Name" -e "Utilization" -e "Gpu" -e "Encoder" -e "Decoder"

物理 GPU、编码器和解码器利用率

复制
已复制!
            

nvidia-smi -q -d UTILIZATION -l 5 | grep -v -e "Duration" -e "Number" -e "Max" -e "Min" -e "Avg" -e "Memory" -e "ENC" -e "DEC" -e "Samples"

在部署之前执行 POC 的另一个好处是,它可以更准确地对每个虚拟工作站的用户行为和 GPU 需求进行分类。客户通常根据每个应用程序将其最终用户划分为用户类型,并在主机上捆绑类似的用户类型。轻度用户可以在较小的 GPU 和较小的配置文件大小上得到支持,而重度用户则需要更多的 GPU 资源、较大的配置文件大小,并且可能最好保留在升级后的 vGPU 许可证上,例如 NVIDIA RTX Virtual Workstation (RTX vWS)。

像 nVector 这样的基准测试可以用来帮助确定部署规模,但它们有一些局限性。nVector 基准测试模拟了峰值工作负载,即所有虚拟机对 GPU 资源的需求最高的情况。该基准测试没有考虑到系统未被充分利用的时间。可以利用 Hypervisor 和尽力调度策略来实现更高的用户密度和一致的性能。

下图演示了最终用户处理的工作流程通常是交互式的,这意味着当用户需要较少的来自 hypervisor 和 NVIDIA vGPU 的性能和资源时,会有多个短暂的空闲时间。实现更高可扩展性的程度取决于用户的日常活动,例如会议的数量和午餐或休息时间的长度、多任务处理等。建议测试和验证您的内部工作负载,以满足用户的需求。

基准测试典型最终用户

image20.png

NVIDIA 使用 nVector 基准测试引擎进行大规模 vGPU 测试。该基准测试引擎自动化了测试过程,包括虚拟机配置、建立远程连接、执行 KW 工作流程以及分析所有虚拟机的结果。本应用指南中显示的测试结果基于在所有虚拟机上并行运行的 nVector KW 基准测试,并对指标进行平均。

注意

如果做得好,基准测试可以改进组织的流程和整体性能。在基准测试的上下文中,“通道”是指 GPU 处理数据或工作负载的特定路径或方法。理解和定义通道至关重要,因为它直接影响基准测试中测量的性能结果,使其成为 GPU 部署的重要规模调整因素。然而,基准测试的使用存在许多陷阱,特别是社会基准测试,因为组织的内部 POC 结果可能与社会基准测试的结果不同。这是由于多种原因造成的,例如配置差异、不可靠或不完整的数据、缺乏标准化测试的适当框架等。使用基准测试进行内部 POC 是有价值的,但如果不与组织战略和目标相结合,它可能会提供不完整的图景。

NVIDIA vPC 提供了三种 GPU 调度选项,以满足客户的各种 QoS 需求。有关 GPU 调度的更多信息,请访问此处

均等份额调度器

物理 GPU 在其上运行的 vGPU 之间平均分配。当 vGPU 添加到 GPU 或从 GPU 中移除时,分配给每个 vGPU 的 GPU 处理周期份额也会相应变化。因此,当同一 GPU 上的其他 vGPU 停止时,vGPU 的性能可能会提高;或者当同一 GPU 上的其他 vGPU 启动时,vGPU 的性能可能会降低。

固定份额调度器

每个 vGPU 都被赋予物理 GPU 处理周期的固定份额,份额的大小取决于 vGPU 类型,而 vGPU 类型又决定了每个物理 GPU 的最大 vGPU 数量。例如,每个物理 GPU 的 T4-4Q vGPU 的最大数量为 4。当调度策略为固定份额时,每个 T4-4Q vGPU 被赋予四分之一或 25% 的物理 GPU 处理周期。当 vGPU 添加到 GPU 或从 GPU 中移除时,分配给每个 vGPU 的 GPU 处理周期份额保持不变。因此,当同一 GPU 上的其他 vGPU 停止或启动时,vGPU 的性能保持不变。

注意

除了默认的尽力调度器外,基于 Maxwell 架构之后 NVIDIA GPU 架构的 GPU 还支持均等份额和固定份额 vGPU 调度器。

物理 GPU 具有固定数量的通道。分配给每个 vGPU 的通道数量与物理 GPU 上允许的最大 vGPU 数量成正比。当分配给 vGPU 的通道耗尽,并且分配了 vGPU 的客户 VM 无法为 vGPU 分配通道时,就会发生问题。

要消除通道错误,请使用具有更多帧缓冲区的 vGPU 类型,这会减少物理 GPU 上允许的最大 vGPU 数量。因此,分配给每个 vGPU 的通道数量会增加。

Ampere 及更高版本的 GPU 每个 GPU 引擎(计算/图形、复制引擎、视频编码器/解码器)有 2048 个通道。

Ampere 及更高版本上每个 vGPU 的通道数由以下公式给出

(小于(2048 / vGPU 类型最大实例数)的最大 2 的幂)– 3。

例如,NVIDIA L4 上 1B vGPU 配置文件的最大数量为 24。2048 个通道除以 24,得到 85 个通道,小于 85 的最大 2 的幂是 64,这在开销之前为每个 VM 提供 64 个通道。接下来,从 64 个通道中减去 3 个通道,这为每个 VM 提供 61 个通道。

(小于(2048/24)的最大 2 的幂)- 3 = 每个 VM 61 个通道

每个 GPU 配置文件的通道分配示例

GPU 配置文件

每个 VM 的通道数

A16-1B 每个 VM 125 个通道(16 x 4 卡 = 最大 64 个)
A16-2B 每个 VM 252 个通道
L4-1B 每个 VM 61 个通道
L4-2B 每个 VM 125 个通道

通道利用率与 vGPU VM 中运行的单线程和多线程应用程序以及操作系统和启动开销有关。因此,不同的应用程序将具有不同的通道利用率。

当分配给 vGPU 的通道耗尽,并且客户 VM 无法分配通道时,将在 hypervisor 主机或 NVIDIA 错误报告中报告以下错误

复制
已复制!
            

Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): Guest attempted to allocate channel above its max channel limit 0xfb Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): VGPU message 6 failed, result code: 0x1a Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): 0xc1d004a1, 0xff0e0000, 0xff0400fb, 0xc36f, Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): 0x1, 0xff1fe314, 0xff1fe038, 0x100b6f000, 0x1000, Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): 0x80000000, 0xff0e0200, 0x0, 0x0, (Not logged), Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): 0x1, 0x0 Jun 26 08:01:25 srvxen06f vgpu-3[14276]: error: vmiop_log: (0x0): , 0x0

POC 期间监控 GPU 通道使用情况

为了帮助评估工作负载是否接近 GPU 通道限制,可以配置新的 channel_usage_threshold_percentage 参数,以便在 GPU 通道使用率超过设定的阈值时发出警告。此功能有助于了解 POC 期间的通道使用情况,从而降低因通道耗尽而导致的生产风险。

对于要设置插件参数的每个 vGPU,请按照特定于 hypervisor 的设置步骤操作

默认情况下,警告处于禁用状态,但在 POC 期间可以启用以观察通道使用率是否接近耗尽。使用以下命令设置阈值

复制
已复制!
            

echo "channel_usage_threshold_percentage=<percentage>" > /sys/bus/mdev/devices/<UUID>/nvidia/vgpu_params

示例:将阈值设置为 80%

复制
已复制!
            

echo "channel_usage_threshold_percentage=80" > /sys/bus/mdev/devices/<UUID>/nvidia/vgpu_params

当使用率超过阈值时,警告将出现在 syslog 中

复制
已复制!
            

Sep 10 08:39:52 smc120-0003 nvidia-vgpu-mgr[313728]: notice: vmiop_log: Guest current channel usage 81% on engine 0x1 exceeds threshold channel usage 80%

注意

此通道阈值监控 POC 无法在 Ada 和 Hopper vGPU 类型上执行。

上一篇 测试结果
下一篇 总结
© 版权所有 © 2013-2025, NVIDIA Corporation。 上次更新时间:2025 年 1 月 13 日。