数据传输方法以及装置与流程

文档序号:32746385发布日期:2022-12-30 22:21阅读:42来源:国知局
数据传输方法以及装置与流程

1.本说明书实施例涉及计算机技术领域,特别涉及数据传输方法。


背景技术:

2.随着人工智能技术在视频监控等应用领域的发展,导致了对gpu(图形处理器)使用的增加。而cpu(中央处理器)和gpu通常是以固定比例进行物理耦合,无法满足对gpu的算力增长需求,因此,通常采用将cpu和gpu解耦以实现对gpu的池化,以实现一个cpu能够调用gpu资源池内的多个gpu。
3.然而,在将gpu分解出来构成gpu资源池时,连接cpu和gpu的总线也会被拉远,会导致数据传输的时延变大,带宽降低,数据传输时间增加,进而影响数据传输效率。


技术实现要素:

4.有鉴于此,本说明书实施例提供了一种数据传输方法。本说明书一个或者多个实施例同时涉及一种数据传输装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
5.根据本说明书实施例的第一方面,提供了一种数据传输方法,用于cpu,所述方法包括:
6.响应于数据处理请求,确定所述数据处理请求中携带的待处理数据的数据量;
7.在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
8.根据本说明书实施例的第二方面,提供了一种数据传输装置,用于cpu,所述装置包括:
9.确定模块,被配置为响应于数据处理请求,确定所述数据处理请求中携带的待处理数据的数据量;
10.发送模块,被配置为在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
11.根据本说明书实施例的第三方面,提供了一种计算设备,包括:
12.存储器和处理器;
13.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据传输方法的步骤。
14.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述数据传输方法的步骤。
15.根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据传输方法的步骤。
16.本说明书一个实施例提供了一种数据传输方法,响应于数据处理请求,确定所述数据处理请求中携带的待处理数据的数据量;在根据所述数据量确定通过网卡传输所述待
处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
17.上述方法通过确定通过网卡传输待处理数据的情况下,调用与该网卡传输方式对应的第一传输函数,由于对定义传输方式为通过总线传输的第二传输函数进行了更新,使cpu能够调用更新后得到的第一传输函数,使得能够在cpu无感知的情况下改变待处理数据的传输方式,进而使得待处理数据能够通过网卡从cpu传输至gpu,改变了原本从cpu到gpu进行数据传输的总线传输方式,避免了通过总线传输数据,进而避免了通过总线传输数据时出现的数据传输的时延变大,带宽降低,数据传输时间增加的问题,进而提高了数据传输效率。
附图说明
18.图1是本说明书一个实施例提供的gpu池化的示意图;
19.图2是本说明书一个实施例提供的并行计算程序的结构示意图;
20.图3是本说明书一个实施例提供的gpu远程直接内存访问通信的示意图;
21.图4是本说明书一个实施例提供的gpu资源虚拟池化的示意图;
22.图5是本说明书一个实施例提供的有线网络技术的示意图;
23.图6是本说明书一个实施例提供的数据拷贝技术的示意图;
24.图7是本说明书一个实施例提供的一种数据传输方法的具体应用场景示意图;
25.图8是本说明书一个实施例提供的一种数据传输方法的流程图;
26.图9是本说明书一个实施例提供的数据传输方法的流程示意图;
27.图10是本说明书一个实施例提供的数据传输方法的结构示意图;
28.图11是本说明书一个实施例提供的传输方式的示意图;
29.图12是本说明书一个实施例提供的一种数据传输方法的处理过程流程图;
30.图13是本说明书一个实施例提供的一种数据传输装置的结构示意图;
31.图14是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
32.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
33.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
34.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
35.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
36.gpu池化:一般来说,gpu与cpu(服务器)以固定比例(如2、4、6和8)进行物理耦合。为了满足不同用户的不同需求,云计算供应商必须以各种比例额外准备服务器。比如,在用户的算力需求较低的情况下,云计算供应商可以以2比1的比例准备gpu和cpu;在用户的算力需求较高的情况下,云计算供应商可能还需要以6比1或8比1的比例准备gpu和cpu,这样才能在满足用户算力需求的同时实现算力资源的充分利用,避免算力资源的浪费。然而,cpu和gpu的固定组合在资源利用、升级和维护方面效率极低。此外,在遇到高性能需求时,单台服务器的计算能力是远远不够的。
37.图1是本说明书一个实施例提供的gpu池化的示意图,参见图1,图1中a表示一个gpu服务器集群,该gpu服务器集群由多个gpu服务器节点b组成,每个gpu服务器节点由cpu、网卡、内存和显卡组成,它们之间由总线(pcie)连接。在a中,每个gpu服务器节点b上的cpu和gpu的数量比例是固定的,如图1中所示,一个gpu服务器节点上存在一个cpu和两个gpu。每个gpu服务器节点b之间通过网卡连接。c表示一个gpu资源池,从a到c表示gpu池化的过程,即把每个gpu服务器节点中的gpu都取出来,与cpu解耦,并且都放到gpu资源池中,每个分解gpu之后的节点通过总线(pcie)连接至gpu资源池,能够根据用户的实际需求动态分配gpu节点,做到动态伸缩、灵活释放。池化方式从上到下包括框架层、应用层、驱动层、总线层池化,其中总线池化对上层软件依赖最小,适配性最高且没有额外的软件开销。
38.pcie:pci-express,英文全称为peripheral component interconnect express,是一种高速串行计算机扩展总线标准。
39.tlp:英文全称为transaction layer packet,事务层数据包,cpu与pcie总线之间、或者pcie总线与目标设备之间的数据传输,都是以数据包形式主进行发送端的事务层到接收端的事务层的传输。根据上层(软件层或者应用层)请求的类型、目的地址和其他相关属性,把这些请求打包,产生事务层数据包。然后这些事务层数据包经历数据链路层、物理层,最终到达目标设备。
40.并行计算程序:通过利用gpu的处理能力,可大幅提升计算性能,cpu可以利用该并行计算程序控制gpu。
41.具体的,该并行计算程序是由cpu和gpu相互协同执行,cpu称为主机端(host),gpu称为设备端(device)。cpu执行主机端代码,负责串行实现逻辑运算和事物处理任务,gpu执行设备端代码,负责并行度高的大规模计算任务。该并行计算程序中可以包含有多种函数的函数库,在用户通过cpu控制gpu时,可以调用该并行计算程序中包含的函数,以实现相应的功能。
42.图2是本说明书一个实施例提供的并行计算程序的结构示意图,参见图2,并行计算程序包含内核态驱动控制库、用户态驱动库、对用户态驱动库的封装库以及总封装库。内核态驱动控制库直接控制gpu硬件,用户无法直接调用;用户态驱动库里面包含了供上层直接调用的各种操作gpu的函数,通过调用用户态驱动库来间接调用内核态驱动控制库从而控制gpu;对用户态驱动库的封装可以理解为为了简化用户开发难度而对用户态驱动库的一层封装,内部包含了大部分gpu操作函数,省去了部分直接操作gpu上下文的函数,从用户态驱动库可以找到所有对用户态驱动库的封装库中包含的函数。总封装库则是利用对用户
态驱动库的封装库对函数封装的所有库的泛称;应用程序可以理解为用户编写的代码,可以用于控制gpu,比如可以是用户编写的控制gpu实现深度学习任务或图像处理任务的代码。
43.并行计算程序在用户态驱动库提供了两个动态库,其中,一个动态库负责运行时函数(runtimeapi),另一个动态库解释驱动级函数(driverapi),应用程序可直接调用对用户态驱动库的封装库或用户态驱动库,二者包含的函数大部分可互换使用。驱动级函数对于上下文和模块加载提供了更细粒度的控制,必须使用显式函数调用来指定执行配置和内核参数,因此可操作性更大。
44.dma:英文全称为direct memory access,直接存储器访问,它允许不同速度的硬件装置来沟通,而不需要依赖于cpu的大量中断负载,是设备无需cpu干预即可直接访问主机内存的能力。
45.rdma:英文全称为remote direct memory access,远程直接数据存取,是在不中断该系统上cpu处理的情况下,通过网络技术,访问(读取、写入)远程机器上的内存的能力,能够解决网络传输中服务器端数据处理的延迟。
46.gdr:英文全称为gpudirect rdma,即gpu远程直接内存访问,图3是本说明书一个实施例提供的gpu远程直接内存访问通信的示意图,参见图3,cpu和gpu之间通过pcie交换机进行数据传输,gdr利用pci express的标准特性在gpu与第三方对等设备之间实现直接数据交换(p2p)。第三方对等设备例如:网口(network interface)、视频采集设备(video acquisition device)或存储适配器(storageadapter)等。gdr使外围pcie设备(rdma网卡)可以直接访问gpu显存,避免了数据在系统内存拷贝,消除了cpu带宽和延迟瓶颈,为远端gpu提供了直接通信能力。
47.api:英文全称为application program interface,应用程序界面,可以理解为通过cpu控制gpu时调用的函数接口。
48.htod:host(主机端,指cpu)to device(设备端,指gpu),是指cpu向gpu发送数据,htod带宽越大,数据传输越快,通信能力越强。
49.dtoh:从gpu向cpu发送数据。
50.可分页内存:英文全称为pageable memory,指操作系统可以对该内存进行分页与交换。可分页内存由操作系统在主机上分配的内存空间。
51.锁页内存:英文全称为pinned memory,指操作系统不能对该内存进行分页与交换,确保该内存始终驻留在物理内存中。锁页内存可以由并行计算程序内置函数在主机上分配的内存空间。
52.实际应用中,服务器中gpu与cpu是以固定比例进行物理耦合,简单的硬件叠加无法满足算力增长需求,大规模分布式训练下加速比随着机器增多会急剧下降,并且固定cpu/gpu配比容易产生gpu资源碎片,gpu与cpu换代无法解耦、无法单独维修。
53.在目前的部署中,gpu依靠pcie总线连接到cpu,并使用通信协议与服务器中的其他gpu连接,进行内部汇集。目前的pcie总线及其通信协议都只能在短距离内工作,这就限制了gpu的池化,只能在服务器内部或机架层面上进行。当前进行gpu池化的手段从上到下主要包括以下几种:框架层池化、并行计算程序层池化、驱动层池化以及pcie总线层池化。池化方案越靠近底层硬件对上层软件栈的依赖越小,pcie总线层池化在维护工作量、软件
开销以及设备兼容性方面具有优势。
54.然而在pcie总线层池化的cpu和gpu之间的数据传输过程中,直接存储器访问由gpu侧发起,此时cpu侧向gpu侧传输方式为通过为总线读取(pcie read)方式传输,数据传输基于非转发数据报文(pcie non-posted tlp),发送者需要收到接受者的完成通知报文。而总线被拉远后单个数据报文(tlp)传输时延变大,受限于正在传输中的数据报文的最大数量限制,带宽会明显降低。并且,gpu资源池中的每个gpu共享一路pcie总线,此时通过cpu向gpu的吞吐量明显增高,需要更高要求的带宽、
55.现有技术中,提供了对gpu进行池化的不同方法,比如,图4是本说明书一个实施例提供的gpu资源虚拟池化的示意图,参见图4,提供了通过bitfusion架构实现可通过网络访问的共享资源池,从而支持人工智能。bitfusion架构是一种用于把gpu资源集中起来,组成gpu资源池,然后共享给大家使用的架构,其包括服务器和客户机,服务器可以将物理gpu资源虚拟化,共享给多个用户使用,客户机可以理解为一种虚拟机,其可以将虚拟机对gpu的服务请求通过网络传输至服务器,服务器再将该服务请求发送至并行计算程序中的用户态驱动库对其进行处理,具体的,其在将服务请求发送至并行计算程序中的用户态驱动库的过程中通过客户机中的插入代理拦截了该服务请求,并将该服务请求通过网络传输至服务器,实现gpu资源虚拟池化。但这种软件级别池化存在场景难适配、版本维护成本高等诸多限制。
56.或者,图5是本说明书一个实施例提供的有线网络技术的示意图,参见图5,在通过有线网络技术在以太网上对pcie总线进行虚拟化时,可以将pcie总线中传输的数据报文通过以太网形式去传输,以达到gpu的物理拉远效果从而实现gpu池化。但这种方法会增加cpu到gpu的时延,拉低从cpu到gpu数据传输的带宽,从而影响整体性能。
57.以及,图6是本说明书一个实施例提供的数据拷贝技术的示意图,参见图6,提供了一种快速数据传输的数据拷贝技术,图6中的左图是利用并行计算程序进行数据传输时的示意图,右图是利用数据拷贝技术进行数据传输时的示意图,对比而言,基于gpu远程直接内存访问技术的低延迟gpu内存拷贝库,允许cpu直接映射和访问gpu内存。数据拷贝允许cpu通过映射直接访问gpu内存,允许在gpu和cpu内存之间进行低延迟复制,该数据拷贝技术将从cpu到gpu的数据传输(htod)由读取数据转化为写入数据以实现低时延。但这种方法会消耗cpu资源,并且其只在传输数据为64kb以内才能起到增益效果,在实现该技术时,还需要在目标机器上安装和加载一个额外的内核模式驱动程序,增加复杂性,对调用软件上层不透明,传输函数需要改为特定函数。
58.因此,亟需一种有效的技术方案解决上述问题。
59.在本说明书中,提供了一种数据传输方法,本说明书同时涉及一种数据传输装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
60.参见图7,图7是根据本说明书一个实施例提供的一种数据传输方法的具体应用场景示意图。
61.图7中包含cpu(主机端,host)和gpu资源池(设备端,device)以及用户层驱动库,gpu资源池可以理解为将gpu从cpu物理解耦后合并至gpu资源池内,gpu资源池内可以包括至少一个gpu,cpu通过与gpu资源池连接,使得cpu能够调用gpu资源池中的任意一个或多个gpu,以动态调整cpu能够调用的资源,进而满足gpu算力的增长需求,cpu和gpu分别设置至
少一个网卡,cpu和gpu之间可以通过pcie总线传输,也可以通过网卡进行gpu远程直接内存访问,用户层驱动库可以理解为函数库,其中包含有用户通过cpu控制gpu时需要调用的所有函数。
62.具体实施时,用户向cpu发送数据处理请求,该数据处理请求中携带有待处理数据,或者,cpu可以根据该数据处理请求,从数据库中获取与该数据处理请求对应的待处理数据,根据cpu和gpu当前的网络状态,在确定传输方式为通过网卡传输的情况下,从用户层驱动库中调用对应的传输函数,该传输函数是已经被语义改写之后的函数,用于表示通过网卡进行网络传输,并将该处理数据通过网卡传输至gpu,从而避免通过pcie总线以直接存储器访问读取方式进行数据传输。
63.在图7中,用户向cpu发送图像处理请求,该图像处理请求用于控制gpu进行图像处理,该图像处理请求中可以携带有与待处理图像对应的图像数据,或者,cpu可以根据该图像处理请求,从数据库中获取与该图像处理请求对应的图像数据,在确定传输方式为网卡传输的情况下,从用户层驱动库中调用对应的传输函数,该传输函数是已经被语义改写之后的函数,用于表示通过网卡进行远程直接数据存取,并将该待处理的图像数据通过网卡传输至gpu,从而避免通过pcie总线以直接存储器访问读取方式进行数据传输,实现了带宽的提高,从而实现了数据传输效率的提高。
64.参见图8,图8示出了根据本说明书一个实施例提供的一种数据传输方法的流程图,具体包括以下步骤。
65.步骤802:响应于数据处理请求,确定所述数据处理请求中携带的待处理数据的数据量。
66.其中,数据处理请求可以理解为用户为了控制gpu向cpu发送的处理图像数据的请求,比如对图像数据进行增强、或者对图像数据进行锐化处理的请求;待处理数据可以理解为用户请求处理的图像对应的图像数据;待处理数据的数据量可以理解为待处理数据的大小,比如待处理数据的数据量可以为4kb(kilobyte,千字节)大小等。
67.基于此,cpu可以响应于用户向cpu发送的处理图像数据的请求,确定该请求中携带的待处理数据的数据大小。
68.举例而言,cpu响应于用户发送的对图像a进行灰度化处理的请求,确定图像a对应的图像数据aa的数据量m。
69.步骤804:在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
70.其中,网卡可以理解为用来允许计算机在计算机网络上进行通讯的计算机硬件,在cpu侧和gpu侧可以分别设置至少一个网卡,比如具有rdma功能的网卡;通过网卡传输,可以理解为通过网卡进行网络传输;第一传输函数可以理解为网卡传输方式对应的传输函数,第二传输函数可以理解为总线传输方式对应的传输函数,该第一传输函数可以是对第二传输函数进行语义改写之后得到的传输函数,语义改写可以理解为改变传输函数对应的传输方式;调用第一传输函数能够使待处理数据通过该第一传输函数对应的网卡传输方式进行数据传输。
71.基于此,在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用网卡传输方式对应的第一传输函数,使得待处理数据能够通过网卡进行网络传输至gpu。
72.进一步地,在根据所述数据量确定通过网卡传输所述待处理数据时,为了进一步提升传输效率,避免传输损失,可以根据当前的网络状态确定待处理数据的传输阈值,具体实现方式如下:
73.检测所述cpu和gpu之间的当前网络状态;
74.根据所述当前网络状态,确定待处理数据的传输阈值;
75.在所述数据量大于所述传输阈值的情况下,确定通过网卡传输所述待处理数据。
76.其中,当前网络状态可以理解为cpu和gpu之间的网络连接状态;传输阈值可以理解为当前能够从cpu传输至gpu的待处理数据的大小的阈值;通过网卡传输可以理解为通过cpu和gpu上设置的网卡进行网络传输,网卡比如可以是具有远程直接数据存取功能的网卡,那么通过该具有远程直接数据存取功能的网卡可以进行远程直接数据存取通信。
77.基于此,cpu接收到用户发送的数据处理请求之后,检测cpu和gpu之间的网络连接状态,根据当前的网络连接状态,确定当前能够传输的待处理数据大小的阈值,在数据量大于该传输阈值的情况下,确定通过网卡传输的方式传输该待处理数据。
78.沿用上例,cpu接收用户发送的对图像a进行灰度化处理的请求之后,检测cpu和gpu之间的网络连接状态,当网络连接状态良好时,确定当前能够传输的待处理数据大小的阈值为4kb,在图像a对应的图像数据aa大于4kb的情况下,确定通过网卡传输该图像数据。
79.综上,通过根据网络状态确定待处理数据的传输阈值,能够在不同的网络环境下选取最优的数据传输方式,保证最大带宽,进而提高数据传输效率。
80.具体的,在数据量小于传输阈值的情况下,可以确定通过总线传输方式传输待处理数据,具体实现方式如下:
81.在所述数据量小于所述传输阈值的情况下,确定通过总线传输所述待处理数据。
82.其中,总线可以理解为pcie总线,其用于连接cpu和gpu。
83.基于此,在待处理数据的大小小于传输阈值的情况下,确定传输方式为通过总线传输。
84.沿用上例,在图像数据aa的大小小于4kb的情况下,确定通过pcie总线传输该图像数据。
85.综上,通过根据待处理数据的大小是否超过传输阈值来确定传输方式,能够确定合适的传输方式,进一步实现传输效率的提升。
86.实际应用中,在确定通过总线传输所述待处理数据的的情况下,调用对应的第二传输函数,通过所述总线将所述待处理数据发送至gpu。
87.其中,第二传输函数可以理解为总线传输的传输方式对应的传输函数,该第二传输函数的语义为使数据通过总线传输至gpu,在调用该第二传输函数时,待处理数据就会根据该第二传输函数对应的总线传输方式传输至gpu。
88.基于此,在确定待处理数据的传输方式为通过总线传输的情况下,可以调用与总线传输方式对应的第二传输函数,使待处理数据能够通过总线传输至gpu。
89.具体的,在根据所述数据量确定通过网卡传输所述待处理数据的情况下,可以在预先创建的函数库中调用对应的第一传输函数。
90.其中,函数库理解为包含有通过cpu控制gpu用到的所有调用函数的库,比如用户层驱动库,其中包括与传输方式对应的传输函数,比如与网卡传输方式对应的第一传输函
数、以及与总线传输方式对应的第二传输函数。
91.综上,通过预先创建函数库,为用户提供改写语义之后的传输函数,实现在确定了传输方式之后,能够从函数库中找到并调用该传输方式对应的传输函数,实现通过网卡的网络传输,进而提高传输效率。
92.实际应用中,创建该函数库的具体实现方式如下:
93.确定总线传输方式对应的第二传输函数;
94.对所述第二传输函数进行语义改写,得到网卡传输方式对应的第一传输函数;
95.根据所述第一传输函数以及所述第二传输函数,创建函数库。
96.基于此,可以确定总线传输方式对应的第二传输函数,对第二传输函数进行语义改写,对其对应的传输方式进行改变,将传输方式从总线传输方式改变为网卡传输方式,得到网卡传输方式对应的第一传输函数,根据第一传输函数和第二传输函数,构建函数库。
97.综上,预先创建的函数库中包括两种传输方式对应的传输函数,一种是总线传输方式对应的第二传输函数,另一种是网卡传输方式对应的第一传输函数,使得在确定这两种传输方式的其中一种时,都能从函数库中找到对应的传输函数,以实现确定的传输方式,进而提高传输效率。
98.此外,在创建函数库时,还可以确定cpu控制gpu能用到的所有调用函数,并对这些调用函数进行语义改写,比如初始化函数、上下文函数等,得到两套不同的调用函数,便于用户选择。
99.实际应用中,图9是本说明书一个实施例提供的数据传输方法的流程示意图,参见图9,在对以固定比例进行耦合的cpu和gpu进行物理解耦之后,将gpu合并至gpu资源池中,图9中的gpu资源池中包含多个gpu,cpu可以通过与gpu资源池之间的连接调用gpu资源池中的任何一个或者多个gpu。具体的,在利用本说明书的实施例提供的数据传输方法时,在确定传输方式为pcie总线传输的情况下,用户可以在cpu侧通过应用程序,调用第二传输函数,以实现以pcie总线传输方式将数据传输至gpu资源池中的gpu;在确定传输方式为gpu远程直接内存访问传输的情况下,用户可以在cpu侧通过应用程序,调用第一传输函数,以实现以gpu远程直接内存访问的传输方式将数据传输至gpu资源池中的gpu。其中,第二传输函数对应的传输方式为pcie总线传输,比如其可以是用户态驱动层中包含的初始传输函数;第一传输函数可以理解为对第二传输函数进行语义改写之后的传输函数,其对应的传输方式为gpu远程直接内存访问传输。
100.具体的,图10是本说明书一个实施例提供的数据传输方法的结构示意图,参见图10,在对第二传输函数进行语义改写以得到第一传输函数的过程中,可以通过在用户态驱动库和对用户态驱动库的封装库之间插入劫持库,该劫持库可以用于实现对用户态驱动库的劫持,也即是说,该劫持库可以对用户态驱动库中的与数据传输相关的函数进行语义改写,使其传输方式从原本的pcie总线传输改变为通过网卡进行gpu远程直接内存访问网络传输,提供与用户态驱动库完全相同的函数,用户可以通过上层的应用程序直接调用劫持库,也可以通过上层的应用程序经过对用户态驱动库的封装库进行去隐式调用。
101.由于原始用户态驱动库通过并行计算程序中的动态库使用,劫持库对外呈现的仍然是该动态库,此时用户通过上层的应用程序调用函数时并不会感知到劫持库的存在,也即是说,对上层软件应用是透明的,用户直接调用此库可无感知地实现对数据远程传输的
带宽提高。
102.综上,通过插入劫持库的方法将原有的从cpu向gpu传输数据的pcie总线传输方式转变为通过网卡进行的gpu远程直接内存访问网络传输,能够通过远程直接数据存取功能减少cpu参与并且在不降低dtoh带宽的前提下大幅度提升htod带宽,同时劫持库能够保证对上层应用的无感知。
103.进一步地,也可以在接收到数据处理请求之后,再对确定的第二传输函数进行劫持,得到第一传输函数,具体实现方式如下:
104.在根据所述数据量确定通过网卡传输所述待处理数据的情况下,确定第二传输函数;
105.对所述第二传输函数进行语义改写,得到网卡传输方式对应的第一传输函数;
106.调用所述网卡传输方式对应的第一传输函数。
107.基于此,可以在确定传输方式为通过网卡传输的情况下,确定与数据传输相关的第二传输函数,对第二传输函数劫持并语义改写,使第二传输函数对应的总线传输方式改变为网卡传输方式,得到网卡传输方式对应的第一传输函数,并调用该第一传输函数,使待处理数据通过网卡传输至gpu。
108.综上,通过动态的对数据处理请求对应的数据传输相关的传输函数进行劫持,实现了传输方式的改变,进而提高传输效率。
109.进一步地,根据远程直接数据存取工作原理,在进行数据传输之前,cpu侧内存与gpu侧显存都需要提前注册给网卡,而使用gpu远程直接内存访问传输最直接的实现是在每次传输之前固定内存,并在传输完成后立即取消固定。在对数据传输相关的传输函数进行语义改写之后,每次cpu传输数据到gpu都需要临时将内存和显存分别注册到对应网卡,这个操作及其耗时,比如对于发送64m byte数据来说,这个时间约占了整个通信时长的50%以上,因此在接收数据请求之前,可以先将cpu的内存地址和gpu的显存地址注册至网卡,网卡可以包括cpu侧网卡和gpu侧网卡,具体实现方式如下:
110.所述cpu设置至少一个cpu侧网卡,所述gpu设置至少一个gpu侧网卡;
111.相应的,将所述cpu的内存地址注册至所述cpu侧网卡,以及,将所述gpu的显存地址注册至所述gpu侧网卡。
112.其中,cpu侧网卡指的是设置于cpu的网卡,gpu侧网卡指的是设置于gpu的网卡;将cpu的内存地址注册至cpu侧网卡可以理解为向网卡提供cpu的内存地址;将gpu的显存地址注册至gpu侧网卡可以理解为向网卡提供gpu的显存地址。
113.基于此,可以向网卡预注册cpu的内存地址和gpu的显存地址。
114.综上,通过向网卡预注册cpu的内存地址和gpu的显存地址,能够节省注册地址的时间,进而提升传输效率。
115.此外,cpu在向gpu传输待处理数据时,有可分页内存和锁页内存两种传输方式。cpu在进行数据传输时,在通过可分页内存进行数据传输时,gpu无法直接访问这种可分页内存,也即是说,在可分页内存中的数据无法传输至gpu,导致数据传输的失效。因此,图11是本说明书一个实施例提供的传输方式的示意图,如图11所示,可以在接收数据处理请求之前,在gpu侧注册缓存区,使传输至gpu的数据先传输至缓存区,再从缓存区传输至gpu。具体的,在传输待处理数据的过程中,在确定cpu申请的内存为可分页内存的情况下,在cpu侧
申请临时锁页内存,将待处理数据先从可分页内存传输至锁页内存,再传输至gpu侧的缓存区,之后通过缓存区传输至gpu。在确定cpu申请的内存为锁页内存时,直接将待处理数据从锁页内存传输至gpu侧的缓存区,之后通过缓存区传输至gpu。以实现从cpu到gpu之间的数据传输。
116.进一步地,在对gpu进行池化得到gpu资源池的情况下,gpu资源池中包括至少两个gpu,在通过网卡将待传输数据发送至gpu时,可以确定数据处理请求对应的至少一个目标gpu,具体实现方式如下:
117.确定所述数据处理请求对应的至少一个目标gpu;
118.通过所述网卡将所述待处理数据发送至所述至少一个目标gpu。
119.其中,目标gpu可以理解为数据处理请求需要调用的gpu。
120.可以理解的,基于算力的增加,一个gpu可能无法满足算力需求,此时数据处理请求可以控制gpu资源池中的至少一个目标gpu,以满足算力需求的增长。
121.此外,为了防止多个gpu进行gpu远程直接内存访问时互相干扰,可以在数据传输之前,通过对pcie拓扑结构的感知,利用深度优先搜索算法为gpu资源池中的每个gpu提供通信距离最近的具有远程直接数据存取功能的网卡绑定,以最大化实现gpu远程直接内存访问通信效率。
122.综上所述,本说明书一个实施例提供了一种数据传输方法,cpu响应于数据处理请求,确定待处理数据的传输方式,其中,所述数据处理请求携带有待处理数据;在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
123.上述方法通过确定待处理数据的传输方式为通过网卡传输的情况下,调用对应的第一传输函数,使得待处理数据能够通过网卡从cpu传输至gpu,避免了通过总线传输数据,进而提高了数据传输效率,减少了pcie总线拉远时延增大对带宽部分的影响。
124.进一步地,可以对应用于上述方法的并行计算程序进行后续测试,可以对其进行带宽性能测试和ai性能测试。
125.具体而言,在对其进行带宽性能测试的过程中,根据测试结果可知其从cpu向gpu进行数据传输的带宽性能均有提升,从gpu向cpu进行数据传输的带宽并未受到影响;在对其进行ai性能测试的过程中,可知,提高带宽对ai性能的增益受以下因素影响:应用于上述方法的并行计算程序的从cpu向gpu进行数据传输的带宽性能提升,性能损失减少,从gpu向cpu进行数据传输的带宽基本不变。
126.提高带宽对人工智能技术训练性能的增益大小主要受以下两点因素影响:内存拷贝操作与在gpu上运行的代码的运行时间比例,具体的,单次任务中数据传输量越大,内存拷贝时间占比就越高,提升带宽对性能提升越明显;任务并发数,具体的,由于单个gpu的多个数据传输任务共享一条从cpu向gpu传输数据的带宽,因此,任务并发数越高,数据流量吞吐越大,提升带宽带来的收益越大。
127.实际应用中,可以以神经网络模型或深度学习推荐模型为测试模型,对应用于上述数据传输方法的并行计算程序进行测试。
128.测试结果为:单任务的单次传递给程序用于训练的参数个数,从16增加至256,性能显著提升,在多任务并发过程中性能提升4%-25.4%,性能均显著提升。
129.综上,通过后续测试的结果可知,本说明书提供的数据传输方法可以显著提升从cpu到gpu传输数据的带宽性能,减少了因cpu和gpu解耦时pcie总线拉远导致的时延增大对带宽的影响,并且通过劫持层改变部分函数的语义进行用户无感知替换传输方式,通过拓扑感知和动态化配置传输阈值,能够选择离目标gpu最近的网卡进行通信,针对不同大小的待处理数据采取不同的传输方式以保证传输的最优性,进而提升数据传输效率。
130.下述结合附图12,以本说明书提供的数据传输方法在图像锐化的应用为例,对所述数据传输方法进行进一步说明。其中,图12示出了本说明书一个实施例提供的一种数据传输方法的处理过程流程图,具体包括以下步骤。
131.步骤1202:将cpu的内存地址注册至cpu侧网卡,以及,将gpu的显存地址注册至gpu侧网卡。
132.步骤1204:接收用户的图像锐化请求,图像锐化请求中携带图像数据。
133.步骤1206:响应于图像锐化请求,检测cpu和gpu之间的网络状态。
134.步骤1208:根据网络状态,确定传输阈值。
135.步骤1210:在图像数据的大小大于传输阈值的情况下,确定gpu远程直接内存访问方式。
136.步骤1212:确定数据传输相关的传输函数,对其进行语义改写,使其传输方式改变为gpu远程直接内存访问方式。
137.步骤1214:调用语义改写后的传输函数,使图像数据从cpu的内存通过gpu远程直接内存访问方式传输至gpu的显存。
138.上述方法通过确定待处理数据的传输方式为通过网卡传输的情况下,调用对应的第一传输函数,使得待处理数据能够通过网卡从cpu传输至gpu,避免了通过总线传输数据,进而提高了数据传输效率。
139.与上述方法实施例相对应,本说明书还提供了数据传输装置实施例,图13示出了本说明书一个实施例提供的一种数据传输装置的结构示意图。如图13所示,该装置包括:
140.确定模块1302,被配置为cpu响应于数据处理请求,确定待处理数据的传输方式,其中,所述数据处理请求携带有待处理数据;
141.发送模块1304,被配置为在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
142.一个可选的实施例中,所述发送模块1304,进一步被配置为:
143.在根据所述数据量确定通过网卡传输所述待处理数据的情况下,在预先创建的函数库中调用对应的第一传输函数。
144.一个可选的实施例中,所述装置还包括创建模块,所述创建模块进一步被配置为:
145.确定总线传输方式对应的第二传输函数;
146.对所述第二传输函数进行语义改写,得到网卡传输方式对应的第一传输函数;
147.根据所述第一传输函数以及所述第二传输函数,创建函数库。
148.一个可选的实施例中,所述发送模块1304,进一步被配置为:
149.在根据所述数据量确定通过网卡传输所述待处理数据的情况下,确定第二传输函数;
150.对所述第二传输函数进行语义改写,得到网卡传输方式对应的第一传输函数;
151.调用所述网卡传输方式对应的第一传输函数。
152.一个可选的实施例中,所述确定模块1302,进一步被配置为:
153.检测所述cpu和gpu之间的当前网络状态;
154.根据所述当前网络状态,确定待处理数据的传输阈值;
155.在所述数据量大于所述传输阈值的情况下,确定通过网卡传输所述待处理数据。
156.一个可选的实施例中,所述确定模块1302,进一步被配置为:
157.在所述数据量小于所述传输阈值的情况下,确定通过总线传输所述待处理数据。
158.一个可选的实施例中,所述发送模块1304,进一步被配置为:
159.在确定通过总线传输所述待处理数据的情况下,调用对应的第二传输函数,通过所述总线将所述待处理数据发送至gpu。
160.一个可选的实施例中,所述装置还包括注册模块,所述注册模块进一步被配置为:
161.所述cpu设置至少一个cpu侧网卡,所述gpu设置至少一个gpu侧网卡;
162.相应的,将所述cpu的内存地址注册至所述cpu侧网卡,以及,将所述gpu的显存地址注册至所述gpu侧网卡。
163.一个可选的实施例中,所述发送模块1304,进一步被配置为:
164.确定所述数据处理请求对应的至少一个目标gpu;
165.通过所述网卡将所述待处理数据发送至所述至少一个目标gpu。
166.本说明书一个实施例提供了一种数据传输装置,cpu响应于数据处理请求,确定待处理数据的传输方式,其中,所述数据处理请求携带有待处理数据;在根据所述数据量确定通过网卡传输所述待处理数据的情况下,调用对应的第一传输函数,通过所述网卡将所述待处理数据发送至gpu。
167.上述装置通过确定待处理数据的传输方式为通过网卡传输的情况下,调用对应的第一传输函数,使得待处理数据能够通过网卡从cpu传输至gpu,避免了通过总线传输数据,进而提高了数据传输效率。
168.上述为本实施例的一种数据传输装置的示意性方案。需要说明的是,该数据传输装置的技术方案与上述的数据传输方法的技术方案属于同一构思,数据传输装置的技术方案未详细描述的细节内容,均可以参见上述数据传输方法的技术方案的描述。
169.图14示出了根据本说明书一个实施例提供的一种计算设备1400的结构框图。该计算设备1400的部件包括但不限于存储器1410和处理器1420。处理器1420与存储器1410通过总线1430相连接,数据库1450用于保存数据。
170.计算设备1400还包括接入设备1440,接入设备1440使得计算设备1400能够经由一个或多个网络1460通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备1440可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
171.在本说明书的一个实施例中,计算设备1400的上述部件以及图14中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图14所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换
其他部件。
172.计算设备1400可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备1400还可以是移动式或静止式的服务器。
173.其中,处理器1420用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据传输方法的步骤。
174.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据传输方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据传输方法的技术方案的描述。
175.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据传输方法的步骤。
176.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据传输方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据传输方法的技术方案的描述。
177.本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据传输方法的步骤。
178.上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据传输方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据传输方法的技术方案的描述。
179.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
180.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
181.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
182.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部
分,可以参见其它实施例的相关描述。
183.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1