一种FPGA集群管理与部署比特流的方法

文档序号:28660278发布日期:2022-01-26 19:56阅读:152来源:国知局
一种FPGA集群管理与部署比特流的方法
一种fpga集群管理与部署比特流的方法
技术领域
1.本发明涉及计算机系统结构以及异构处理系统领域,特别涉及一种异构计算集群的管理及使用方法。


背景技术:

2.随着云计算、大数据等概念的兴起,数据中心对计算能力的需求也大幅上升,诸如直播视频的编码与解码、图像的风格迁移、海量数据的加密与解密等等各类应用对计算能力的需求已经远远超过传统cpu处理器能力所及,因此异构计算系统逐渐成为产业发展的必经之路。相较于传统的单一cpu系统而言,在某些特定场景下(如视频的编码与解码),异构计算系统往往能够达到几十倍甚至上百倍的性能提升。
3.然而开发、部署一个异构计算程序门槛较高,往往需要程序员高成本地购置领域专用加速卡,人们迫切需求异构加速卡能够像云主机一样,在任何时间、任何地点在异构加速卡上调试异构计算程序。在此需求下催生了不同类型的异构计算集群平台,例如fpga平台、gpu平台、npu平台等等。这里提到的异构计算平台既可以是云服务厂商提供托管服务的、用户通过互联网访问的异构计算系统平台(以下简称云托管平台);也可以是自托管的,用户通过内网访问的异构计算平台(以下简称自托管平台)。现场可编程逻辑门阵列(field programmable gate array,fpga)是一种可以对电路进行编程的芯片。通过对fpga进行编程,可以高吞吐且低延时地完成大规模计算任务。以fpga云托管平台为例,最近几年,各大云服务厂商纷纷推出基于fpga加速卡的云服务,例如2017年1月阿里云发布了异构fpga计算解决方案;同年4月,美国亚马逊公司上线了fpga ec2实例f1。目前云服务厂商提供的fpga云托管的fpga集群平台,都是基于fpga加速卡依附于x86中央处理器的架构,二者通过pci-e总线连接。
4.目前fpga集群的管理与比特流的部署方法的研究仍处于起步阶段。各大云服务厂商提供的fpga云实例均是将x86资源与fpga加速卡资源一同打包租售给用户。对于fpga实例的用户来说,他们需要远程登录工具,例如使用ssh(secure shell,一种创建在应用层和传输层基础上的安全协议,可用于登录远程操作系统的工具)来登录到对应的x86主机中,手动部署比特流到fpga加速卡中。对于fpga集群管理与运维人员而言,他们也很难监控一个异构集群内所有fpga加速卡的物理资源使用情况,此前一种集群管理方法是,逐个主机收集通过pci-e接口连接的fpga加速卡的使用情况监控数据,最后统一汇合为一个集群的fpga加速卡的使用情况监控数据。此外,如果一个实例中的fpga加速卡资源始终空闲,而其所依附的x86资源已经租售给用户的情况下,这个空闲的fpga加速卡资源是无法租售给另一个用户的。因此,传统的fpga集群平台管理方法会造成1)用户部署比特流的不便、2)运维人员难以监控一个集群的fpga使用情况、3)fpga加速卡资源的浪费。


技术实现要素:

5.针对上述问题,根据本发明的第一方面,提出一种fpga集群,包括fpga集群管理节
点、fpga节点以及fpga容器编排系统,所述fpga节点包括fpga芯片、内存、nvme固态硬盘以及网卡,其中fpga容器编排系统包括运行fpga集群管理节点上的容器编排系统调度进程以及运行在fpga节点上的容器编排系统代理进程,其中所述容器编排系统调度进程用于将包含比特流文件的作业封装到容器镜像中提供给容器编排系统代理进程,所述容器编排系统代理进程用于将容器实例内包含的比特流文件配置到相应的fpga可编程逻辑设备的可编程逻辑中,所述容器编排系统调度进程与所述容器编排系统代理进程采用消息进行调度,所述消息的参数包括用于申请fpga可编程逻辑设备的比特流文件,以及用于释放fpga可编程逻辑设备的比特流文件。
6.在本发明的一个实施例中,其中所述容器编排系统调度进程用于接收用户提交的包含比特流文件的作业,确定fpga可编程逻辑设备名称,将所述比特流文件封装到一个容器镜像中,选择一个具有所述比特流文件所需的fpga可编程逻辑设备fpga节点以运行所述容器镜像,以及将所述作业分配给该fpga节点。
7.在本发明的一个实施例中,所述fpga节点的容器编排系统代理进程用于接受容器镜像,并为该容器创建实例,挂载fpga可编程逻辑设备的系统文件接口到容器实例中,将容器实例内包含的比特流文件配置到该fpga节点的fpga可编程逻辑设备的可编程逻辑中,以及向所述容器编排系统调度进程返回用户fpga资源申请是否成功的信息。
8.根据本发明的第二方面,提供一种用于本发明的fpga集群的部署比特流文件的方法,包括:
9.步骤100:容器编排系统调度进程接收用户提交的包含比特流文件的作业,确定fpga可编程逻辑设备名称,将所述比特流文件封装到一个容器镜像中,选择一个具有所述比特流文件所需的fpga可编程逻辑设备fpga节点运行所述容器镜像,,将所述作业分配给该fpga节点;
10.步骤200:被选中的fpga节点的容器编排系统代理进程接受容器镜像,并为该容器创建实例,挂载fpga可编程逻辑设备的系统文件接口到容器实例中,将容器实例内包含的比特流文件配置到该fpga节点的fpga可编程逻辑设备的可编程逻辑中;
11.步骤300:容器编排系统调度进程返回用户fpga资源申请是否成功。
12.在本发明的一个实施例中,步骤100中确定fpga可编程逻辑设备名称包括:
13.根据用户在作业中指定的所需的fpga可编程逻辑设备的名称作为确定的fpga可编程逻辑设备名称;或者
14.在用户没有指定fpga可编程逻辑设备的名称时,则获得该比特流文件所需要的可编程逻辑资源容量,根据所需可编程逻辑资源容量选择设备名称,所选择的设备名称的容量应为在所有大于所需容量的设备名称中容量最小的设备。
15.在本发明的一个实施例中,步骤100还包括:如果当前集群中无空闲的所需fpga可编程逻辑设备,可以选择容量更大一些的设备名称,或等待一个最大超时时间;如果没有容量更大一些的fpga可编程逻辑设备或超时后仍未有空闲fpga可编程逻辑设备则返回用户调度失败。
16.在本发明的一个实施例中,还包括:当fpga节点加入集群时,容器编排系统代理进程向容器编排系统调度进程注册所述fpga节点的fpga可编程逻辑设备。
17.在本发明的一个实施例中,还包括:容器编排系统代理进程注册fpga可编程逻辑
设备后,循环监听所注册的fpga可编程逻辑设备的占用情况,并定期上报给容器编排系统调度进程。
18.根据本发明的第三方面,提供一种用于本发明的fpga集群的释放fpga设备的方法,包括:
19.步骤1000:容器编排系统调度进程接收用户提交的释放fpga可编程逻辑设备请求后,向容器实例发送释放fpga可编程逻辑设备信号,容器实例根据所述信号采取释放fpga可编程逻辑设备动作;
20.步骤2000:如果释放fpga可编程逻辑设备成功,容器编排系统调度进程将该fpga设备状态转为空闲,向用户返回释放fpga可编程逻辑设备成功。
21.在本发明的一个实施例中,其中容器实例释放fpga可编程逻辑设备包括:将用户请求释放的fpga可编程逻辑设备中可编程逻辑部分重置信号置为有效,将可编程逻辑中配置的逻辑刷新掉。
22.根据本发明的第四方面,提供一种用于本发明的fpga集群的监控方法,还包括:通过在fpga集群中部署额外的监控系统对整个集群中的fpga节点进行监控。
23.在本发明的一个实施例中,部署额外的监控系统包括:
24.部署虚拟网络服务,使得所有容器均运行在同一个虚拟子网下;建立集群内地址解析服务,为集群内容器名称到容器ip建立映射关系;部署fpga节点信息采集器,使得fpga节点的所有物理资源使用信息被收集并集中上报给集群管理节点。
25.与现有技术相比,本发明的优点在于提供了一种异构计算集群的管理方法,既可以管理传统的cpu,又可以管理fpga加速卡,并且可以提高fpga可编程逻辑资源的利用率和集群的吞吐率。
附图说明
26.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
27.图1示出了根据本发明实施例的fpga集群示意图。
具体实施方式
28.针对背景技术中提出的问题,发明人进行了研究,提出通过fpga容器编排系统来完成对fpga集群的管理工作,fpga容器编排系统基于现有的容器编排系统构建对fpga可编程逻辑资源的管理能力,因此fpga容器编排系统既可以管理传统cpu资源,又可以管理fpga资源,可以利用的现有的容器编排系统包括但不限于google公司开源的容器调度工具kubernetes、docker公司开源的docker swarm。fpga集群的管理工作主要包括比特流部署,例如将一个比特流文件封装为一个比特流容器,由fpga容器编排系统自动选择一个空闲的fpga设备进行比特流文件的部署。
29.如图1所示,本发明的fpga集群包括fpga集群管理节点和fpga节点,图中fpga节点被编号为fpga#1、fpga#2、

fpga#n。fpga节点为fpga加速卡,fpga加速卡包括fpga芯片、内
存、nvme固态硬盘、网卡等。本发明采用的fpga芯片包括软核或硬核,硬核例如arm+fpga的soc中的arm,软核即在fpga可编程逻辑中划分出一部分逻辑专门运行cpu的逻辑,因此软核或硬核可以作为cpu运行,并在软核或硬核中运行操作系统,例如linux。集群管理节点可以在任意类型的服务器上运行,包括但不限于arm架构、x86架构、risc-v架构、或者fpga架构,因此还可以运行在fpga节点的fpga芯片的软核或硬核中。该fpga集群还可以管理传统的服务器(图1中未示出),这些服务器是arm架构、x86架构等架构,因此既可以管理传统的cpu,又可以管理fpga加速卡。
30.fpga容器编排系统包括运行在fpga集群管理节点上的容器编排系统调度进程(以下简称调度进程)与运行在fpga节点上的容器编排系统代理进程(以下简称代理进程)。fpga集群可以有奇数个集群管理节点,一个或多个管理节点组成fpga容器编排系统的控制平面。在集群管理节点上运行创建管理节点程序从而新建容器编排系统的控制平面。fpga节点中的操作系统上运行容器编排系统代理进程,该操作系统运行在fpga节点中的fpga芯片内,以使本fpga节点加入到fpga容器编排系统管理的fpga集群中,并接受调度进程的调度,容器编排系统调度进程也可以运行在fpga节点上,该节点既是集群管理节点也是fpga节点。
31.在本发明中fpga可编程逻辑作为独立的设备向fpga容器编排系统调度进程注册,并被称为fpga可编程逻辑设备。为了节约fpga可编程逻辑资源,当比特流文件所需fpga可编程逻辑资源较少时,不必将一个fpga芯片的所有fpga可编程逻辑都分配给该比特流文件,而是选择仅分配该芯片的一部分可编程逻辑,只要大于比特流文件所需的容量即可。因此可以将一个fpga芯片的可编程逻辑分为多份,例如2份,每份为该芯片可编程逻辑的1/2,或分为4份,每份为该芯片可编程逻辑的1/4,或其它任意分配方案,例如分为3份,1份为该芯片可编程逻辑的1/2,2份为1/4。当一个fpga芯片的所有fpga可编程逻辑被分为多份,则需为其注册多个设备,不同容量的可编程逻辑被指定为不同的设备名称,由于设备名称可以任意设定,为了方便管理,优选地,设备名称应反映容量大小,例如“四之分一fpga逻辑可编程逻辑设备”、“二之分一fpga逻辑可编程逻辑设备”等,由于设备名称指某类设备的名称,不同的fpga节点上相同容量的可编程逻辑设备的名称相同。
32.当fpga节点加入集群时,代理进程将该节点空闲的fpga可编程逻辑设备的容量大小和数量上报给集群管理节点的数据库。此时该fpga节点向调度进程注册了一组fpga可编程逻辑设备。例如集群中一个fpga节点中可能具有4个fpga可编程逻辑设备,每个设备占有该fpga节点的fpga可编程逻辑的1/4,或者仅有1个fpga可编程逻辑设备,该设备占有该fpga节点的所有fpga可编程逻辑。每个fpga节点在注册了fpga可编程逻辑设备后,该节点代理进程需要循环监听所注册的fpga可编程逻辑设备的占用情况,并定期上报给fpga集群管理节点,以使集群管理节点中的fpga设备资源的占用情况与其管理的所有fpga节点的实际信息一致。信息不一致是由各种异常造成,例如,fpga节点的fpga可编程逻辑设备没有通过fpga容器编排系统就被占用了,或者网络异常也可导致信息不一致。
33.根据本发明的一个实施例,提供一种用户申请fpga可编程逻辑设备的处理方法,其包括:
34.步骤11:当用户想要申请fpga可编程逻辑设备时,需要通过例如网页客户端向调度进程提交一个包含比特流文件的作业(如图1中的

),可选地,用户可以同时指定所需的
fpga可编程逻辑设备的名称。
35.步骤12:调度进程收到用户提交的比特流作业后,如果在步骤11中,用户没有指定fpga可编程逻辑设备的名称,则首先获得该比特流文件所需要的可编程逻辑资源容量,根据所需可编程逻辑资源容量选择设备名称,所选择的设备名称的容量应为在所有大于所需容量的设备名称中容量最小的设备。然后打包比特流文件到容器镜像中。调度进程选择一个fpga节点来运行这个容器镜像,这个节点需要具有比特流文件所需的fpga可编程逻辑设备(如附图1中

)。如果当前集群中无空闲的所需fpga可编程逻辑设备,可以选择容量更大一些的设备名称,或等待一个最大超时时间,如果没有容量更大一些的fpga可编程逻辑设备或超时后仍未有空闲fpga可编程逻辑设备则会返回用户调度失败。
36.步骤13:被选中的fpga节点上的代理进程接受封装好的容器镜像并为该容器创建实例,创建容器实例时挂载fpga可编程逻辑设备的系统文件接口到容器实例中,使得容器实例内可以访问对应的fpga可编程逻辑设备,将容器实例内包含的比特流文件配置到该fpga节点的被选中的fpga可编程逻辑设备的可编程逻辑中,如果处理成功,向调度进程返回处理成功的响应,否则返回处理失败的响应(如附图1中

)。
37.步骤14:如果申请fpga可编程逻辑设备成功,则调度进程返回用户申请成功(如附图1中

),否则返回用户申请失败。
38.用户申请fpga可编程逻辑设备成功后,可以在容器实例内运行用户与fpga可编程逻辑交互的代码来测试自己的硬件逻辑正确与否。
39.根据本发明的一个实施例,提供一种用户释放fpga设备的处理方法,其包括:
40.步骤21:当用户想要释放fpga可编程逻辑设备时,用户通过例如网页客户端向调度进程发出释放fpga可编程逻辑设备请求;
41.步骤22:调度进程收到请求后,向容器实例发送例如sigkill信号,容器实例收到信号后,可进行例如如下操作:将用户请求释放的fpga可编程逻辑设备中可编程逻辑部分重置信号置为有效,以及将可编程逻辑中配置的逻辑刷新掉。如果释放fpga可编程逻辑设备成功,则向调度进程返回释放成功,如果在经过最大超时等待时间后未能成功释放fpga可编程逻辑设备,则会向调度进程返回释放失败;
42.步骤23:如果释放fpga可编程逻辑设备成功,调度进程将该fpga设备状态转为空闲,向用户返回释放fpga可编程逻辑设备成功;如果fpga可编程逻辑设备失败,调度进程向用户返回释放fpga可编程逻辑设备失败。
43.此外,可以在fpga集群中部署额外的监控系统(例如由soundcloud公司开源的prometheus监控系统),以对整个集群中的fpga节点进行监控。根据本发明的一个实施例,在上述集群系统中部署虚拟网络服务(例如calico、fannel、cilium),使得所有容器均运行在同一个虚拟子网下;建立集群内地址解析服务(例如coredns),为集群内容器名称到容器ip建立映射关系;部署fpga节点信息采集器,使得fpga节点的所有物理资源使用信息(如fpga板卡上的内存用量、板卡上nvme固态硬盘的存储用量、板卡上可编程逻辑的使用情况、板卡上所有网卡的流量信息等等)可以被收集并集中上报给集群管理节点中运行的监控数据的数据库(如prometheus)。
44.为使本领域任何普通技术人员能够实现或者使用本公开内容,上面围绕本公开内容进行了描述。对于本领域普通技术人员来说,对本公开内容进行各种修改是显而易见的,
并且,本文定义的通用原理也可以在不脱离本公开内容的精神或保护范围的基础上适用于其它变型。此外,除非另外说明,否则任何方面和/或实施例的所有部分或一部分可以与任何其它方面和/或实施例的所有部分或一部分一起使用。因此,本公开内容并不限于本文所描述的例子和设计方案,而是与本文公开的原理和新颖性特征的最广范围相一致。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1