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
- 项目