nestrilabs/virtio-nvgpu

A virtio device for sharing one NVIDIA GPU across several VMs, at bare-metal speed.

virtio-nvgpu – 在多个 VM 间共享一个 NVIDIA GPU

功能说明

  • 提供一个 virtio 设备,让多个 Linux 虚拟机(VM)无需 vGPU 授权或 PCI-passthrough,即可使用同一个物理 NVIDIA GPU。
  • 主机运行官方 NVIDIA 驱动程序;客户机内核加载一个小型驱动模块,将 实际 NVIDIA 驱动程序 调用转发到主机。GPU 指令直接写入 GPU 内存,因此工作负载能以接近裸机的速度运行。

重要性

  • 传统 PCI-passthrough 将整个 GPU 分配给一个 VM,限制了整合度。
  • NVIDIA 的 vGPU 解决方案昂贵,且仅限于数据中心级显卡。
  • 现有的 API 转发解决方案(Venus、virgl)速度慢,且无法暴露 NVENC 或 CUDA。
  • virtio-nvgpu 通过共享驱动程序本身来绕过这些限制,在保持高性能的同时允许大量客户机。

性能声明

  • 在 RTX 3060 上,典型游戏帧(>2 毫秒)的帧渲染延迟 在原生裸机性能的 2% 以内。
  • CPU 开销与直接在主机上运行相当。
  • 作者在单张显卡上展示了 12 个 VM,每个 VM 都能编码 720p60 H.264 且不掉帧(受限于 VRAM、主机资源,以及 GeForce 显卡上的 12 会话 NVENC 上限)。

典型使用场景

  • 需要实时 GPU 加速的云游戏或远程桌面服务。
  • 需要物理 GPU 但希望通过 VM 隔离的 CI 管道或无服务器 AI 工作负载。
  • 任何受益于消费级 NVIDIA GPU 上 CUDA、Vulkan 或 NVENC 的无头工作负载。

限制与要求

  • 仅支持 Linux 主机和客户机;驱动程序版本必须为 535.129.03 或更新。
  • 安全性仅限于主机驱动程序 – 它 不是 硬件隔离边界。不受信任的租户应改用 passthrough 或 NVIDIA 官方 vGPU。
  • 项目处于早期阶段:已在两种 GPU 型号上测试,CUDA 可用但缺乏广泛的基准测试。

组织结构

  • driver/ – 客户机端内核模块(GPL-2.0)。
  • device/ – virtio 设备的 VMM 无关 Rust 实现(Apache-2.0)。
  • protocol/ – 共享协议定义(BSD-3/GPL-2.0)。

进一步阅读

  • 架构细节:ARCHITECTURE.md
  • 基准测试方法与结果:BENCHMARKS.md
  • 安全性考量:SECURITY.md

结论 virtio-nvgpu 是一个小众但实用的解决方案,用于在多个 Linux VM 间共享单个消费级 NVIDIA GPU,同时保留接近原生的性能,目标是需要在多租户环境中运行 GPU 加速工作负载、且不想负担 NVIDIA vGPU 授权成本的开发者和运维人员。

相关

  • Dispatch
  • 项目
  • 项目
  • Dispatch
  • 项目