Cyborg Agent-Driver API

Cyborg agent 与计算节点中的每个 Cyborg driver 交互,以发现可用的设备。此规范定义了 agent-driver API 的结构。

启动或重启时,agent 发现 driver 的方式不会改变。

此规范适用于所有加速器,包括 GPU、高精度时间同步 (HPTS) 卡等。由于 FPGA 比其他设备有更多需要考虑的方面,因此某些部分可能侧重于 FPGA 特定的因素。该规范指出了 FPGA 特定的方面。

此规范的范围是 Rocky 版本,但 API 设计为可扩展以适应未来的版本。因此,该规范指出了 Rocky 特定的方面。

问题描述

1》 规定设备使用资源提供者 (RP)、资源类 (RC) 和特征来表示。创建它们所需的信息必须来自 Cyborg driver 到 Cyborg agent,而 agent 又需要将其推送到 Cyborg Conductor。

主要挑战是发现 FPGA 的设备拓扑。FPGA 可能有一个或多个部分重新配置区域,并且这些区域可能嵌套有一个或多个加速器。此外,它可能有局部内存,该内存要么被分区,要么在区域之间共享。

用例

  • 不同类型的设备(GPU、FPGA、HPTS 卡、Quick Assist)存在于同一主机中。

  • 不同类型的 FPGA,可能来自不同的供应商,存在于同一主机中。

  • FPGA 可能有一个或多个区域。每个区域可能有一个或多个加速器。

    • 在 Rocky 中,我们可能仅支持每个 FPGA 一个区域,并且每个区域仅支持一个加速器。

  • 对于 Rocky,建议不需要将局部内存作为资源暴露给编排系统。这是因为,由于每个 FPGA 只有一个区域,附加到该区域的实例将能够访问所有内存,无论有多少内存。对于 GPU 等非 FPGA 设备,似乎没有要求暴露显存。

Cyborg 将假定并处理以下组件关系

  • 一个产品(例如 Intel PAC Arria 10)可能对应多个 PCI 供应商/设备 ID。

  • 一个 PCI 供应商/设备 ID 可能对应不同的区域类型 ID。这可能是因为同一设备中有多个区域,或者是因为同一设备的不同的版本/修订。

  • 但是,相同的区域类型 ID 将永远不会出现在具有不同 PCI ID 的产品中。

提议的变更

目前,Cyborg agent 为其找到的每个 driver 调用 discover() API。discover() API 返回一个字典,该字典以设备的 PCI BDF 为索引。字典中的键值对的值元素包含具有该 BDF 的设备的组件和特征。

我们建议保留相同的模型,但增强字典以包含创建资源提供者和特征所需的信息,以便填充 Placement。以下是每个 PF 的设备字典中建议添加的键

"type": <enum-string> # GPU、FPGA 等之一
"vendor": <string>
"product": <string>

此外,在每个 PF 的 regions 条目中,建议添加以下键

"region-type-uuid": <uuid> # 可选,默认值:NULL
"bitstream-id": <uuid> # Glance/其他 UUID,可选,默认值:NULL
"function-uuid": <uuid> # 可选,默认值:NULL

当 agent 接收到设备的此字典时,它将执行以下操作

  • 如果支持嵌套 RP,则为设备和设备内的每个区域创建一个 RP。

  • 创建一个设备类型特征:CUSTOM_<type>_<vendor>_<product>。将其应用于设备 RP(如果存在 nRP 支持)或计算节点 RP。

    • 例如:CUSTOM_FPGA_INTEL_PAC_ARRIA10。

    • 注意:agent 将所有字符转换为大写,将空格替换为下划线,并检查是否符合自定义特征语法(参见 2

  • 为每个区域创建区域类型特征,格式为:CUSTOM_<type>_<vendor>_REGION_<type-uuid>。将其应用于相应的区域 RP(如果存在 nRP 支持)或计算节点 RP。

    • 例如:CUSTOM_FPGA_INTEL_REGION_<type-uuid>

    • 注意:对于 UUID,agent 将所有十六进制数字转换为大写,将连字符替换为下划线并验证所有字符。

  • 为每个区域中的每个功能创建功能类型特征,格式为:CUSTOM_<type>_<vendor>_FUNCTION_<function-uuid>。将其应用于相应的区域 RP(如果存在 nRP 支持)或计算节点 RP。

    • 例如:CUSTOM_FPGA_INTEL_FUNCTION_<function-uuid>

备选方案

N/A

数据模型影响

将新字段添加到 Deployables 和 Attributes 下的数据库中。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发者影响

实现

负责人

工作项

依赖项

测试

需要更新单元测试以检查新添加的字段。

文档影响

参考资料

1

Cyborg/Nova 调度规范

2

自定义特征

历史记录

可选部分,旨在每次更新规范时使用,以描述新的设计、API 或任何数据库模式更新。有助于让读者了解随着时间的推移发生了什么。

修订历史

发布名称

描述

Rocky

引入