一种多处理卡间的数据传输方法和系统与流程
未命名
07-23
阅读:104
评论:0
1.本说明书涉及计算机技术领域,特别涉及一种多处理器或多处理卡间的数据传输方法和系统。
背景技术:
2.多处理器设备是指一台包含多个处理器的处理设备。每个处理器均具有数据运算的能力,之间可以进行数据交换,由统一的操作系统管理,可以共享i/o设备、磁盘等外设。一般来说,在多处理器设备中多个处理器位于同一主板上,主板上布设线路以及开设有插槽,处理器以板卡形式卡接在插槽上,因此,处理器又可称为处理卡。
3.多处理器设备相比单处理器设备具有更加强劲的数据运算能力,一般用作工业级计算设备,实现大数据计算。在大数据计算场景中,多处理器之间需要进行频繁、大量的数据交换,如何优化处理器之间的数据传输,成为亟待解决的问题。
技术实现要素:
4.本说明书一个或多个实施例提供一种多处理卡间的数据传输方法,所述多处理卡间的数据传输方法包括:通过数据传输客户端接收应用进程的调用进而向数据传输服务进程发起卡间数据传输请求,卡间数据传输请求包括目标地址和源地址,目标地址和源地址对应不同的处理卡;通过数据传输服务进程从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给数据传输客户端;通过数据传输客户端基于目标通道的数量和待传输数据得到待传输数据的一个以上数据子集;通过数据传输客户端基于一个以上数据子集,向与目标通道相关的处理卡上的传输进程发起数据传输指令;通过与目标通道相关的处理卡上的传输进程将相应数据子集进行传输,进而将待传输数据传输至目标地址。
5.本说明书一个或多个实施例提供一种多处理卡间的数据传输系统,所述多处理卡间的数据传输系统包括:数据传输客户端,由应用进程调用进而向数据传输服务端发起卡间数据传输请求,卡间数据传输请求包括目标地址和源地址,目标地址和源地址对应不同的处理卡;数据传输服务端,用于响应卡间数据传输请求,从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给数据传输客户端;数据传输客户端还用于基于目标通道的数量和待传输数据得到待传输数据的一个以上数据子集,以及基于一个以上数据子集,向与目标通道相关的处理卡上的传输模块发起数据传输指令;传输模块,用于响应数据传输指令,对相应数据子集进行传输,进而将待传输数据传输至目标地址。
6.本说明书一个或多个实施例提供一种存储介质,用于存储计算机指令,当所述计算机指令中的至少一部分被处理器或处理卡执行时,实现前述多处理卡间的数据传输方法。
7.本说明书一个或多个实施例提供一种装置,包括多个处理卡以及存储介质,多个
处理卡之间具有直连通道和/或间接通道,间接通道包括两跳以上的直连通道,所述存储介质存储有计算机指令,多个处理卡用于执行计算机指令以实现前述多处理卡间的数据传输方法。
8.本说明书一个或多个实施例提供一种多处理卡间的数据传输方法,多处理卡之间具有直连通道和/或间接通道;所述方法包括:接收卡间数据传输请求;所述卡间数据传输请求包括目标地址以及源地址,目标地址和源地址对应不同的处理卡;确定从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道;获取所述两条以上通道中每一条的权重值;所述权重值与通道的数据传输带宽正相关,与通道的观测负载量负相关;基于权重值,从所述两条以上通道中选出一条以上的目标通道,用于传输待传输数据。
附图说明
9.本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:图1是根据本说明书一些实施例所示的多处理器主板示意图;图2是根据本说明书一些实施例所示的多处理卡间的数据传输方法的示例性流程图;图3是根据本说明书一些实施例所示的确定目标通道的示例性流程图;图4是根据本说明书一些实施例所示的构件表的示例图;图5是根据本说明书一些实施例所示的负载表的示例图;图6是根据本说明书一些实施例所示的中转处理卡上数据子集缓存方法的示例性原理图;图7是根据本说明书另一些实施例所示的中转处理卡上数据子集缓存方法的示例性原理图;图8是根据本说明书一些实施例所示的多处理卡间的数据传输系统的示意框图。
具体实施方式
10.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
11.应当理解,本文使用的“系统”、“装置”、“单元”和/或“模块”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
12.如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
13.本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
14.大数据处理场景中,常用到多处理器设备。多处理器设备是指一台设备中包含多个处理器。每个处理器均具有数据运算的能力,之间可以进行数据交换,由统一的操作系统管理,可以共享i/o设备、磁盘等外设。一般来说,多个处理器位于同一主板上,主板上布设线路以及开设有插槽,处理器以板卡形式卡接在插槽上。在一些场景中,术语“处理器”、“处理卡”以及“处理器板卡”可以互换。
15.位于同一处理设备或同一主板上的处理器可以分为主处理器和协处理器。主处理器是处理设备的处理核心,一般由通用cpu(center process unit,中央处理器)实现。协处理器接收主处理器调度,用于协助主处理器进行某些特定的计算任务。根据具体负责的计算任务,协处理器可以分为数学协处理器、图形协处理器等。数学协处理器用于数字处理或计算,或称为浮点协处理器,其数字运算的速度比主处理器更快。图形处理器,又称为gpu(graphic processing unit),用于图形显示以及计算加速,具有高速并行计算的特点,适用于可并行处理的计算任务。
16.在一些实施例中,多处理器设备可以用于机器学习模型训练或预测。具体的,当训练样本较多时,可以在多处理器上实现分布式训练。例如,主处理器可以将同一初始模型分发给多个协处理器,每个协处理器使用一部分训练样本对初始模型进行训练。作为示例,各协处理器可以使用初始模型处理训练样本的特征信息,得到预测结果,并将预测结果返回给主处理器,主处理器根据各预测结果以及训练样本的标签得到损失函数值,进而得到平均梯度值,将平均梯度值返回给各协处理器,协处理器基于平均梯度值进行本地模型的参数更新,以此进行多轮迭代分布式训练,便可以得到训练好的模型。相对于单处理器的处理设备,由于多个协处理器并行进行模型训练,大大缩减了模型训练时间。当模型体量较大时,可以在多处理器上实现分布式预测。例如,主处理器可以将训练好的模型拆分为多个子模型,分发给多个协处理器,同时将待预测对象的特征项进行垂直切分,对应分发给各协处理器,协处理器使用本地子模型处理待预测对象的相应特征项的特征值,得到局部预测结果,协处理器将局部预测结果返回给主处理器,主处理器聚合各局部预测结果得到最终的预测结果。可以看出,在大规模模型训练或预测过程中,处理器之间具有大量、频繁的数据交互。
17.需要说明的是,模型分布式训练/预测是多处理器设备的一种应用场景,不应将其理解为是多处理器设备的应用场景的限制,在一些实施例中,多处理器计算场景也适用于知识图谱的查询等。
18.图1是根据本说明书一些实施例所示的多处理器主板示意图。如图1所示,主板100上包括两块cpu板卡以及8块gpu板卡,处理器板卡之间布设有数据线或数据通道。其中,cpu0和cpu1可以看作主处理器,gpu0~7可以看作协处理器。cpu和gpu之间可以通过pcie接口进行直接连接,其传输带宽可以达到16gb/s(g byte/second)或32gb/s。gpu之间可以通过nvlink接口直接连接,其传输带宽比pcie更大,例如可以达到150gb/s或以上。cpu之间可以通过qpi或upi等接口直接连接,其传输带宽介于pcie和nvlink之间。在一些实施例中,两
个以上gpu可以作为一组(如同一虚线框中的gpu0和gpu1),通过一条pcie直连通道与cpu连接,cpu则可以通过“选址”的方式将不同的信息分别传输给gpu0或gpu1。在两个gpu之间,可以有两条以上直连通道,此时这两个gpu之间的带宽为两个以上直连通道的带宽之和。
19.根据图1可以看出,两个处理器板卡之间,除了可以通过直连通道进行数据交换,还可以通过包括两条(或两跳)以上直连通道组成的间接通道连通。例如,cpu0到gpu0,其具有一条pcie直连通道,还可以经由间接通道cpu0-gpu3-gpu0,或者间接通道cpu0-cpu1-gpu6-gpu0等进行数据交互。当两个处理器之间需要进行数据交互时,如何从多个通道中选出适于当前数据传输的目标通道,进而提高数据传输速度或者均衡数据传输负载,成为值得研究的问题。
20.为此,本说明书一些实施例提出了一种跨多处理器卡和/或跨任务的全局多通道数据传输加速方法,包括多通道优化选择、数据切分、并发传输、应用层透明等多个内在优化步骤,最终显著加速了处理卡之间的数据传输性能。
21.图2是根据本说明书一些实施例所示的多处理卡间的数据传输方法的示例性流程图,其将数据传输以cs(client-server,服务端-客户端)架构实现。在一些实施例中,多处理卡可以包括主处理器cpu板卡以及多个协处理器gpu板卡。服务端由独立的进程实现,运行于cpu板卡上。各处理器板卡上部署有传输进程,用于实现数据传输。客户端供应用程序(或应用进程)调用,向服务进程发起请求或者向相应处理卡上的传输进程发送数据传输指令。
22.应用进程即应用程序对应的进程,其负责应用层面的数据运算或信息处理,如使用模型处理特征数据得到预测结果、基于训练样本进行模型训练等计算。当应用进程获得计算结果(可以是中间结果也可以是最终结果)后,需要将计算结果传输给位于其他处理卡上的应用进程进行后续运算,则会引发处理卡之间的数据传输。在本说明书一些实施例中,当应用进程需要将数据传输给其他处理卡时,可以调用数据传输客户端向数据传输服务进程发起卡间数据传输请求。相应的,数据传输客户端可以部署在各处理卡上,供应用进程调用。如图2所示,本说明书一些实施例提供的数据传输方法200具体可以包括以下步骤:步骤210,通过数据传输客户端接收应用进程调用,进而向数据传输服务进程发起卡间数据传输请求。
23.数据传输客户端可以以函数形式封装,其调用接口包括函数名以及输入参数。数据传输客户端的输入参数可以包括待传输数据的源地址以及目标地址。所述源地址具体可以是待传输数据所在的存储区域的首地址。当应用程序位于cpu板卡上时,源地址可以指向处理设备内存的某一段存储区域或者位于磁盘上的某一存储区域,当应用程序位于gpu板卡上时,源地址可以指向gpu中显存的一段存储区域。目标地址为待传输数据将要达到的存储区域,其指向与前述应用程序不同的处理卡上的某一存储区域,与源地址类似的,具体的存储位置可以是内存、磁盘或者是显存等。在一些实施例中,源地址对应的处理卡可以称为源处理卡或第一处理卡,目标地址对应的处理卡可以称为目标处理卡或第二处理卡。在一些实施例中,输入参数还可以包括数据偏移量,数据偏移量反映了待传输数据的数据量,如1024b(byte,字节)、320b等。基于待传输数据的首地址以及偏移量,数据传输客户端可以确定待传输数据中每一字节数据的在源处理卡对应存储区域中的地址。
24.应用程序可以通过数据传输客户端的调用接口调用数据传输客户端,数据传输客
户端获得待传输数据的源地址和目标地址,此后客户端可以向服务进程发起卡间数据传输请求,请求中可以包括所述待传输数据的源地址以及目标地址。由于数据传输客户端位于应用进程中,其可以通过管道、套接字等进程间通信方式将卡间数据传输请求传输给数据传输服务进程。
25.步骤220,通过数据传输服务进程从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给所述数据传输客户端。
26.在一些实施例中,数据传输服务进程可以按照图3所示的流程300确定目标通道。如图3所示,流程300包括:步骤310,确定从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道。
27.如前述,所述多处理卡中的任意两个处理卡之间具有多条通道,包括一条以上的直连通道以及一条以上的间接通道。在一些实施例中,数据传输服务进程可以根据卡间数据传输请求中的源地址和目标地址确定各自对应的处理卡。具体的,源地址可以包括处理卡的编号以及待传输数据在处理卡上的存储区域(如内存、寄存器或显存)的首地址,目标地址类似。又或者,每一个存储地址在多处理卡间是全局唯一的,因此,通过源地址或目标地址可以直接确定其指向哪一张处理卡。此后,数据传输服务进程可以确定源地址对应的第一处理卡到目标地址对应的第二处理卡之间的全部通道。
28.在一些实施例中,数据传输服务进程可以获取构件表,构件表记录了多处理卡之间的直连通道以及数据传输带宽。图4为本说明书一些实施例所示的构件表,如图4所示,表400记录了所述多个处理卡中具有直连通道的处理卡,以及每个直连通道的数据传输带宽。从表400可以看出, cpu与gpu0之间具有直连通道,数据传输带宽为12gb/s,gpu0与gpu1之间具有直连通道,数据传输带宽为24gb/s。表400中还记载了处理卡内部的数据传输带宽,如gpu0内部的数据传输带宽高达1440gb/s。由于间接通道由两条以上直连通道组成,因此基于构件表,数据传输服务进程还可以确定任意两张处理卡之间的间接通道,进而确定第一处理卡到第二处理卡之间的全部通道。处理卡之间的直连通道是固定不变的,因此,数据传输服务进程可以仅获取一次构件表。
29.在一些实施例中,主板或处理卡的硬件驱动程序可以提供构件表查询api(application programming interface,应用程序编程接口),数据传输服务进程可以通过调用该接口获取所述构件表。
30.步骤320,获取两条以上通道中每一条的权重值。
31.为了提高传输速率,可以从第一处理卡和第二处理卡之间的两条以上通道中选出数据传输带宽较大的用以待传输数据的传输。实际使用时,通道的数据传输效率除了与带宽相关以外,还会受到通道上的观测负载量的制约。观测负载量可以是通道正在传输和/或等待传输的数据量,其反映通道被占用的实际情况。为此,数据传输服务进程可以基于数据传输带宽和观测负载量获取每条通道的权重值,以便筛选。
32.在一些实施例中,数据传输服务进程可以基于表400确定第一处理卡和第二处理卡之间直连通道的数据传输带宽。对于两卡之间的间接通道,可以获取间接通道上每一条直连通道的数据传输带宽,并将其中的最小数据传输带宽作为该间接通道的数据传输带
宽。由此,数据传输服务进程可以获取第一处理卡和第二处理卡之间每条通道的数据传输带宽。
33.在一些实施例中,数据传输服务进程可以获取负载表,负载表记录了多处理卡之间的直连通道上的观测负载量,观测负载量会随时间变化,因此,数据传输服务进程需要在每次使用时获取一次负载表。与构件表类似的,数据传输服务进程可以通过调用主板或处理卡提供的api,获得负载表。图5为本说明书一些实施例所示的负载表500,从表500可以确定当前cpu与gpu0之间的直连通道上的观测负载量为1gb,gpu0和gpu1之间的直连通道上的观测负载量为4gb。
34.基于负载表,数据传输服务进程可以确定第一处理卡和第二处理卡之间全部直连通道的观测负载量。对于两卡之间的间接通道,可以获取间接通道上每一条直连通道的观测负载量,将各直连通道的观测负载量进行累加,便可得到该间接通道的观测负载量。由此,数据传输服务进程可以获取第一处理卡和第二处理卡之间每条通道的观测负载量。
35.在一些实施例中,数据传输服务进程可以基于每条通道的数据传输带宽和观测负载量确定其权重值。具体的,权重值可以与通道的数据传输带宽正相关,与观测负载量负相关。在一些实施例中,数据传输服务进程可以基于数据传输带宽确定第一权重值,第一权重值与数据传输带宽正相关,基于观测负载量确定第二权重值,第二权重值与观测负载量负相关,最后数据传输服务进程可以综合第一权重值和第二权重值,得到该通道的权重值,例如,可以对两者进行相加或相乘,得到所述权重值。
36.步骤330,基于权重值,从所述两条以上通道中选出一条以上的目标通道,用于传输所述待传输数据。
37.在一些实施例中,数据传输服务进程可以将第一处理卡和第二处理卡中的通道基于权重值进行降序排序,选取前n条通道作为目标通道,n可以根据实际需要设置,如取1、2或3等。
38.数据传输服务进程可以向数据传输客户端返回目标通道的标识。在一些实施例中,处理卡之间的通道可以具有唯一的标识。具体的,标识可以包括字符串或数字。在一些实施例中,通道的标识可以由途径的处理卡的编号组成,如间接通道cpu0-gpu3-gpu0,直连通道cpu0-gpu0,当两卡之间具有两条以上直连通道时,通道标识还可以包括直连通道标识,如直连通道gpu1-gpu2-1、gpu1-gpu2-2,其中的单个数值“1”、“2”为直连通道标识。相应的,间接通道标识可以是cpu0-(gpu2-gpu1-1)或者cpu0-(gpu2-gpu1-2)。其中,括号也可以省略。
39.步骤230,通过数据传输客户端基于目标通道的数量和待传输数据得到所述待传输数据的一个以上数据子集。
40.数据传输客户端可以基于目标通道的数据将待传输数据拆分为一个以上数据子集。在一些实施例中,数据子集可以与目标通道一一对应,当目标通道数量为1时,数据子集个数为1,即不将待传输数据拆分。在一些实施例中,卡间数据传输请求还可以包括待传输数据的存储区域相对源地址的偏移量,偏移量即待传输数据的数据量,此时,数据传输客户端可以基于偏移量确定每个数据子集的数据量。作为示例,可以将数据传输带宽较大的目标通道对应的数据子集的数据量设置的较大。例如,偏移量为1280b,目标通道数为3,其带宽分别为48gb/s、12gb/s、12gb/s,可以将待传输数据拆分为3个数据子集,数据量分别为
1000b,140b、140b。
41.数据传输客户端可以基于源地址以及数据子集的数据量得到各数据子集的首地址以及子集偏移量。续前例,若源地址为0xb13ff(16进制),则可以确定第一个数据子集的首地址为0xb13ff,子集偏移量为1000b,第二个数据子集的首地址为0xb13ff+0x3e8(1000的16进制表示),子集偏移量为140b,第三个数据子集的首地址为0xb13ff+0x3e8(1000的16进制表示)+0x8c(140的16进制表示),子集偏移量为140b。
42.步骤240,通过数据传输客户端基于所述一个以上数据子集,向与目标通道相关的处理卡上的传输进程发起数据传输指令。
43.在一些实施例中,数据传输客户端可以与目标通道相关的处理卡上的传输进程通信,向其发送数据传输指令。所述数据传输指令可以包括数据子集的首地址、子集偏移量以及目标地址。在一些实施例中,数据传输指令还可以包括待传输数据的数据量(和/或数据子集的数量)以及数据子集的标识。数据子集的标识可以指示各数据子集的在源地址对应的存储区域中的存储顺序,如在第一处理卡上存储位置靠近源地址的数据子集可以具有较小的序号。
44.对于直连的目标通道,数据传输客户端可以直接与第二处理卡上的传输进程通信,将所述数据传输指令传输给第二处理卡的传输进程。
45.对于间接的目标通道,数据传输客户端可以与通道上最近的处理卡通信,将数据传输指令发送给该处理卡。所述最近的处理卡可以是目标通道中与第一处理卡直接连接的处理卡。以目标通道cpu0-gpu3-gpu1为例,第一处理卡为cpu0,其最近的处理卡即为gpu3。在一些实施例中,数据传输客户端还可以将中转路由信息一并传输给最近的处理卡,中转路由信息反映了数据子集到达目标地址前途径的处理卡,在一些实施例中,数据传输客户端可以直接将由途径的处理卡的编号组成目标通道的标识传输给最近的处理卡的传输进程。所述最近的处理卡的传输进程可以基于数据传输指令,从第一处理卡上读取数据子集到本地,再基于中转路由信息向目标通道上下一处理卡的传输进程发起数据传输指令,以此类推,数据子集在目标通道上的中转处理卡上依次跳转,最终到达目标地址。关于传输进程传输数据子集的更多内容可以在步骤250的相关说明中找到。
46.步骤250,通过与目标通道相关的处理卡上的传输进程将相应数据子集进行传输,进而将待传输数据传输至所述目标地址。
47.处理卡上的传输进程接收到数据传输指令后,可以基于指令中的数据子集的首地址和子集偏移量定位到数据子集在前一张处理卡对应的存储区域,并从中读取数据到本处理卡的存储区域中。
48.当目标通道为直连通道时,第二处理卡上的传输进程可以从第一处理卡对应的存储区域中直接读取数据子集,并存放到目标地址指向的存储区域。
49.当目标通道为间接通道时,通道上除第一处理卡和第二处理卡以外的处理卡可以称为中转处理卡。对于中转处理卡而言,为了传输数据子集,需要从前一张处理卡对应的存储区域读取数据子集并缓存在本地,再向下一张处理卡发起数据传输指令。在一些实施例中,中转处理卡上的传输进程可以将数据子集存储在全局存储区域或者该传输进程的临时存储区域中。临时存储区域占用的是与传输进程相关的计算资源,其可以是与传输进程对应的寄存器,当传输进程退出时,临时存储区域也将释放。全局存储区域是相对于临时存储
区域而言的,其占用的是内存或显存区域。传输进程选择临时存储区域存储数据或者选择全局存储区域缓存数据,在传输性能上基本持平,区别主要在于占用的资源类型不同。在一些实施例中,传输进程可以预先判断临时存储区域和全局存储区域的占用情况,动态选择。例如,当临时存储区域的空闲量大于设定阈值时,可以将数据缓存在临时存储区域中,否则,将数据缓存在全局存储区域中。
50.在一些实施例中,当传输进程确定将数据子集缓存在全局存储区域时,其可以在全局存储区域开设两个以上预设大小的缓冲区域。缓冲区域的大小可以是固定的,如64b、128b等。针对每一个缓冲区域,传输进程可以开设一个对应的任务,该任务用于将数据子集中的一部分数据读取并缓存到其对应的缓冲区域中。在一些实施例中,各任务可以是并列执行或间隔一定时间差执行。
51.多个任务并列执行可以认为是多个任务是独立的执行,不受其余任务执行状态的影响。结合图6,假设存在两个缓冲区域,即buffer1和buffer2,每个缓冲区域的大小为64b,数据子集大小为320b,目标通道为cpu0-gpu3-gpu0,当前中转处理卡为gpu3,传输进程针对缓冲区域开设了两个任务s1、s2,任务s1用于基于数据子集的首地址以及子集偏移量,从cpu0读取不超过64b(如读取64b)的数据到gpu3的buffer1中,任务s2用于从数据子集的剩余部分读取不超过64b的数据到buffer2,例如,s2可以从(首地址+64b)的位置读取64b的数据到buffer2。在一些实施例中,任务可以在将数据缓存到缓冲区域后向下一处理卡(如第二处理卡gpu0)的传输进程发起数据传输指令,数据传输指令可以包括缓冲区域的地址以及其中的数据量。下一处理卡的传输进程将缓冲区域的数据读取后,任务可以从数据子集中剩余部分中继续读取数据到缓冲区域。例如,s1可以从(首地址+64b+64b)的位置继续读取64b的数据到buffer1,s2可以从(首地址+64b+64b+64b)的位置继续读取64b的数据到buffer2,任务s1和任务s2依次并列执行,直到数据子集中的320b数据全部通过当前中转处理卡中的缓冲区域到达下一处理卡中。其中,数据从cpu到gpu的过程可以看作是h2d,数据在不同gpu之间传输的过程可以看作是d2d。
52.多个任务间隔一定时间差执行可以认为是一个任务的启动依赖于另一任务的执行状态,具体可以是当前一任务执行一定时间后另一任务才得以被触发。在一些实施例中,某一任务可以在执行一定时间后产生一个事件标识,如event1,或者将事件标识置为有效状态,如置为ready,另一任务不断查询所述事件标识,当其状态为有效时,该任务才执行。结合图7,续前例,每个任务处理的事务与前例相同,区别仅在于,图7的任务s1在将数据存储到buffer1后会产生一个事件标识,任务s2不断查询该事件标识,当其状态为有效时,任务s2才执行。多个任务通过这种“流水”式依次执行,可以减轻处理卡之间的带宽占用,即同一时刻通道(如cpu0到gpu3的直连通道)上传输的数据量较并列方式少。
53.当目标通道中的中转处理卡为两个以上时,每个中转处理卡可以按照前述方式将数据子集从前一处理卡读取到本地缓冲区域,然后到达下一处理卡。
54.对于间接的目标通道中的第二处理卡,即目标地址对应的处理卡,其传输进程在收到数据传输指令后可以从前一中转处理卡中的缓冲区域读取数据到目标地址。在一些实施例中,第二处理卡上的传输进程也可以开设多个任务,在前一处理卡的传输任务的触发下并列或流水式的执行数据传输任务(类似中转处理卡上的传输进程),将对应缓冲区域中的数据读取到目标地址对应的存储区域。
55.在一些实施例中,待传输数据会分为两个以上数据子集,通过两个以上目标通道传输到第二处理卡。此时,第二处理卡的传输进程可以基于来自不同目标通道的数据子集的标识按序存储到目标地址对应的存储区域,直到待传输数据全部到达目标地址对应的存储区域。在一些实施例中,当待传输数据全部到达目标地址对应的存储区域后,第二处理卡的传输进程可以生成另一事件标识,如event2。数据传输客户端可以定时检测该事件标识,当期有效时,可以确定应用进程请求传输的数据已经传输完成,并向应用进程返回传输完成的信息。应用进程可以基于返回的信息执行其他环节的处理操作,如发起对下一段数据的卡间数据传输请求。
56.图8是根据本说明书一些实施例所示的多处理卡间的数据传输系统的示例性框图。如图8所示,系统800可以包括数据传输服务端810、一个以上数据传输客户端(如数据传输客户端821、822
…
)以及一个以上传输模块(如传输模块831、832
…
)。
57.其中,数据传输客户端用于被应用进程(如应用进程1、应用进程2等)调用进而向数据传输服务端810发起卡间数据传输请求;所述卡间数据传输请求包括目标地址和源地址,目标地址和源地址对应不同的处理卡。
58.数据传输服务端810用于响应卡间数据传输请求,从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给所述数据传输客户端。
59.所述数据传输客户端还用于基于目标通道的数量和待传输数据得到所述待传输数据的一个以上数据子集;以及基于所述一个以上数据子集,向与目标通道相关的处理卡上的传输模块发起数据传输指令。
60.传输模块用于响应数据传输指令,对相应数据子集进行传输,进而将待传输数据传输至所述目标地址。
61.在一些实施例中,所述多处理卡位于同一处理设备的主板上,且包括cpu板卡以及gpu板卡;其中,所述应用进程的数量为一个以上,分别位于cpu板卡和/或gpu板卡上;所述数据传输服务端位于cpu板卡上;传输模块的数量为一个以上,分别位于cpu板卡和/或gpu板卡上。
62.关于各模块的更多内容可以参见图2的相关说明,在此不再赘述。应当理解,图8所示的系统及其模块可以利用各种方式来实现。例如,在一些实施例中,系统及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。在一些实施例中,上述各模块可以由计算机代码实现,当计算机代码被执行时,客户端可以表现为函数本体及其接口,服务端和传输模块可以分别表现为不同的进程。本领域技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、cd或dvd-rom的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本说明书的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
63.需要注意的是,以上对于系统及其模块的描述,仅为描述方便,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解该系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。或者对某些模块进行拆分,得到更多的模块或者该模块下的多个单元。诸如此类的变形,均在本说明书的保护范围之内。
64.在一些实施例中,系统800可以封装成库(library)供其他程序编译系统调用。作为示例,可以供机器学习模型框架(如pytorch、tensorflow等)调用。机器学习模型框架用于机器模型训练或预测,开发人员通过编写相应的应用程序实现模型训练或预测功能,应用程序被框架编译后,得到可执行代码,在可执行代码中通过调用系统800中的模块,便能够实现图2所示的卡间数据传输步骤。
65.本说明书一些实施例还提供了一种多处理卡间的数据传输方法,多处理卡之间具有直连通道和/或间接通道;所述方法包括:接收卡间数据传输请求;所述卡间数据传输请求包括目标地址、源地址以及待传输数据标识,目标地址和源地址对应不同的处理卡;确定从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道;获取所述两条以上通道中每一条的权重值;所述权重值与通道的数据传输带宽正相关,与通道的观测负载量负相关;基于权重值,从所述两条以上通道中选出一条以上的目标通道,用于传输所述待传输数据。
66.本说明书一些实施例提供的多处理卡间的数据传输方法除了应用在多处理器设备中外,还可以用于包含多台计算设备的计算集群中,此时,集群中的每一台计算设备可以对应一张处理卡,通过该方法,可以在计算集群中优化数据传输。关于多处理卡间的数据传输方法的具体内容还可以参见图3的相关说明,在此不再赘述。
67.本说明书实施例可能带来的有益效果包括但不限于:(1)通过优化目标通道选择策略,有效加速了处理卡之间的数据传输速率:实验表明,采用本说明书实施例提供的数据传输方法后,相对于cpu卡到gpu卡通过单直连通道进行数据传输,数据传输速率提高到2.8倍,相对于gpu卡通过单直连通道进行数据传输,数据传输速率提到高4.5倍;(2)通过优化目标通道选择策略,有效均衡了处理卡之间通道上的负载量,优化了计算资源配置;(3)本说明书实施例提供的数据传输方法可以应用层透明,原有的应用程序无需修改也可以在编译环节通过调用本说明书提供的接口或模块,实现本说明书一些实施例提供的卡间数据传输方法。
68.上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
69.同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
70.此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母
的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。
71.同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
72.一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有
±
20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本说明书一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。
73.针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
74.最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
技术特征:
1.一种多处理卡间的数据传输方法,多处理卡之间具有直连通道和/或间接通道,间接通道包括两跳以上的直连通道;所述方法包括:通过数据传输客户端接收应用进程的调用向数据传输服务进程发起卡间数据传输请求;所述卡间数据传输请求包括目标地址和源地址,目标地址和源地址对应不同的处理卡;通过数据传输服务进程从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给所述数据传输客户端;通过数据传输客户端基于目标通道的数量和待传输数据得到所述待传输数据的一个以上数据子集;通过数据传输客户端基于所述一个以上数据子集,向与目标通道相关的处理卡上的传输进程发起数据传输指令;通过与目标通道相关的处理卡上的传输进程将相应数据子集进行传输,进而将待传输数据传输至所述目标地址。2.如权利要求1所述的方法,所述多处理卡位于同一处理设备的主板上,且包括cpu板卡以及gpu板卡;其中,所述应用进程数量为一个以上,分别运行于cpu板卡和/或gpu板卡上;所述数据传输服务进程运行于cpu板卡上;传输进程数量为一个以上,分别运行于cpu板卡和/或gpu板卡上。3.如权利要求1所述的方法,所述待传输数据包括所述应用进程计算得到的计算结果。4.如权利要求1所述的方法,所述数据传输服务进程用于:确定从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道;获取所述两条以上通道中每一条的权重值;所述权重值与通道的数据传输带宽正相关,与通道的观测负载量负相关;基于权重值,从所述两条以上通道中选出一条以上的目标通道,用于传输所述待传输数据。5.如权利要求4所述的方法,为了获取所述两条以上通道中每一条的权重值,所述数据传输服务进程用于:获取构件表;所述构件表包括所述多处理卡间直连通道的数据传输带宽;将间接通道中两跳以上直连通道中的最小数据传输带宽作为该间接通道的数据传输带宽;基于数据传输带宽确定所述两条以上通道中每一条的第一权重值;第一权重值与通道的数据传输带宽正相关;获取负载表;所述负载表包括所述多处理卡间直连通道的观测负载量;观测负载量反映相应通道上正在传输的和/或待传输的数据量;将间接通道中两跳以上直连通道的观测负载量进行累加,得到该间接通道的观测负载量;基于观测负载量确定所述两条以上通道中每一条的第二权重值;第二权重值与通道的观测负载量负相关;对于所述两条以上通道中每一条:基于第一权重值和第二权重值,得到其所述的权重值。
6.如权利要求1所述的方法,所述数据子集与目标通道一一对应;所述卡间数据传输请求还包括待传输数据的存储区域相对所述源地址的偏移量;所述数据传输客户端还用于:基于所述偏移量将待传输数据拆分为数据量不同的数据子集;数据传输带宽较大的目标通道对应的数据子集的数据量较大;基于所述源地址以及数据子集的数据量得到各数据子集的首地址以及子集偏移量;所述数据传输指令包括数据子集的首地址以及子集偏移量。7.如权利要求1或6所述的方法,当目标通道为间接通道时,通过数据传输客户端向与目标通道相关的处理卡上的传输进程发起数据传输指令,包括:通过数据传输客户端向目标通道上最近的处理卡上的传输进程发起数据传输指令,将对应的数据子集传输至所述最近的处理卡;所述通过与目标通道相关的处理卡上的传输进程将相应数据子集进行传输,进而将待传输数据传输至所述目标地址,包括所述最近的处理卡的传输进程向目标通道上的下一处理卡上的传输进程发起数据传输指令,将所述数据子集传输至所述下一处理卡,以此类推,直到将所述数据子集传输至所述目标地址。8.如权利要求7所述的方法,对于目标通道上的中转处理卡,为了传输数据子集,其传输进程用于:将对应的数据子集缓存在全局存储区域或者该传输进程的临时存储区域中,其中,当所述临时存储区域的空闲量大于设定阈值时,将数据子集缓存在临时存储区域中,否则将数据子集缓存在所述全局存储区域中。9.如权利要求8所述的方法,所述中转处理卡的传输进程还用于:在全局存储区域开设两个以上预设大小的缓冲区域以及两个以上任务;所述任务用于根据数据传输指令中的数据子集的首地址、子集偏移量以及已缓存的数据子集数据量,从对应的数据子集剩余的数据中读取数据量与所述预设大小匹配的数据到相应的缓冲区域;其中,所述两个以上任务并列执行或间隔一定时间差执行。10.如权利要求9所述的方法,在所述两个以上任务中,当某一任务将数据读取到相应的缓冲区域后,另一任务开始执行。11.一种多处理卡间的数据传输系统,多处理卡之间具有直连通道和/或间接通道,间接通道包括两跳以上的直连通道;所述系统包括:数据传输客户端,由应用进程调用进而向数据传输服务端发起卡间数据传输请求;所述卡间数据传输请求包括目标地址和源地址,目标地址和源地址对应不同的处理卡;数据传输服务端,用于响应卡间数据传输请求,从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给所述数据传输客户端;所述数据传输客户端还用于基于目标通道的数量和待传输数据得到所述待传输数据的一个以上数据子集;以及基于所述一个以上数据子集,向与目标通道相关的处理卡上的传输模块发起数据传输指令;传输模块,用于响应数据传输指令,对相应数据子集进行传输,进而将待传输数据传输至所述目标地址。
12.如权利要求11所述的系统,所述多处理卡位于同一处理设备的主板上,且包括cpu板卡以及gpu板卡;其中,所述应用进程的数量为一个以上,分别运行于cpu板卡和/或gpu板卡上;所述数据传输服务端位于cpu板卡上;传输模块的数量为一个以上,分别位于cpu板卡和/或gpu板卡上。13.如权利要求11所述的系统,所述数据传输服务端用于:确定从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道;获取所述两条以上通道中每一条的权重值;所述权重值与通道的数据传输带宽正相关,与通道的观测负载量负相关;基于权重值,从所述两条以上通道中选出一条以上的目标通道,用于传输所述待传输数据。14.如权利要求11所述的系统,所述数据子集与目标通道一一对应;所述卡间数据传输请求还包括待传输数据的存储区域相对所述源地址的偏移量;所述数据传输客户端还用于:基于所述偏移量将待传输数据拆分为数据量不同的数据子集;数据传输带宽较大的目标通道对应的数据子集的数据量较大;基于所述源地址以及数据子集的数据量得到各数据子集的首地址以及子集偏移量;所述数据传输指令包括数据子集的首地址以及子集偏移量。15.如权利要求11或14所述的系统,当目标通道为间接通道时,所述数据传输客户端用于向目标通道上最近的处理卡上的传输模块发起数据传输指令,将对应的数据子集传输至所述最近的处理卡;所述最近的处理卡的传输模块用于向目标通道上的下一处理卡上的传输模块发起数据传输指令,将所述数据子集传输至所述下一处理卡,以此类推,直到将所述数据子集传输至所述目标地址。16.如权利要求15所述的系统,对于目标通道上的中转处理卡,其传输模块用于将对应的数据子集缓存在全局存储区域或者该传输进程的临时存储区域中,其中,当全局存储区域多于所述临时存储区域时,将数据子集缓存在全局存储区域中,否则将数据子集缓存在所述临时存储区域中。17.如权利要求16所述的系统,所述中转处理卡的传输模块还用于:在全局存储区域开设两个以上预设大小的缓冲区域以及两个以上任务;所述任务用于根据数据传输指令中的数据子集的首地址、子集偏移量以及已缓存的数据子集数据量,从对应的数据子集剩余的数据中读取数据量与所述预设大小匹配的数据到相应的缓冲区域;其中,所述两个以上任务并列执行或间隔一定时间差执行。18.一种存储介质,用于存储计算机指令,当所述计算机指令中的至少一部分被处理器或处理卡执行时,实现如权利要求1~10任一项所述的方法。19.一种装置,包括多个处理卡以及存储介质,多个处理卡之间具有直连通道和/或间接通道,间接通道包括两跳以上的直连通道,所述存储介质存储有计算机指令,多个处理卡用于执行计算机指令以实现如权利要求1~10任一项所述的方法。20.一种多处理卡间的数据传输方法,多处理卡之间具有直连通道和/或间接通道;所述方法包括:
接收卡间数据传输请求;所述卡间数据传输请求包括目标地址以及源地址,目标地址和源地址对应不同的处理卡;确定从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道;获取所述两条以上通道中每一条的权重值;所述权重值与通道的数据传输带宽正相关,与通道的观测负载量负相关;基于权重值,从所述两条以上通道中选出一条以上的目标通道,用于传输待传输数据。21.如权利要求20所述的方法,所述方法还包括:基于目标通道的数量和待传输数据得到所述待传输数据的一个以上数据子集,所述一个以上数据子集通过所述一个以上的目标通道进行传输。22.如权利要求21所述的方法,所述方法还包括,所述一个以上数据子集各自具有不同的数据量,数据量较大的数据子集通过数据传输带宽较大的通道进行传输。
技术总结
本说明书实施例提供一种多处理卡间的数据传输方法和系统,涉及计算机技术领域,其技术要点包括:通过数据传输客户端接收应用进程的调用向数据传输服务进程发起卡间数据传输请求;通过数据传输服务进程从源地址对应的第一处理卡到目标地址对应的第二处理卡之间的两条以上通道中选择一条以上的目标通道,并将目标通道标识返回给所述数据传输客户端;通过数据传输客户端基于目标通道的数量和待传输数据得到所述待传输数据的一个以上数据子集;通过数据传输客户端基于所述一个以上数据子集,向与目标通道相关的处理卡上的传输进程发起数据传输指令;通过与目标通道相关的处理卡上的传输进程将相应数据子集进行传输。上的传输进程将相应数据子集进行传输。上的传输进程将相应数据子集进行传输。
技术研发人员:赵军平 梅晓峰 赵守仁
受保护的技术使用者:支付宝(杭州)信息技术有限公司
技术研发日:2023.06.15
技术公布日:2023/7/22
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
