Cyborg NVIDIA GPU 驱动器提案

本文档提出为 Cyborg 提供初始设计,用于管理 NVIDIA 物理 GPU 设备。请注意,虚拟化 GPU 超出本文档范围。我们仅支持将一个物理 GPU 卡直接透传到一个虚拟机。

问题描述

本文档将为 Cyborg 添加一个 NVIDIA GPU 驱动器,以管理特定的 NVIDIA 物理 GPU 设备。

用例

  • 作为运维人员,我希望 Cyborg agent 启动或定期进行资源检查。Cyborg NVIDIA GPU 驱动器应提供 discover() 函数来枚举 NVIDIA GPU 设备的列表,并报告主机上所有可用 NVIDIA GPU 加速器的详细信息,例如 PID(产品 ID)、VID(供应商 ID)和设备。

  • 作为用户,我希望启动一个附加了 NVIDIA GPU 卡的虚拟机,以加速计算能力。Cyborg 应该能够管理这种加速资源并将其分配给虚拟机(绑定)。

提议的变更

总的来说,目标是开发一个 Cyborg NVIDIA GPU 驱动器,该驱动器支持 NVIDIA GPU 加速器框架的发现接口。该驱动器应包括 discover() 函数。对于物理 GPU,该函数通过执行 lspci 命令并报告设备的原始信息样本,如下所示

[
  {
  "vendor": "10de",
  "product": "1db6",
  "device": "0000:af:00:0"
  }
]

生成 Cyborg 特定的驱动器对象和资源提供程序建模,用于 GPU 设备。以下是描述 pGPU 设备的对象的示例,符合 Cyborg 数据库模式和 Placement 数据模型。

Hardware     Driver objects       Placement data model
   |               |                      |
1 GPU         1 device                    |
   |               |                      |
   |         1 deployable       ---> resource_provider
   |               |            ---> parent resource_provider: compute node
   |               |                      |
1 pGPU       1 attach_handle    ---> inventories(total:1)

备选方案

数据模型影响

NVIDIA GPU 驱动器不会触及数据模型。Cyborg Agent 可以在发现操作期间调用 NVIDIA GPU 驱动器来更新数据库。

REST API 影响

无。

安全影响

通知影响

其他最终用户影响

用户可以通过 Cyborg NVIDIA GPU 驱动器管理 NVIDIA GPU 卡。例如,列出 NVIDIA GPU 设备,报告主机上所有可用 NVIDIA GPU 加速器的详细信息,与 NVIDIA GPU 绑定等。

性能影响

其他部署者影响

部署者需要确保 GPU 设备尚未被虚拟化。否则,我们无法将其用作 pGPU。

开发者影响

实现

负责人

主要负责人

宋文平

工作项

  • 在 Cyborg 中实现 NVIDIA GPU 驱动器

  • 添加相关的测试用例。

依赖项

测试

  • 将添加单元测试来测试此驱动程序。

文档影响

记录 Cyborg 项目中的 NVIDIA pGPU 驱动器。测试报告在 Cyborg wiki 中

参考资料

历史记录

修订版

发布

描述

Train

引入