hdy 发表于 2025-5-15 21:26

NVIDIA GPU Sharing/Virtualization 101


1. 摘要NVIDIA 多种 GPU 虚拟化解决方案,主要包括时间切片(Time-Slicing)、多进程服务(MPS)、多实例 GPU(MIG)和虚拟 GPU(vGPU)。简单来说,这些方案各有侧重:时间切片就像在一条单行道上轮流通行;MPS 允许多个工人同时使用同一套工具;MIG 将一个大型工具分割成几个独立的较小工具;而 vGPU 则为不同的用户创建工具的虚拟版本。每种解决方案都有其独特的优势和适用场景。2. 什么是 GPU 虚拟化想象一下,有一台功能强大但非常昂贵的机器(GPU),它能够比普通计算机更快地完成复杂的任务。传统上,这台机器一次只能供一个人或一个应用程序使用,这可能会导致资源闲置和利用率不足 1。GPU 虚拟化技术提供了一种允许多个用户或应用程序同时使用同一台强大机器的方法 3。简单来说,GPU 虚拟化不是让每个用户都拥有自己的物理 GPU,而是创建了一种让他们共享一个或多个 GPU 资源的方式。这种共享带来了许多非技术方面的优势:
[*]节省成本: 减少了所需物理 GPU 的数量 2。
[*]提高效率: 更好地利用昂贵的硬件 1。
[*]增强灵活性: 能够根据需要灵活地分配 GPU 资源 2。
通过几种不同的方式来实现这种共享,这些方式将在接下来的章节中详细讨论。3. NVIDIA 时间切片:共享 GPU 时间
[*]概念: 时间切片技术可以比作在一条单行道上轮流通行 12。每个应用程序或用户在很短的时间内获得 GPU 的处理时间,然后迅速切换到下一个应用程序或用户 1。这个过程发生得非常快,以至于看起来就像多个任务在同时运行。NVIDIA 的设备插件在 Kubernetes 环境中实现了时间切片,它负责资源发现、分配和隔离 1。GPU 调度器负责分配这些时间片并执行上下文切换,确保在不同的虚拟 GPU 之间平滑切换,从而高效利用 GPU 资源 1。
[*]优点:

[*]提高利用率: 允许多个较小的工作负载受益于 GPU 加速,即使它们不需要持续的全功率运行 1。这种方法有助于充分利用 GPU,从而证明其高成本是合理的 1。它还可以有效地处理并发,允许多个工作负载共享 GPU 资源 1。
[*]成本效益: 对于某些类型的工作负载,尤其是在开发和测试环境中,这是一种经济高效的共享 GPU 的方式 2。对于预算有限的初创企业和中小型企业来说,时间切片可以最大限度地利用有限的 GPU 资源,满足多个用户或任务的需求,而不会影响性能 2。
[*]兼容性: 通常适用于大多数 NVIDIA GPU,包括较旧的型号 13。与多实例 GPU(MIG)不同,时间切片可以在不支持 MIG 的旧款 GPU 上提供共享访问 16。

[*]缺点:

[*]没有隔离: 共享同一 GPU 的工作负载之间没有内存或故障隔离 2。这意味着一个应用程序的问题可能会影响到其他应用程序,甚至可能导致所有工作负载崩溃 23。
[*]潜在延迟: 进程之间的快速切换(上下文切换)可能会引入延迟 2。对于延迟敏感型应用程序,这可能是一个问题 13。
[*]控制较少: 与其他方法相比,对资源分配的控制较少 13。请求多个时间切片的 GPU 并不能保证 Pod 获得成比例的 GPU 计算能力 16。
[*]管理复杂性: 在 Kubernetes 等环境中管理时间切片的 GPU 可能会增加复杂性 2。配置时间切片通常涉及修改 Kubernetes 集群策略和在节点上应用标签 12。

[*]用例示例:

[*]多个用户需要间歇性 GPU 访问的开发和测试环境 2。
[*]运行多个小型、需求较低的 AI 推理工作负载 2。
[*]成本敏感且优先考虑最大化 GPU 利用率而不是严格隔离的场景 2。
[*]不支持 MIG 的旧款 GPU 硬件 13。
4. NVIDIA MPS(多进程服务):并发 GPU 使用
[*]概念: MPS 是一种允许多个 CUDA 应用程序(使用 NVIDIA GPU 进行计算的软件)在单个 GPU 上并发运行的技术 1。与时间切片快速切换应用程序不同,MPS 使它们能够同时使用 GPU 的资源,从而提高整体吞吐量 1。MPS 采用客户端-服务器架构,应用程序作为客户端连接到 MPS 服务器,该服务器管理 GPU 的访问 30。MPS 通过允许多个进程共享同一个 CUDA 上下文来工作,从而减少内存开销 33。
[*]优点:

[*]提高吞吐量: 通过允许多个进程并发执行 GPU 任务,实现更高的整体处理能力 1。MPS 允许来自不同进程的内核和内存复制操作在 GPU 上重叠,从而实现更高的利用率和更短的运行时间 29。
[*]减少上下文切换开销: 与在没有 MPS 的情况下独立运行进程相比,共享 CUDA 上下文减少了与进程之间切换相关的开销 1。
[*]更好的 GPU 利用率: 当单个应用程序无法完全饱和 GPU 时,可以提高利用率 1。MPS 适用于每个应用程序进程产生的工作量不足以饱和 GPU 的情况 29。
[*]细粒度控制: MPS 提供了一定程度的资源分配控制,例如限制固定的设备内存和活动线程百分比 26。

[*]缺点:

[*]有限的隔离: 与时间切片类似,MPS 不提供共享 GPU 的进程之间的完全内存保护和错误隔离 22。一个崩溃的应用程序可能会影响其他应用程序。
[*]潜在的资源竞争: 虽然 MPS 旨在提高并发性,但对内存带宽等共享资源的竞争仍然可能发生并影响性能 23。
[*]不支持 MIG: MPS 不能在启用 MIG 的 GPU 上使用 23。
[*]复杂性: 设置和管理 MPS 可能需要一定的技术专业知识 30。
[*]安全考虑: 在 Kubernetes 等某些部署场景中,MPS 可能需要为 Pod 启用 hostIPC: true,这可能会引入安全风险 28。

[*]用例示例:

[*]在单个 GPU 上运行多个 MPI 进程的高性能计算(HPC)工作负载 29。
[*]多个进程共享 GPU 的深度学习训练和推理 36。
[*]可以受益于并发 GPU 执行的科学模拟和数据分析任务 37。
[*]云游戏和虚拟桌面 41。
5. NVIDIA MIG(多实例 GPU):划分 GPU
[*]概念: MIG 是较新的 NVIDIA GPU(如 Ampere 和 Hopper 架构)上提供的一种硬件级特性,它允许将单个物理 GPU 划分为多个更小的、完全隔离的实例 1。每个实例都像一个独立的 GPU,拥有自己专用的计算核心、内存和资源。这种划分是在硬件层面进行的,确保了强大的隔离性 1。每个 GPU 可以划分的实例数量是固定的,例如在 A100 GPU 上最多可以划分 7 个实例 21。
[*]优点:

[*]强大的隔离性: 在不同的 MIG 实例之间提供完全的故障和内存隔离 16。一个实例中的问题不会影响到其他实例。这对于多租户环境和敏感工作负载至关重要。
[*]可预测的性能: 每个实例都拥有专用的资源,为分配的工作负载提供有保证且一致的性能 17。这消除了像时间切片等共享方法可能出现的性能波动。
[*]服务质量(QoS): 通过确保每个工作负载获得所需的资源而不会与其他工作负载竞争,从而实现更好的服务质量 17。
[*]一定程度的动态划分: 管理员可以重新配置 MIG 实例的数量和大小以适应不断变化的工作负载需求,尽管这通常需要重新启动工作负载 23。

[*]缺点:

[*]硬件依赖性: 仅在较新的 NVIDIA GPU 架构(如 Ampere 和 Hopper)上受支持 13。较旧的 GPU 不具备此功能。
[*]固定的划分: GPU 被划分为预定义的一组实例大小,这些大小可能并不总是与所有工作负载的资源需求完美匹配,可能导致实例内部的一些资源利用不足 16。
[*]与 MPS 相比灵活性较低: 在细粒度动态共享资源方面不如 MPS 灵活 23。
[*]潜在的性能开销(理论上): 由于划分,可能存在一些理论上的性能损失,但基准测试表明,尤其对于计算密集型工作负载,这种损失可能很小 44。

[*]用例示例:

[*]多租户云环境,其中不同客户或用户需要强大的隔离和可预测的性能 21。
[*]AI 推理服务,其中一致的延迟和吞吐量至关重要 21。
[*]具有不同资源需求的工作负载,这些需求可以与特定的 MIG 实例大小相匹配 23。
[*]需要内存保护和错误隔离以确保稳定性和安全性的场景 16。
6. NVIDIA vGPU(虚拟 GPU)
[*]概念: vGPU 是一种允许多个虚拟机(VM)共享单个物理 GPU 的技术 3。这在虚拟化环境(如虚拟桌面基础架构(VDI))中尤其有用,可以为访问虚拟桌面的多个用户提供 GPU 加速。vGPU 使用软件创建可以分配给各个虚拟机的 GPU 虚拟实例 7。NVIDIA vGPU 软件包括每个虚拟机的图形驱动程序,使每个虚拟机都能像物理桌面一样受益于 GPU 8。如 17 所示,vGPU 具有不同的调度模式,例如时间片轮询、平均共享和固定共享。
[*]优点:

[*]增强虚拟桌面性能: 与基于 CPU 的渲染相比,为在虚拟桌面中运行的图形密集型应用程序提供了更好的用户体验 7。vGPU 允许在后端服务器上渲染图形,而不是在实际的端点设备上渲染,从而提高了性能 49。
[*]改进虚拟化环境中的资源管理: 允许跨多个虚拟机高效地分配和管理 GPU 资源 5。
[*]灵活性和可扩展性: 使组织能够根据需要轻松扩展具有 GPU 加速功能的虚拟桌面基础架构 6。
[*]节省成本: 减少了每个虚拟机都需要专用 GPU 的需求,从而显著降低了成本 5。
[*]集中管理和安全性: 允许 IT 团队集中管理 GPU 资源并确保虚拟化环境中的数据安全 6。

[*]缺点:

[*]软件和许可要求: 通常需要特定的 NVIDIA vGPU 软件和许可,这会增加总体成本 17。
[*]性能可能有所不同: 根据工作负载和调度模式的不同,性能可能不如专用 GPU 或 MIG 那样可预测 17。
[*]设置和配置复杂: 设置和管理 vGPU 环境可能很复杂,需要专门的知识 6。
[*]潜在的瓶颈: 如果底层物理 GPU 过度订阅,可能会导致共享它的虚拟机的性能瓶颈 54。

[*]用例示例:

[*]面向知识工作者、创意专业人士和技术用户的虚拟桌面基础架构(VDI)部署 6。
[*]向最终用户提供高性能图形的云游戏平台 3。
[*]为虚拟化的 AI/ML 开发环境提供 GPU 加速 6。
[*]用于图形密集型任务(如 3D 渲染和视频编辑)的远程工作站 7。
7. 选择合适的 NVIDIA GPU 虚拟化方案以下表格总结了每种解决方案的关键特性:
特性时间切片MPS(多进程服务)MIG(多实例 GPU)vGPU(虚拟 GPU)
共享原理基于时间的执行交错CUDA 层面并发执行硬件级划分为实例面向虚拟机的软件虚拟化
隔离性无有限强(硬件强制)取决于虚拟机监控程序和配置
性能由于上下文切换可能存在延迟并发任务吞吐量提高每个实例具有可预测的专用资源增强虚拟化工作负载的性能
兼容性广泛,包括旧款 GPU后开普勒 NVIDIA GPUAmpere 及更新的 NVIDIA GPU需要特定的 NVIDIA GPU 和软件
用例开发/测试,小型突发工作负载,成本敏感场景HPC,并发 CUDA 应用程序,提高 GPU 利用率多租户环境,隔离敏感型工作负载,可预测的性能虚拟桌面基础架构(VDI),云游戏,虚拟化应用程序
复杂性在某些情况下配置相对简单配置和管理中等配置中等设置和管理可能很复杂
内存隔离否有限是取决于虚拟机监控程序
故障隔离否有限是取决于虚拟机监控程序
MIG 兼容性是否不适用可以管理 MIG 实例
选择最佳解决方案取决于具体需求:
[*]对于成本效益高的 GPU 共享,适用于开发或不太关键的任务,且对隔离要求不高: 时间切片可能就足够了 2。
[*]对于希望最大化吞吐量且能够利用并发 GPU 执行的应用程序,并且可以接受一定程度的共享资源风险: MPS 可能是个不错的选择 1。
[*]对于需要强大的隔离性、可预测的性能和有保证的服务质量的环境,尤其是在多租户场景中: 建议选择 MIG 16。
[*]对于希望为虚拟桌面或虚拟化应用程序提供 GPU 加速并改进虚拟化环境中资源管理的组织: vGPU 是合适的解决方案 3。
在做出决定时,务必考虑工作负载特性、安全要求、预算和现有基础设施。8. 结论GPU 虚拟化在优化现代计算中的资源利用率和降低成本方面至关重要。NVIDIA 提供的每种解决方案都有其独特的优势:时间切片具有简单性和广泛的兼容性;MPS 通过并发性提高了吞吐量;MIG 提供了强大的隔离性和可预测的性能;而 vGPU 则为虚拟化环境提供了 GPU 加速。最佳选择取决于具体用例的要求。随着计算需求的不断增长,GPU 虚拟化技术将继续发展并发挥越来越重要的作用,以支持日益复杂的计算工作负载。
引用
[*]Optimizing AI Workloads with NVIDIA GPUs, Time Slicing, and Karpenter (Part 2), https://blogs.cisco.com/developer/optimizing-ai-workloads-with-nvidia-gpus-time-slicing-and-karpenter-part-2
[*]GPU sharing on Amazon EKS with NVIDIA time-slicing and accelerated EC2 instances, https://aws.amazon.com/blogs/containers/gpu-sharing-on-amazon-eks-with-nvidia-time-slicing-and-accelerated-ec2-instances/
[*]What is GPU Virtualization? | DigitalOcean, https://www.digitalocean.com/resources/articles/what-is-gpu-virtualization
[*]The Challenges of Sharing GPUs and How to Solve Them | HPE Developer Portal, https://developer.hpe.com/blog/the-challenges-of-sharing-gpus-and-how-to-solve-them/
[*]Five benefits of GPU Virtualization - International Computer Concepts, https://www.icc-usa.com/five-benefits-of-gpu-virtualization
[*]How Virtual GPUs Work, Use Cases & Critical Best Practices - Atlantic.Net, https://www.atlantic.net/gpu-server-hosting/how-virtual-gpus-work-use-cases-and-critical-best-practices/
[*]What Is a Virtual GPU? - NVIDIA Blog, https://blogs.nvidia.com/blog/what-is-a-virtual-gpu/
[*]blogs.nvidia.com, https://blogs.nvidia.com/blog/what-is-a-virtual-gpu/#:~:text=Virtual%20GPUs%20Explained&text=This%20software%20transforms%20a%20physical,driver%20for%20every%20virtual%20machine.
[*]What is vGPU and How Can Advance2000 Help Your Business Harness Its Power?, https://www.advance2000.com/vgpu-and-how-help-your-business-harness-power/
[*]Virtual GPU: Unlocking the Future of Computing Power - FS.com, https://www.fs.com/blog/virtual-gpu-unlocking-the-future-of-computing-power-7076.html
[*]NVIDIA H100 GPUs and the Benefits of Virtualisation - Define Tech, https://define-technology.com/nvidia-h100-gpu-virtualisation/
[*]Sharing is caring: How to make the most of your GPUs (part 1 - time-slicing) - Red Hat, https://www.redhat.com/en/blog/sharing-caring-how-make-most-your-gpus-part-1-time-slicing
[*]GPU Time-slicing Vs. Passthrough - AceCloud, https://acecloud.ai/resources/blog/gpu-time-slicing-vs-passthrough/
[*]Maximizing efficiency with GPU Time Slicing and Multi Instance GPU on AKS, 访问 https://www.wesleyhaakman.org/maximizing-efficiency-with-gpu-time-slicing-and-multi-instance-gpu-on-aks/
[*]GPU Time-Slicing - NVIDIA Run:ai Documentation, https://run-ai-docs.nvidia.com/guides/platform-management/runai-scheduler/resource-optimization/time-slicing
[*]Time-Slicing GPUs in Kubernetes — NVIDIA GPU Operator, https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/gpu-sharing.html
[*]Deployment - NVIDIA Docs Hub, https://docs.nvidia.com/vgpu/faq/latest/deployment.html
[*]Time-slicing NVIDIA GPUs in OpenShift, https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/time-slicing-gpus-in-openshift.html
[*]NVIDIA GPU time-slicing with Kubernetes | Scaleway Documentation, https://www.scaleway.com/en/docs/gpu/reference-content/kubernetes-gpu-time-slicing/
[*]Using NVIDIA GPU Time-slicing in Cloud Kubernetes Clusters with the Luna Smart Cluster Autoscaler - Elotl, https://www.elotl.co/blog/using-nvidia-gpu-time-slicing-in-cloud-kubernetes-clusters-with-the-luna-smart-cluster-autoscaler
[*]Comparing Multi-Instance GPU (MIG) and Time-Slicing for GPU Resource Sharing, https://openmetal.io/resources/blog/mig-vs-time-slicing-gpu-sharing/
[*]Comparison among techniques to share GPUs in Kubernetes : r/devops - Reddit, https://www.reddit.com/r/devops/comments/10xty21/comparison_among_techniques_to_share_gpus_in/
[*]rh-aiservices-bu/gpu-partitioning-guide: Repository to demo GPU Sharing with Time Slicing, MPS, MIG and others - GitHub,https://github.com/rh-aiservices-bu/gpu-partitioning-guide
[*]Avoiding Pitfalls when Using NVIDIA GPUs for Real-Time Tasks in Autonomous Systems - DROPS, https://drops.dagstuhl.de/storage/00lipics/lipics-vol106-ecrts2018/LIPIcs.ECRTS.2018.20/LIPIcs.ECRTS.2018.20.pdf
[*]Why use MPS, Time Slicing or MIG if Nvidia's defaults have better performance?, https://stackoverflow.com/questions/78653544/why-use-mps-time-slicing-or-mig-if-nvidias-defaults-have-better-performance
[*]Partitioning modes comparison - GitHub, https://github.com/nebuly-ai/nos/blob/main/docs/en/docs/dynamic-gpu-partitioning/partitioning-modes-comparison.md
[*]Time-sliced GPU scheduler - cuda - Stack Overflow, https://stackoverflow.com/questions/74630464/time-sliced-gpu-scheduler
[*]Share GPUs with multiple workloads using NVIDIA MPS | Google Kubernetes Engine (GKE), https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus
[*]Multi-Process Service - NVIDIA Docs Hub, https://docs.nvidia.com/deploy/mps/index.html
[*]Overview | nvidia_mps_helper - GitHub Pages, https://yanbc.github.io/nvidia_mps_helper/
[*]INTRODUCTION TO CUDA's MULTI-PROCESS SERVICE (MPS), https://www.olcf.ornl.gov/wp-content/uploads/2021/06/MPS_ORNL_20210817.pdf
[*]Optimizing GPU Utilization: Understanding MIG and MPS | GTC Digital Spring 2022 | NVIDIA On-Demand, https://www.nvidia.com/en-us/on-demand/session/gtcspring22-s41793/
[*]How to reduce CUDA context size (Multi-Process Service) - Stack Overflow, https://stackoverflow.com/questions/59411623/how-to-reduce-cuda-context-size-multi-process-service
[*]Contents — Multi-Process Service - NVIDIA Docs Hub, https://docs.nvidia.com/deploy/mps/contents.html
[*]11 CUDA Multi Process Service - YouTube, https://www.youtube.com/watch?v=bC6CxPW0-1c
[*]Running TorchServe with NVIDIA MPS — PyTorch/Serve master documentation, https://pytorch.org/serve/hardware_support/nvidia_mps.html
[*]Big Compute doesnt want you to know this! Maximising GPU Usage with CUDA MPS | Oxford Protein Informatics Group, https://www.blopig.com/blog/2024/11/big-compute-doesnt-want-you-to-know-this-maximising-gpu-usage-with-cuda-mps/
[*]github.com,https://github.com/nebuly-ai/nos/blob/main/docs/en/docs/dynamic-gpu-partitioning/partitioning-modes-comparison.md#:~:text=Compared%20to%20time%2Dslicing%2C%20MPS,leads%20to%20better%20compute%20performance.
[*]Do I have to use the MPS (MULTI-PROCESS SERVICE) when using CUDA6.5 + MPI?, https://stackoverflow.com/questions/25708786/do-i-have-to-use-the-mps-multi-process-service-when-using-cuda6-5-mpi
[*]GPU sharing with MPS - DEEP-Hybrid-DataCloud's documentation!, https://docs.deep-hybrid-datacloud.eu/en/latest/technical/others/gpu-sharing-with-mps.html
[*]What are some common use cases where NVIDIA MPS with A100 GPUs provides significant performance improvements? - Massed Compute,https://massedcompute.com/faq-answers/?question=What%20are%20some%20common%20use%20cases%20where%20NVIDIA%20MPS%20with%20A100%20GPUs%20provides%20significant%20performance%20improvements?
[*]Improve performance on a shared GPU by using NVIDIA MPS | Cloud Dataflow, https://cloud.google.com/dataflow/docs/gpu/use-nvidia-mps
[*]Fine grained Kernel scheduling with MPS - CUDA Programming and Performance, https://forums.developer.nvidia.com/t/fine-grained-kernel-scheduling-with-mps/192679
[*]Efficient Access to Shared GPU Resources: Part 5 - kubernetes @ CERN, https://kubernetes.web.cern.ch/blog/2023/07/04/efficient-access-to-shared-gpu-resources-part-5/
[*]MPS better than MIG and Time-Slicing for performing inference on a shared GPU? - Reddit, https://www.reddit.com/r/kubernetes/comments/1190utm/mps_better_than_mig_and_timeslicing_for/
[*]Compare with MIG/MPS/Timeslicing | Maximize your GPU usage, powered by GPU virtualization and pooling, fractional GPU, Remote GPU Sharing, GPU over IP - Tensor Fusion, https://tensor-fusion.ai/guide/comparison/compare-with-mig-mps
[*]GPU virtualization - Wikipedia, https://en.wikipedia.org/wiki/GPU_virtualization
[*]What Is Virtualization? | IBM, https://www.ibm.com/think/topics/virtualization
[*]Everything you need to know about GPU virtualization - TechTarget, https://www.techtarget.com/searchvirtualdesktop/essentialguide/Everything-you-need-to-know-about-GPU-virtualization
[*]Where does GPU virtualization occur? - NVIDIA Developer Forums, https://forums.developer.nvidia.com/t/where-does-gpu-virtualization-occur/161970
[*]Unlock vGPU functionality for consumer grade GPUs : r/hardware - Reddit, https://www.reddit.com/r/hardware/comments/mnord0/unlock_vgpu_functionality_for_consumer_grade_gpus/
[*]AMD vGPU ? : r/Proxmox - Reddit, https://www.reddit.com/r/Proxmox/comments/yt2edh/amd_vgpu/
[*]NVIDIA Virtual GPU (vGPU) Software, https://docs.nvidia.com/vgpu/index.html
[*]Introduction to NVIDIA Virtual GPU - Part 1 - Intro, Which GPU & License? - YouTube, https://www.youtube.com/watch?v=NiXtswuE1MI
[*]Benefits of Using a vGPU - E2E Networks, https://www.e2enetworks.com/blog/benefits-of-using-a-vgpu
[*]Use GPU Virtualization for VDI Efficiency and Experience - Login VSI, https://www.loginvsi.com/resources/blog/leveraging-gpu-virtualization-for-vdi-efficiency-and-experience/
[*]Unlock Next Level Performance with Virtual GPUs - NVIDIA, https://www.nvidia.com/en-us/data-center/virtual-solutions/
[*]Hyper-V GPU Passthrough: An Essential Guide for Beginners - NAKIVO, https://www.nakivo.com/blog/hyper-v-gpu-passthrough/


页: [1]
查看完整版本: NVIDIA GPU Sharing/Virtualization 101