CN116361037A - 一种分布式通信***及方法 - Google Patents

一种分布式通信***及方法 Download PDF

Info

Publication number
CN116361037A
CN116361037A CN202310561547.8A CN202310561547A CN116361037A CN 116361037 A CN116361037 A CN 116361037A CN 202310561547 A CN202310561547 A CN 202310561547A CN 116361037 A CN116361037 A CN 116361037A
Authority
CN
China
Prior art keywords
memory
target
data
target data
communication network
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310561547.8A
Other languages
English (en)
Other versions
CN116361037B (zh
Inventor
王宏升
陈�光
林峰
吴飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Lab
Original Assignee
Zhejiang Lab
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Lab filed Critical Zhejiang Lab
Priority to CN202310561547.8A priority Critical patent/CN116361037B/zh
Publication of CN116361037A publication Critical patent/CN116361037A/zh
Application granted granted Critical
Publication of CN116361037B publication Critical patent/CN116361037B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Multimedia (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computer And Data Communications (AREA)

Abstract

本说明书公开了一种分布式通信***及方法,通过第二动态通信网络对象基于第一工作节点发送的通知消息,在第二设备的内存中分配用于存储所述目标数据的目标内存,并基于目标数据和目标内存生成读取请求,并将读取请求发送给第一动态通信网络对象,从而,第一动态通信网络对象根据从读取请求中得到的目标数据的属性,从第一设备的内存中查找目标数据,并将目标数据通过写操作写入第二设备的目标内存,第二工作节点基于目标内存中的目标数据执行数据处理任务。可见,通过第一动态网络对象以及第二动态网络对象之间的交互,实现了跨设备的直接通信,无需大量不必要的数据拷贝,也不会占用中央处理器资源,从而提高了通信效率和数据并行的规模。

Description

一种分布式通信***及方法
技术领域
本说明书涉及计算机技术领域,尤其涉及一种分布式通信***及方法。
背景技术
随着信息科技的发展,采用深度学习从数据中自动地学习有效的特征表示,提升预测模型的准确度,已经被广泛应用于语音识别、图像识别、目标检测等领域。为了进一步提升训练完成的模型的性能,训练样本的数量也越来越大,这就导致了模型训练需要较长的训练时间。针对该问题,可以采用多个工作节点并行执行同一模型训练过程的分布式训练方式,减少模型训练的时间,以提高模型训练速度。
在分布式训练过程中,各工作节点之间传递数据和梯度等信息,将会产生大量网络通信。目前所采用的分布式通信方案通常是依赖于中央处理器(Central ProcessingUnit,CPU)来完成数据搬运和协议处理。
但是,上述通信方案涉及大量不必要的数据拷贝,并且随着分布式训练集群规模越来越大,其中产生的网络通信将成倍增加,这会占用大量CPU资源,导致通信效率低下,限制了神经网络模型训练的并行规模和速度。
基于此,本说明书提供了一种分布式通信***。
发明内容
本说明书提供一种分布式通信***及方法,以部分的解决现有技术存在的上述问题。
本说明书采用下述技术方案:
本说明书提供了一种分布式通信***,所述***包括:部署在第一设备的第一工作节点、部署在第二设备的第二工作节点、配置在所述第一设备的第一动态通信网络对象,以及配置在所述第二设备的第二动态通信网络对象;
所述第一工作节点,用于执行分配到自身的数据处理任务得到目标数据;向所述第二动态通信网络对象发送通知消息,所述通知消息用于通知所述第二设备读取所述目标数据;
所述第二动态通信网络对象,用于响应于所述第一工作节点发送的通知消息,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存;根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给所述第一动态通信网络对象;
所述第一动态通信网络对象,用于响应于由所述第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据;将所述目标数据拷贝到预先分配的指定注册内存;将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中;
所述第二工作节点,用于从所述第二设备的目标内存中查找所述目标数据,并根据所述目标数据执行分配到的自身的数据处理任务。
可选地,所述第二设备中预先创建完成队列,所述完成队列用于存放已完成的工作请求;
所述第一动态通信网络对象具体用于,生成指定信息,所述指定信息用于向所述第二动态通信网络对象通知所述目标数据已写入所述第二设备的目标内存;将所述指定注册内存中的目标数据通过写操作写入所述第二设备的目标内存,并将所述指定信息写入所述第二设备中的完成队列中。
所述第二动态通信网络对象还用于,查询所述第二设备中的完成队列,根据所述完成队列包含的指定信息,确定所述目标数据是否已写入所述第二设备的目标内存。
可选地,所述第二设备中预先创建完成队列,所述完成队列用于存放已完成的工作请求;
所述第一动态通信网络对象具体用于,将所述目标数据按照预设的数据长度进行切分,得到若干子数据;针对每个子数据,生成该子数据对应的指定信息,所述指定信息用于向所述第二动态通信网络对象通知该子数据已写入所述第二设备的目标内存;将所述指定注册内存中所述目标数据对应的各子数据通过写操作依次写入所述第二设备的目标内存,并按照所述各子数据的写入顺序依次在所述第二设备中的完成队列中写入所述各子数据对应的指定信息。
所述第二动态通信网络对象还用于,查询所述第二设备中的完成队列,根据所述完成队列中存放的指定信息,确定所述目标数据包含的各子数据是否已写入所述第二设备的目标内存。
可选地,所述第二动态通信网络对象还用于,当根据所述完成队列中存放的指定信息,确定所述目标数据已写入所述第二设备的目标内存时,生成确认消息,并将所述确认消息发送给所述第一动态通信网络对象;其中,所述确认消息用于通知所述第一动态通信网络对象回收所述目标数据在所述第一设备中占用的内存;
所述第一动态通信网络对象还用于,响应于所述第二动态通信网络对象发送的确认消息,将所述目标数据在所述第一设备中占用的内存回收。
可选地,所述第一设备的内存中预先分配用于存储待发送的数据的第一发送指定内存和第二发送指定内存,所述第二设备的内存中预先分配用于存储接收到的数据的第一接收指定内存和第二接收指定内存,所述第一发送指定内存和所述第一接收指定内存之间存在对应关系,所述第二发送指定内存和所述第二接收指定内存之间存在对应关系;
所述第一动态通信网络对象具体用于,将查找到的目标数据切分为若干子数据;当确定所述第一发送指定内存和所述第一接收指定内存均空闲时,将所述目标数据包含的第一子数据拷贝到所述第一发送指定内存中,并将所述第一子数据通过写操作写入所述第一接收指定内存中;当确定所述第二发送指定内存和所述第二接收指定内存均空闲时,将所述目标数据包含的第二子数据拷贝到所述第二发送指定内存中,并将所述第二子数据通过写操作写入所述第二接收指定内存中;
所述第二动态通信网络对象具体用于,从所述第一接收指定内存中查找写入的第一子数据,并将查找到的第一子数据拷贝到所述第二设备的目标内存中;从所述第二接收指定内存中查找写入的第二子数据,并将查找到的第二子数据拷贝到所述第二设备的目标内存中。
可选地,所述第一动态通信网络对象还用于,预先通过远程过程调用获取所述第二动态通信网络对象所属的第二设备中分配的第一接收内存和第二接收内存。
可选地,所述目标数据的属性包括所述目标数据的长度;
所述第二动态通信网络对象具体用于,根据所述通知消息携带的所述目标数据的长度,确定目标内存的目标长度,所述目标长度不小于所述目标数据的长度;在所述第二设备的内存中分配所述目标长度的用于存储所述目标数据的目标内存。
可选地,所述第一动态通信网络对象还用于启动所述第一设备中的消息总线,并通过所述第一设备中的消息总线确定接收目标数据的第二设备的标识;获取所述第一动态通信网络对象所属的第一设备的标识,当确定所述第一设备的标识与所述第二设备的标识不同时,将所述目标数据发送给所述第二设备中的第二动态通信网络对象;
所述第二动态通信网络对象还用于,接收由所述第一动态通信网络对象发送的目标数据,启动所述第二设备中的消息总线;通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点。
可选地,所述第一工作节点所执行的数据处理任务和所述第二工作节点所执行的数据处理任务之间存在上下游关系,所述数据处理任务是基于由目标计算图分割得到的各计算子图确定的,所述上下游关系用于表征所述各计算子图之间的输入输出关系,所述目标计算图是根据获取到的目标模型确定的;
所述目标计算图包括动态计算图和静态计算图中的至少一种。
本说明书提供了一种分布式通信方法,所述方法应用于第一动态通信网络对象,所述方法包括:
响应于由第二设备中的第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据;其中,所述读取请求是由所述第二动态通信网络对象响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性以及为目标数据分配的目标内存生成的;
将所述目标数据拷贝到预先分配的指定注册内存;
将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,以便第二工作节点从所述目标内存中查找所述目标数据,并根据查找到的目标数据执行分配到所述第二工作节点自身的数据处理任务。
可选地,所述第二设备中预先创建有完成队列,所述完成队列用于存放已完成的工作请求;
将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,具体包括:
将所述目标数据按照预设的数据长度进行切分,得到若干子数据;
针对每个子数据,生成该子数据对应的指定信息,所述指定信息用于向所述第二动态通信网络对象通知该子数据已写入所述第二设备的目标内存;
将所述指定注册内存中所述目标数据对应的各子数据,通过写操作依次写入所述第二设备的目标内存,并按照所述各子数据的写入顺序依次在所述第二设备中的完成队列中写入所述各子数据对应的指定信息,以使所述第二动态通信网络对象通过查询所述第二设备中的完成队列中存放的指定信息,确定所述目标数据包含的各子数据是否已写入所述第二设备的目标内存。
可选地,所述第一设备的内存中预先分配用于存储待发送的数据的第一发送指定内存和第二发送指定内存,所述第二设备的内存中预先分配用于存储接收到的数据的第一接收指定内存和第二接收指定内存,所述第一发送指定内存和所述第一接收指定内存之间存在对应关系,所述第二发送指定内存和所述第二接收指定内存之间存在对应关系;
所述方法还包括:
将查找到的目标数据切分为若干子数据;
当确定所述第一发送指定内存和所述第一接收指定内存均空闲时,将所述目标数据包含的第一子数据拷贝到所述第一发送指定内存中,并将所述第一子数据通过写操作写入所述第一接收指定内存中,以便所述第二动态通信网络对象从所述第一接收指定内存中查找写入的第一子数据,并将查找到的第一子数据拷贝到所述第二设备的目标内存中;
当确定所述第二发送指定内存和所述第二接收指定内存均空闲时,将所述目标数据包含的第二子数据拷贝到所述第二发送指定内存中,并将所述第二子数据通过写操作写入所述第二接收指定内存中,以便所述第二动态通信网络对象所述第二接收指定内存中查找写入的第二子数据,并将查找到的第二子数据拷贝到所述第二设备的目标内存中。
可选地,所述方法还包括:
启动所述第一设备中的消息总线,并通过所述第一设备中的消息总线确定接收目标数据的第二设备的标识;
获取所述第一动态通信网络对象所属的第一设备的标识,当确定所述第一设备的标识与所述第二设备的标识不同时,将所述目标数据发送给所述第二设备中的第二动态通信网络对象,以便所述第二动态通信网络对象接收由所述第一动态通信网络对象发送的目标数据,并启动所述第二设备中的消息总线,通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点。
本说明书提供了一种分布式通信方法,所述方法应用于第二动态通信网络对象,所述方法包括:
响应于第一工作节点发送的通知消息,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存;其中,所述通知消息是由所述第一工作节点根据执行数据处理任务得到的目标数据生成并发送的;
根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给所述第一动态通信网络对象,以使所述第一动态通信网络对象根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据,并将所述目标数据拷贝到预先分配的指定注册内存,以便将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,使得第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
可选地,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存,具体包括:
根据所述通知消息携带的所述目标数据的长度,确定目标内存的目标长度,所述目标长度不小于所述目标数据的长度;
在所述第二设备的内存中分配所述目标长度的用于存储所述目标数据的目标内存。
可选地,所述方法还包括:
接收由所述第一动态通信网络对象发送的目标数据,启动所述第二设备中的消息总线,通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;
调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点,以使所述第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
本说明书提供了一种分布式通信装置,所述装置应用于第一动态通信网络对象,所述装置包括:
目标数据确定模块,用于响应于由第二设备中的第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据;其中,所述读取请求是由所述第二动态通信网络对象响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性以及为目标数据分配的目标内存生成的;
拷贝模块,用于将所述目标数据拷贝到预先分配的指定注册内存;
第一写入模块,用于将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,以便第二工作节点从所述目标内存中查找所述目标数据,并根据查找到的目标数据执行分配到所述第二工作节点自身的数据处理任务。
本说明书提供了一种分布式通信装置,所述装置应用于第二动态通信网络对象,所述装置包括:
目标内存分配模块,用于响应于第一工作节点发送的通知消息,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存;其中,所述通知消息是由所述第一工作节点根据执行数据处理任务得到的目标数据生成并发送的;
读取请求发送模块,用于根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给所述第一动态通信网络对象,以使所述第一动态通信网络对象根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据,并将所述目标数据拷贝到预先分配的指定注册内存,以便将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,使得第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述分布式通信方法。
本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述分布式通信方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
本说明书提供的分布式通信***中,通过第二动态通信网络对象基于第一工作节点发送的通知消息,在第二设备的内存中分配用于存储所述目标数据的目标内存,并基于目标数据和目标内存生成读取请求,并将读取请求发送给第一动态通信网络对象,从而,第一动态通信网络对象根据从读取请求中得到的目标数据的属性,从第一设备的内存中查找目标数据,并将目标数据通过写操作写入第二设备的目标内存,第二工作节点基于目标内存中的目标数据执行数据处理任务。可见,通过第一动态网络对象以及第二动态网络对象之间的交互,实现了跨设备的直接通信,无需大量不必要的数据拷贝,也不会占用中央处理器资源,从而提高了通信效率和数据并行的规模。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为本说明书中一种分布式通信***的示意图;
图2为本说明书中一种分布式通信方法的流程示意图;
图3为本说明书中一种分布式通信方法的流程示意图;
图4为本说明书中一种分布式通信方法的流程示意图;
图5为本说明书提供的一种分布式通信装置的示意图;
图6为本说明书提供的一种分布式通信装置的示意图;
图7为本说明书提供的对应于图1的电子设备示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
另外,需要说明的是,本说明书中所有获取信号、信息或数据的动作都是在遵照所在地相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
随着信息科技的发展,目前在多种领域中,均可以采用深度学习的方法处理数据,得到数据处理结果。例如在语音识别领域,可以将待识别语音输入到基于深度学习的方法训练得到的语音识别模型中,确定待识别语音对应的文本;在图像领域,可以待识别图像输入到训练完成的图像识别模型中,得到图像识别模型输出的待识别图像中的目标物图像。为了进一步提升模型的性能,目前所采用的方案是提高模型的训练样本的规模,或者扩大模型本身的规模。无论是上述何种方案,均由于单个电子设备的算力有限,无法由单个电子设备独立支撑完整的模型训练过程或者模型推理过程,因此,目前可以采用多个工作节点(电子设备)并行执行同一模型的训练或推理过程的分布式数据处理方式,减少数据处理的事件,以提高数据处理的速度和效率。
在分布式数据处理过程中,各工作节点之间会传递数据,将会产生大量网络通信,而这其中,网络通信往往是基于TCP/IP协议实现的,而基于TCP/IP协议的传统网络通信,需要***内核和网络协议栈接入,其中涉及大量不必要的数据拷贝,特别是随着样本数据集的***性增长、样本数据集Batch Size的几何倍数增大,不仅是其本身通信效率低下,而且还将大量占用CPU资源,限制了分布式数据处理方案的并行规模和速度。
基于此,在本说明书提供的分布式通信***中,采用远程直接内存访问(RemoteDirect Memory Access,RDMA)技术,通过省去数据传输过程中不必要的数据拷贝,提高通信效率。同时,由于RDMA技术中由设备中的网卡承担数据读取等业务逻辑到,因此,数据传输过程中也不再需要CPU参与,避免占用大量CPU资源。较之传统网络通信,RDMA网络大大提升网络通信速度。将其应用于深度学习分布式训练或分布式推理,可以加快分布式训练过程中各个节点间数据的交换过程,大幅降低传统网络通信瓶颈对于分布式训练或推理的效率的不利影响。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1为本说明书实施例提供的一种适用于分布式集群中各设备之间执行分布式通信方法的***架构结构图,该分布式通信***可以应用于机器学习模型的训练过程、机器学习模型的推理过程等各种类型的需要进行分布式数据传输的场景。以下仅以分布式***应用于分布式模型训练为例,对技术方案进行详细阐述。
在分布式模型训练场景中,通过将具有庞大计算量和数据量的深度学习任务部署在多个工作节点并行执行,从而提升深度学习的计算效率。具体的,为了提高模型训练任务的执行速度,在分布式深度学习***中会配置若干工作节点,以并行地执行模型训练任务。各工作节点可以分别部署在多个不同的设备上,通过使用多个设备的硬件资源执行同一个模型训练任务,以面对海量训练样本和巨大规模的模型结构的模型训练任务。在分布式深度学习***中执行的模型训练任务时,部署在多个机器上的多个工作节点并行地执行模型训练任务。各工作节点的分布式机制可以是数据并行或模型并行,本说明书对此不做限定。
在本说明书中,以模型并行为例,基于完整的待训练模型的模型结构生成计算图,将计算图分割为多个计算子图,将不同的计算子图分别分配给不同的工作节点,也即,将模型结构分片存储在多个工作节点上,通过各工作节点依次执行各计算子图对应的数据处理任务,进行分布式模型训练过程。由于各工作节点可以分别部署在分布式集群中的多个设备中,因此,可能会存在跨设备通信的情况。
例如,对于图1中部署在第一设备的第一工作节点,当第一工作节点根据分配给自身的计算子图输出的目标数据,是第二设备中部署的第二工作节点的输入,则需要将第一工作节点输出的目标数据从第一设备传输到第二设备中,才能够使得第二工作节点获取到输入数据。
基于此,在本说明书提供的分布式通信***中,第一设备中部署第一工作节点,第二设备中部署第二工作节点,第一工作节点和第二工作节点分别执行分配到的数据处理任务。
另外,分布式通信***中还包括配置在所述第一设备的第一动态通信网络对象,以及配置在所述第二设备的第二动态通信网络对象。在本说明书中,第一设备中的第一动态通信网络对象和第二设备中第二动态通信网络对象实际上是在第一设备和第二设备运行时分别创建的全局的单例,用于多设备数据传输和消息通信。动态通信网络对象实际上是抽象类,其定义了多个虚函数,用于接收当前设备中各工作节点执行数据处理任务所需的输入数据,和/或发送当前设备中各工作节点执行数据处理任务输出的目标数据、各工作节点之间传输的消息,以及进行集合通信操作。
在本说明书中,分布式通信***适用于第一设备和第二设备为不同设备,且第一工作节点和第二工作节点之间存在数据传输需求的场景。此时,可以通过第一动态通信网络对象和第二动态通信网络对象之间的数据传输或消息通信,在RDMA技术的支撑下,实现第一工作节点和第二工作节点之间的跨设备数据传输。基于此,本说明书提供了一种基于分布式通信***执行的分布式通信方法,如图2所示,具体步骤如下:
S100:第一工作节点执行分配到自身的数据处理任务得到目标数据。
在本说明书中,如前所述,以如图1所示的分布式通信***应用于模型训练过程为例。各工作节点所分配到的数据处理任务可以是子模型的训练任务。具体的,根据待训练的目标模型的模型结构和训练所采用的训练样本生成模型训练任务,按照工作节点的数量,以及各工作节点所能够提供的算力资源,将目标模型对应的模型训练任务,分割成多个模型训练子任务,并将各模型训练子任务分配给各工作节点,通过各工作节点的异步执行分配的各模型训练子任务,实现完成模型训练任务的目的。
例如,分配到第一工作节点的数据处理任务是图像处理模型中部分子模型的模型训练任务,则分配给第一工作节点的数据处理任务中可包含该子模型的模型结构,以及模型训练任务所需要的训练样本,如样本图像。第一工作节点可以将样本图像输入该子模型,得到该子模型输出的样本图像的特征向量作为第一工作节点执行分配到自身的数据处理任务得到的目标数据。
可选地,待训练的目标模型可以编译为目标计算图,目标计算图中包括多个算子节点,算子节点用于完成数据处理操作,如神经网络中的卷积、池化等操作。目标计算图可被分割为多个计算子图,每个计算子图包括至少一个算子节点。各计算子图分别分配给各工作节点执行,以便基于多个工作节点的算力资源支撑目标模型的训练过程。
但实际上,本说明书提供的分布式通信***以及分布式通信方法并不局限于模型训练场景,根据各工作节点所执行的数据处理任务的不同,本说明书提供的分布式通信***和分布式通信方法还可以应用在分布式模型推理、分布式数据库的数据同步和传输、分布式能源调度优化等各种现有的场景中,本说明书并不限制分布式通信***和分布式通信方法的具体应用场景。
前述的目标模型可以是任意类型的深度学习网络,该目标模型可用于执行图像处理任务、语音处理任务、文本处理任务、视频处理任务等现有的任一数据处理任务,相应的,根据目标模型所处理的任务的不同,其所用的训练样本和目标模型对应的目标计算图包含的算子节点的数量均可以不同,本说明书对目标模型所采用的训练样本和目标计算图包含的算子节点的数量不做限定,也不限定目标模型的训练方式(有监督学习方式、无监督学习方式等)。另外,目标模型对应的目标计算图可以是静态计算图,也可是动态计算图,还可以是目标计算图的部分计算图为静态计算图,另外一部分计算图为动态计算图,本说明书对此不做限定。其中,动态计算图指的是计算图随着代码执行而创建,可以多次创建多次运行,如Pytorch;静态计算图指定是根据目标模型的模型结构先定义和创建,然后运行,并在运行中不做改变,如TensorFlow。
因此,在如图1所示的分布式通信***中,第一设备中部署第一工作节点,第二设备中部署第二工作节点,可根据分布式通信***适用的待训练的目标模型的计算图分割得到的各计算子图,向第一工作节点和第二工作节点分别分配计算子图,以便第一工作节点和第二工作节点分别基于自身分配到的计算子图执行数据处理任务。其中,基于目标模型的计算图分割得到的各计算子图之间可能存在上下游关系,即对于计算子图A而言,该计算子图A的输出数据是计算子图B的输入数据,则计算子图A是计算子图B的上游。由此,当第一工作节点分配到的计算子图是第二工作节点分配到的计算子图的上游,则说明第一工作节点基于分配到的计算子图执行数据处理任务得到的输出数据,需要发送给第二工作节点,第二工作节点才能将第一工作节点的输出数据作为输入,结合分配到第二工作节点的计算子图就能够执行数据处理任务并得到输出数据。
基于此,在此步骤中,第一工作节点可基于自身分配到的计算子图执行数据处理任务并输出目标数据。目标数据可存放在第一设备的物理内存、缓存中,也可以存放在预先注册的注册内存中,目标数据可以是数值向量、特征图等任意类型的数据,本说明书对此不做限定。一般的,第一工作节点确定目标数据后,目标数据即被第一设备存储,即,为目标数据占用第一设备的存储空间,目标数据对应于存储地址和数据长度。其中,第一工作节点执行数据处理任务的输入数据可以来源于其他工作节点,该其他工作节点可以与第一工作节点同属于第一设备,也可以部署在其他设备,本说明书对此不做限定。
S102:向所述第二动态通信网络对象发送通知消息,所述通知消息用于通知所述第二设备读取所述目标数据。
在本说明书中,第一设备和第二设备可以是不同的设备,部署在第一设备的第一工作节点执行数据处理任务输出的目标数据,可以是部署在第二设备的第二工作节点执行数据处理任务所需的输入数据。因此,需要采用本说明书提供的分布式通信***和分布式通信方法实现第一设备和第二设备之间的跨设备通信。其中,第一工作节点执行的数据处理任务以及第二工作节点执行的数据处理任务可以相同也可以不同,本说明书对此不做限定。比如,第一工作节点执行目标模型的第一子模型的模型训练任务,第二工作节点执行目标模型的第二子模型的模型训练任务,其中,第一子模型的输出是第二子模型的输入。
在本说明书中,采用RDMA技术省去数据传输过程中不必要的数据拷贝并避免占用大量CPU资源。因此,第一设备和第二设备中均配置有支持RDMA通信(相当于实现了RDMA引擎)的网卡(网络适配器),该网卡通过高速串行计算机扩展总线标准(PeripheralComponent Interconnect express,PCIe)总线,创建一个从 RDMA 引擎到内存的通道。通过该通道可以在数据搬运时绕过内核,实现数据传输或搬运过程中也不再需要CPU参与的效果。另外,在第一设备和第二设备的通信过程中所采用的支持RDMA技术,支持其的网络协议可以是InfiniBand、RDMA 过融合以太网(RDMA over Converged Ethernet,RoCE)、互联网广域 RDMA 协议(Internet Wide Area RDMA Protocol,iWARP),本说明书对此不做限定。
在本说明书中,第一设备中的第一工作节点在执行数据处理任务得到目标数据后,可将目标数据暂存在第一设备的内存中并准备传输。在目标数据发送给第二设备后,再将目标数据所占用的第一设备的内存释放(回收)。为了提高数据传输的效率,可在得到目标数据后,由生产目标数据的第一工作节点通知需要基于目标数据执行数据处理任务的第二工作节点,目标数据已经确定并准备传输。
可以理解的是,之所以通过上述方案,而非第二工作节点周期性的向第一工作节点发送目标数据获取请求,是因为第二工作节点向第一工作节点发送目标数据获取请求也会占用通信带宽以及第二设备的计算资源,如果第一工作节点迟迟没有确定目标数据,第二工作节点还频繁向第一工作节点发送目标数据获取请求,可能会占用较多的通信带宽以及计算资源,造成资源浪费并降低通信效率。为此,本说明书采用第一工作节点确定目标数据后,向第二工作节点发送通知消息的方式,无需第二工作节点频繁发送目标数据获取请求,只需响应第一工作节点发送的通知消息即可。
S104:第二动态通信网络对象响应于所述第一工作节点发送的通知消息,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存。
在实际应用中,分别分配给各工作节点的数据处理任务之间存在上下游关系,在本说明书中,第一工作节点分配到的数据处理任务是第二工作节点分配到的数据处理任务的上游。即第一工作节点执行数据处理任务输出的目标数据,是第二工作节点执行数据处理任务的输入。为了实现第一工作节点通知第二工作节点从第一设备中获取目标数据的效果,第一工作节点发送的通知信息中至少携带目标数据的属性,其中,目标数据的属性包括目标数据的存储地址、目标数据的长度、目标数据的数据类型。
基于此,第二动态通信对象在接收到第一工作节点发送的通知消息时,可根据通知消息携带的目标数据的属性,确定从目标数据的存储地址获取到目标数据。并且,为了使得第二设备中的第二工作节点能够以目标数据为输入执行数据处理任务,通常可以在第二设备中注册一定长度的目标内存,用以暂存目标数据,并在第二工作节点基于目标数据执行完成数据处理任务后,释放该目标内存。
可选地,第二动态通信网络对象根据所述通知消息携带的所述目标数据的长度,确定目标内存的目标长度,所述目标长度不小于所述目标数据的长度,并在所述第二设备的内存中分配所述目标长度的用于存储所述目标数据的目标内存。
具体的,RDMA 操作开始于操作设备的内存。在第二设备中注册目标内存相当于标识该注册内存专用于存放目标数据,第二设备中配置的网卡即可就在这段目标内存上寻址,并建立从第二设备网卡到目标内存的通道。注册时可以设置针对目标内存的读写权限(包括远程读写和本地读写),该读写权限可以通过local key或者remote key。读写权限所使用的key可以在内存注册时获取到。其中,local key用于本地的网卡访问本地的内存。remote key 是用于提供给远程设备的网卡来访问本地设备的内存。当目标内存注册完毕,即可对该目标内存执行RDMA操作。在本说明书中,第一动态通信网络对象可对目标内存执行RDMA写操作,在不执行数据拷贝、无CPU参与的条件下,将存储在第一设备的目标数据传输到第二设备的目标内存中。
S106:根据所述目标数据的属性以及所述目标内存,生成读取请求。
具体的,目标数据的属性可包括目标数据的在第一设备中的存储地址和目标数据的长度,目标内存的信息可包括目标内存的地址和目标内存可存储数据的长度。基于目标数据的属性和目标内存,生成读取请求,该读取请求用于从第一设备中读取目标数据到第二设备的目标内存中。另外,为了让第一设备内中的第一动态通信网络对象能够具备对第二设备中的目标内存进行写操作的权限,一般的,可将在第二设备中注册指定内存所获得的写操作全写也放入读取请求中,一同发送给第一设备中的第一动态通信网络对象,使得第一动态通信网络对象能够具备对第二设备中目标内存写操作的权限。
S108:将所述读取请求发送给所述第一动态通信网络对象。
S110:第一动态通信网络对象响应于由所述第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据。
具体的,由于读取请求中携带有目标数据的属性,而目标数据的属性可包括目标数据的存储地址以及目标数据的长度,因此,基于目标数据的属性即可从第一设备中查找到完整长度的目标数据。
S112:将所述目标数据拷贝到预先分配的指定注册内存。
在此步骤中,将目标数据拷贝到预先分配的指定注册内存,在指定注册内存中的目标数据均可以是准备被写入到其他设备的数据。这样,如果在第一设备中存在多个目标数据需要分别写入不同的设备中时,可以异步地执行各目标数据的写操作,而不需要每次执行目标数据的写操作时,都要从目标数据的存储地址中查找目标数据,以便提高数据传输的效率。
例如,对于第一设备中存储的目标数据data1和目标数据data2,data1需要写入设备A中,data2需要写入设备B中,第一设备基于设备A和设备B分别发送的读取请求,查找到data1和data2时,将data1和data2放入指定注册内存,此时,第一设备无需在完成data1写入设备A之后才执行data2写入设备B的操作,而是在data1写入设备A的过程中,就能够开始执行data2写入设备B的操作。
S114:将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中。
具体的,在第一动态通信网络对象接收到第二动态通信网络对象发送的读取请求时,第一动态通信网络对象即获取了对目标内存执行写操作的权限,相当于第二动态通信网络对象将目标内存的操作权交给了第一动态通信网络对象。同时,读取请求时根据目标内存确定的,因此,读取请求中还携带有目标内存的地址以及长度,第一动态通信网络对象可以通过前述S102建立的通道,基于写操作的方式,将目标数据写入目标内存中,至于第一动态通信网络对象是直接将完整的目标数据写入目标内存中,还是分段地将目标数据写入目标内存中,本说明书对此不做限定。
S116:第二工作节点从所述第二设备的目标内存中查找所述目标数据,并根据所述目标数据执行分配到的自身的数据处理任务。
由于第一工作节点执行数据处理任务得到的目标数据是第二工作节点执行数据处理任务的输入,因此,在第一动态通信网络对象将目标数据写入第二设备的目标内存后,第二工作节点可以从第二设备的目标内存中直接获取目标数据,从而基于目标数据执行分配到第二工作节点的数据处理任务。
之后,如果第二工作节点基于目标数据执行数据处理任务后得到的数据,是其他设备上部署的工作节点执行数据处理任务的输入数据,则可将原本的第二设备重新作为第一设备,将该其他设备重新作为第二设备,返回重新执行上述步骤S100,直到基于各工作节点均完成数据处理任务。
本说明提供的分布式通信方法中,通过第一动态网络对象以及第二动态网络对象之间的交互,实现了跨设备的直接通信,无需大量不必要的数据拷贝,也不会占用中央处理器资源,从而提高了通信效率和数据并行的规模。
另外,当本说明书提供的分布式通信***和通信方法应用在模型训练过程时,分布式通信***中还可以包括参数服务器,参数服务器用于维护各工作节点分配到的子模型的模型参数,参数服务器和各设备中部署的各工作节点之间的参数交换也可以采用与前述图2方案类似的分布式通信方案。
在本说明书一个或多个实施例中,在上述如图2步骤S114中,第一动态通信网络对象可直接将完整的目标数据写入目标内存中,也可以分段地将目标数据写入目标内存中,但无论采用上述何种方式,均需要在将目标数据完成写入目标内存后,通知第二动态通信网络对象写入目标数据的操作已经执行完毕,这样,第二工作节点才知道可以基于目标数据执行数据处理任务。为此,第一动态通信网络对象将目标数据写入目标内存的写操作,可以是带指定信息的写操作,其中,该指定信息用于向第二动态通信网络对象通知目标内存中已写入数据。
对于直接将完整的目标数据写入目标内存的情况:第一动态通信网络对象生成指定信息,所述指定信息用于向所述第二动态通信网络对象通知所述目标数据已写入所述第二设备的目标内存,将所述指定注册内存中的目标数据通过写操作写入所述第二设备的目标内存,并将所述指定信息写入所述第二设备中的完成队列中。其中,完成队列是预先在第二设备中创建的,该完成队列用于存放已完成的工作请求。从而,第二动态通信网络对象通过查询第二设备中的完成队列,根据所述完成队列包含的指定信息,确定所述目标数据是否已写入所述第二设备的目标内存。若完成队列包含完整的指定信息,确定目标数据已经被完整写入目标内存;若完成队列不存在指定信息,或指定信息不完整,说明目标数据没有被完整写入目标内存。
对于分段地将目标数据写入目标内存的情况:第一动态通信网络对象将所述目标数据按照预设的数据长度进行切分,得到若干子数据,之后,针对每个子数据,生成该子数据对应的指定信息,所述指定信息用于向所述第二动态通信网络对象通知该子数据已写入所述第二设备的目标内存,于是,将所述指定注册内存中所述目标数据对应的各子数据通过写操作依次写入所述第二设备的目标内存,并按照所述各子数据的写入顺序依次在所述第二设备中的完成队列中写入所述各子数据对应的指定信息。从而,第二动态通信网络对象通过查询第二设备中的完成队列,根据完成队列中存放的指定信息,确定各子数据是否已写入所述第二设备的目标内存。若完成队列包含完整的指定信息,确定目标数据已经被完整写入目标内存;若完成队列不存在指定信息,或指定信息不完整,说明目标数据没有被完整写入目标内存。另外,当图2所示方案采用分段地将目标数据写入目标内存时,无论目标数据的数据长度是多少,均可以通过分段写入的方式,逐一将各子数据写入目标内存,可见,本说明书提供的分布式通信方案支持变长数据的动态网络通信,能够适应不同的神经网络模型和数据类型,扩展了分布式通信***和方法的应用场景。
在上述两种情况中,均需要第二设备中预先创建完成队列,其中,完成队列用于存放已经完成的工作请求,在完成队列中存放的工作请求仅说明该工作请求(发送、接受、读、写)已经完成,但并不说明该工作请求的执行结果,无论该工作请求的执行结果是成功还是失败,只要该工作请求已经完成,就会在完成队列中写入相对应的元素。
另外,通过在完成队列中存放指定信息的方式,指定信息不会拷贝到第二设备的内存中,不会占用第二设备的内存,第二工作节点也只需检查完成队列即可获知目标数据是否已经写入完成,不需要访问内存,也不会反复执行没必要的拷贝操作,从而提高了数据传输效率。
相应的,完成队列中存放有用于通知目标数据已写入目标内存的指定信息,那么,可以在第二设备中创建一个轮询线程,专门用于轮询完成队列,检查完成队列是否接收了完成的工作请求,并获取已完成的工作请求的相关信息,如工作请求的完成状态、大小、源地址等。轮询线程还可以检查完成队列中完成状态为错误的工作请求,并向该完成状态为错误的工作请求的源地址发送错误提示,以便修改该工作请求后重新执行。一般的,完成队列与轮询线程是一一对应的关系,即,每个轮询线程只能轮询一个完成队列。
另外,一个完成队列可以记录多种类型的工作请求(发送、接受、读、写)的完成情况。并在收到完成事件后调用相应的回调方法。这样做的好处是主线程不会被阻塞,而且可以处理多个队列对或多个工作请求。完成队列可以通过调用创建完成队列接口方法初始化所述完成队列。当完成队列无需继续记录工作请求的完成状态时,可调用销毁完成队列的接口方法销毁所述完成队列。
前述方案均是采用第一设备中的第一动态通信网络对象通过写操作将存储在第一设备中的目标设备写入第二设备的目标内存中,相当于RDMA的单边写入操作,第二动态通信网络对象仅需向第一动态通信网络对象提供需要进行写入操作的目标内存的地址,无需第二工作节点参与其中,即可完成数据的传输过程,第二工作节点只需在需要目标数据执行数据处理任务时,从目标内存中查找目标数据即可,无需感知此次目标数据的传输过程的开始和结束。
在实际应用中,还可以通过RDMA的单边读取操作完成目标数据在第一设备和第二设备之间的传输。由于在步骤S104第二动态通信网络对象已经从通信消息中解析得到目标数据的属性,目标数据的属性可包括目标数据在第一设备中的存储地址,因此,单边读取操作的方案与图2所示方案的差异仅在于在步骤S106第二动态通信网络对象生成读取请求之前,第一动态通信网络对象需要给第一动态通信网络对象读取目标数据的权限,第二动态通信网络对象在步骤S108向第一动态通信网络对象发读取请求的同时,有权限直接对第一设备中存储的目标数据执行读取操作,从而将目标数据传输到第二设备。
在本说明书一个可选的实施例中,无论第一动态通信网络对象是直接将完整的目标数据写入目标内存中,还是分段地将目标数据写入目标内存中,在第二动态通信网络对象根据完成队列中存放的指定信息确定目标数据已写入所述第二设备的目标内存时,第二动态通信网络生成确认消息,并将所述确认消息发送报告给第一动态通信网络对象。其中,所述确认消息用于通知所述第一动态通信网络对象回收所述目标数据在所述第一设备中占用的内存。之后,第一动态通信网络对象响应于所述第二动态通信网络对象发送的确认消息,将所述目标数据在所述第一设备中占用的内存回收。之后,被回收的内存可重新用于存放其他数据,如下一个需要被传输的目标数据。
基于上述方案,第一设备中用于存放目标数据的内存可以被及时回收,避免大量内存被无故占用,从而提升了内存资源的利用率,提高了数据的传输效率。
基于如图2步骤S104~S114所示方案可将目标数据写入第二设备中,在本说明书一个或多个实施例中,还可以基于发送队列和接收队列,将目标数据从第一设备的发送指定内存传输到第二设备的接收指定内存中。具体的,第一设备的内存中预先分配用于存储待发送的数据的第一发送指定内存和第二发送指定内存,第二设备的内存中预先分配用于存储接收到的数据的第一接收指定内存和第二接收指定内存,第一发送指定内存和第一接收指定内存之间存在对应关系,第二发送指定内存和第二接收指定内存之间存在对应关系。
如图3所示,具体方案如下:
S200:第一动态通信网络对象将查找到的目标数据切分为若干子数据。
为了进一步提高数据传输的效率,可以通过提高传输的并行程度。为此,可以在第一设备中注册第一发送指定内存和第二发送指定内存,用于存储处于待发送状态的数据(如第一设备中的目标数据)。相应的,在第二设备中注册第一接收指定内存和第二接收指定内存,用于存储处于接收状态的数据。并且,在第一发送指定内存和第二发送指定内存被分配(注册)后,第一设备可从第二设备获知在第二设备中是否分配有第一接收指定内存和第二接收指定内存,若存在,则可建立第一发送指定内存和第一接收指定内存之间的对应关系,以及建立第二发送指定内存和第二接收指定内存之间的对应关系,从而成对使用第一发送指定内存和第一接收指定内存,以及成对使用第二发送指定内存和第二接收指定内存。
由于在第一设备中分配了第一发送指定内存和第二发送指定内存,因此,可以将目标数据分割为若干段子数据,将各子数据分别存储在第一发送指定内存和第二发送指定内存,之后,从第一发送指定内存和第二发送指定内存分别发送子数据到第二设备,以实现完整的目标数据的传输。因此,在此步骤中,将目标数据分割为若干子数据,各子数据之间的长度可以相同也可以不同,本说明书对子数据的长度以及数量不做限定。
可以理解的是,本说明书仅以存在两组成对使用的发送指定内存和接收指定内存为例,详细阐述提高数据传输并行程度的方案,但在实际应用中,还可以分配多组成对使用的发送指定内存和接收指定内存,如在第一设备分配四个发送指定内存,并在第二设备相对应的分配四个接收指定内存,则一共存在四组成对使用的发送指定内存和接收指定内存,那么就可以将目标数据切分为四段子数据,分别放入四个发送指定内存,之后基于四个发送指定内存,异步地执行数据传输。
S202:当确定所述第一发送指定内存和所述第一接收指定内存均空闲时,将所述目标数据包含的第一子数据拷贝到所述第一发送指定内存中。
一般的,存在对应关系的第一发送指定内存和第一接收指定内存是成对使用的,也即,第一发送指定内存中的数据只会传输到第一接收指定内存中,因此,拷贝到第一发送指定内存中的第一子数据将会通过第一动态通信网络对象写入第一接收指定内存中。而当第一发送指定内存和第一接收指定内存正在处理数据传输时,第一发送指定内存和第一接收指定内存中会存储有数据,此时,第一发送指定内存和第一接收指定内存处于占用状态。因此,在确定第一发送指定内存和第一接收指定内存均处于空闲状态(没有存储数据)时,才可以执行第一子数据的传输任务。
另外,在实际应用中,第一发送指定内存和第一接收指定内存可以由第一设备中的第一队列对管理。其中,第一队列对包含第一发送队列和第一接收队列,第一发送队列用于存放发送请求,第一接收队列用于存放接收请求。相应的,第二设备中也存在第二队列对管理第二发送指定内存和第二接收指定内存。
第一动态通信网络有对象还可以管理第一设备中的完成队列,完成队列用于存储已经完成的工作请求,完成队列包含了完成的工作请求的相关信息,比如请求完成的状态、操作码、大小、源地址等。第一动态通信网络对象管理第一队列对的完成事件,第一队列对中第一发送队列和第一接收队列中的完成事件均会被发送到所述完成队列,然后在第一设备上轮询完成队列得到确定哪些请求被完成。第二动态通信网络对象同理。
S204:将所述第一子数据通过写操作写入所述第一接收指定内存中。
此步骤与图2步骤S114类似,此处不再赘述。
S206:第二动态通信网络对象从所述第一接收指定内存中查找写入的第一子数据,并将查找到的第一子数据拷贝到所述第二设备的目标内存中。
由于第二工作节点是从目标内存中查找目标数据的,因此,在第一接收指定内存中写入第一子数据后,第二动态通信网络对象需要将第一子数据拷贝到第二设备的目标内存中,便于第二工作节点从目标内存中查找目标数据。
S208:当确定所述第二发送指定内存和所述第二接收指定内存均空闲时,将所述目标数据包含的第二子数据拷贝到所述第二发送指定内存中。
与前述S202类似,存在对应关系的第二发送指定内存和第二接收指定内存是成对使用的,也即,第二发送指定内存中的数据只会传输到第二接收指定内存中。
可选地,在第一动态通信网络对象将第一子数据通过写操作从第一发送指定内存写入所述第一接收指定内存之后,确定与所述第一子数据连续的、所述目标数据包含的第二子数据通过第二发送指定内存以及第二接收指定内存完成数据传输。即,至少在步骤S204之后执行步骤S208。
可选地,第一发送指定内存和第二发送指定内存是两个独立的内存空间,第一接收指定内存和第二接收指定内存也是两个独立的内存空间,也即,从第一发送指定内存向第一接收指定内存传输第一子数据的同时,也可以执行从第二发送指定内存向第二接收指定内存传输第二子数据,即,执行步骤S204至S206的同时,执行步骤S208至步骤S210。
S210:将所述第二子数据通过写操作写入所述第二接收指定内存中。
此步骤与图2步骤S114类似,此处不再赘述。
S212:第二动态通信网络对象从所述第二接收指定内存中查找写入的第二子数据,并将查找到的第二子数据拷贝到所述第二设备的目标内存中。
在本说明书一个可选的实施例中,在步骤S202之前,还需要确定第二设备中存在第一发送指定内存对应的第一接收指定内存,以及确定第二设备中存在第二发送指定内存对应的第二接收指定内存。为此,第一动态通信网络对象还用于,预先通过远程过程调用获取所述第二动态通信网络对象所属的第二设备中分配的第一接收内存和第二接收内存。
基于如图2步骤S104~S114所示方案可将目标数据写入第二设备中,在本说明书一个或多个实施例中,还可以基于第一设备中的消息总线以及第二设备中的消息总线实现目标数据的传输,具体方案如下,如图4所示:
S300:第一动态通信网络对象启动所述第一设备中的消息总线,并通过所述第一设备中的消息总线确定接收目标数据的第二设备的标识。
具体的,在第一设备和第二设备通过RDMA技术实现数据传输的过程中,除了如前述方案通过第一动态通信网络对象通过写操作在第二设备的目标内存写入目标数据之外,还可以由第一设备主动将目标数据发送给第二设备,并由第二设备的消息总线将目标数据交友第二工作节点执行数据处理任务。
为此,首先可启动第一设备中的消息总线,第一设备的消息总线可根据第一设备中第一工作节点执行的数据处理任务的下游任务,确定第一工作节点得到的目标数据可以发送给哪些其他工作节点。一般的,第一工作节点在接收到分配给第一工作节点的数据处理任务时,还可以将该数据处理任务的下游任务的标识也发送给第一工作节点,消息总线即可格局下游任务的标识,在各工作节点中确定执行下游任务的工作节点,进而确定执行下游任务的工作节点所属的设备。
各工作节点分别所属的设备均对应唯一标识,以通过标识分辨各工作节点分别部署在哪些设备上。设备的标识可以是现有的任意形式的字符串,类型和长度本说明书不做限定。
S302:获取所述第一动态通信网络对象所属的第一设备的标识,当确定所述第一设备的标识与所述第二设备的标识不同时,将所述目标数据发送给所述第二设备中的第二动态通信网络对象。
具体的,比对第一设备的标识以及第二设备的标识,一般的,标识相同的设备是同一设备,标识不相同的设备是两个不同设备。
当执行下游任务的工作节点所属的设备(第二设备)与第一设备为同一设备时,将目标数据传输给执行下游任务的工作节点的数据传输过程属于非跨设备的数据传输过程,通过第一设备的消息总线查找到执行下游任务的工作节点所对应的消息队列,将目标数据压入该消息队列,即可实现执行下游任务的工作节点获取目标数据的目的。
当第二设备与第一设备不是同一设备时,将目标数据传输给第二工作节点的数据传输过程属于跨设备的数据传输过程,这就需要通过第一动态通信网络对象和第二动态通信网络对象之间的交互,才能够实现目标数据从第一设备传输到第二设备的目的。
具体的,第一动态通信网络对象根据第一设备和第二设备遵循的通信协议和算法,将目标数据打包,通过指定接口发送给第二设备的第二动态通信网络对象。该指定接口与前述步骤S102中所述的通道类似,即第一设备中支持RDMA通信的网卡与第二设备中支持RDMA通信的网卡之间的消息传输接口,通过该指定接口传输的数据或消息,可绕过内核,实现数据传输或搬运过程中也不再需要CPU参与的效果。
S304:第二动态通信网络对象接收由所述第一动态通信网络对象发送的目标数据,启动所述第二设备中的消息总线。
S306:通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列。
具体的,第一动态通信网络对象发送的目标数据中还可以携带第二工作节点对应的标识,第二设备的消息总线通过解析目标数据即可确定目标数据最终要传输到哪个第二工作节点上执行数据处理任务,因此,第二设备的消息总线可确定目标数据对应的第二工作节点,从而查找到执行第二工作节点的数据处理任务的线程,以及该线程对应的消息队列,即第二工作节点对应的消息队列。
S308:调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点。
在此步骤中,通过第二设备中预先创建的轮询线程,轮询第二工作节点对应的消息队列,当第二工作节点对应的消息队列中存在目标数据时,将该目标数据发送给第二工作节点,使得第二工作节点能够基于目标数据执行数据处理任务。
之所以采用轮询线程轮询消息队列,而不采用第二工作节点主动查询消息队列的方案,是因为,第二工作节点主动查询消息队列也会占用第二工作节点的计算资源,频繁查询消息队列会占用大量计算资源,从而减少了执行数据处理任务所用的计算资源。为此,本说明书中采用轮询线程检测消息队列的方案,只要消息队列中存在数据,就将该数据发送给第二工作节点,无需第二工作节点频繁查询消息队列,使得第二工作节点的计算资源最大程度地用于执行数据处理任务,而非浪费在查询消息队列上,从而提升数据处理的效率。
在本说明书中,第一设备中的第一动态通信网络对象和第二设备中第二动态通信网络对象实际上是在第一设备和第二设备运行时创建的全局的单例,用于多设备数据传输和消息通信的模块。所定义的动态通信网络结构体是一个抽象类,它定义了一些虚函数,用于发送和接收工作节点执行数据处理任务所输出的目标数据、其他消息,以及进行集合通信操作。不同的通信协议和算法会继承所述动态通信网络抽象类,并实现这些虚函数。
其中,虚函数可包括发送工作节点消息的方法、接收工作节点消息的方法等。发送工作节点消息的方法用于发送工作节点消息的结构体,该结构体中包含工作节点的标识以及任务信息,任务信息用于指示向工作节点分配的数据处理任务的信息。所述接收工作节点消息的方法是用于接收一个工作节点消息的结构体,它会返回发送者的设备的标识和一个工作节点消息指针,所述工作节点消息用于指示表示从哪个设备接收到了什么消息。
可选地,在第一设备和第二设备创建动态通信网络的全局对象中,可根据动态通信网络环境变量确定第一设备和第二设备所采用的通信协议和算法,并调用与通信协议和算法相匹配的工厂方法分别在第一设备创建第一动态通信网络对象,以及在第二设备创建第二动态通信网络对象。其中,可分为以下步骤实现:
第一步:在所述工厂方法中,创建并返回一个动态通信网络对象的智能指针,并将其赋值给动态通信网络全局对象。
第二步:在动态通信网络对象的构造方法中,会创建一个动态通信网络实现类的工作者对象,并调用其构造方法和初始化方法。
第三步:在动态通信网络实现类的工作者对象的构造方法中,会创建一个动态通信网络实现类相关的资源,并启动一个轮询线程,负责处理所述动态通信网络实现类的事件。
第四步:在动态通信网络实现类的工作者对象的初始化方法中,会根据集群中的机器数量和地址,创建相应数量的通信对象,并调用其构造方法和初始化方法。
第五步:在所述通信对象的构造方法中,会创建一个缓冲池对象,用于管理缓冲区的申请和释放。
第六步:在所述通信对象的初始化方法中,会根据目标机器的地址,建立动态通信网络连接,并注册到动态通信网络实现类的事件中。
图5为本说明书提供的一种分布式通信装置示意图,所述装置应用于第一动态通信网网络对象,具体包括:
目标数据确定模块400,用于响应于由第二设备中的第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据;其中,所述读取请求是由所述第二动态通信网络对象响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性以及为目标数据分配的目标内存生成的;
拷贝模块402,用于将所述目标数据拷贝到预先分配的指定注册内存;
第一写入模块404,用于将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,以便第二工作节点从所述目标内存中查找所述目标数据,并根据查找到的目标数据执行分配到所述第二工作节点自身的数据处理任务。
可选地,所述第二设备中预先创建有完成队列,所述完成队列用于存放已完成的工作请求;
可选地,所述第一写入模块404具体用于,将所述目标数据按照预设的数据长度进行切分,得到若干子数据;针对每个子数据,生成该子数据对应的指定信息,所述指定信息用于向所述第二动态通信网络对象通知该子数据已写入所述第二设备的目标内存;将所述指定注册内存中所述目标数据对应的各子数据,通过写操作依次写入所述第二设备的目标内存,并按照所述各子数据的写入顺序依次在所述第二设备中的完成队列中写入所述各子数据对应的指定信息,以使所述第二动态通信网络对象通过查询所述第二设备中的完成队列中存放的指定信息,确定所述目标数据包含的各子数据是否已写入所述第二设备的目标内存。
可选地,所述第一设备的内存中预先分配用于存储待发送的数据的第一发送指定内存和第二发送指定内存,所述第二设备的内存中预先分配用于存储接收到的数据的第一接收指定内存和第二接收指定内存,所述第一发送指定内存和所述第一接收指定内存之间存在对应关系,所述第二发送指定内存和所述第二接收指定内存之间存在对应关系;
可选地,所述装置还包括:
第二写入模块406,具体用于将查找到的目标数据切分为若干子数据;当确定所述第一发送指定内存和所述第一接收指定内存均空闲时,将所述目标数据包含的第一子数据拷贝到所述第一发送指定内存中,并将所述第一子数据通过写操作写入所述第一接收指定内存中,以便所述第二动态通信网络对象从所述第一接收指定内存中查找写入的第一子数据,并将查找到的第一子数据拷贝到所述第二设备的目标内存中;当确定所述第二发送指定内存和所述第二接收指定内存均空闲时,将所述目标数据包含的第二子数据拷贝到所述第二发送指定内存中,并将所述第二子数据通过写操作写入所述第二接收指定内存中,以便所述第二动态通信网络对象所述第二接收指定内存中查找写入的第二子数据,并将查找到的第二子数据拷贝到所述第二设备的目标内存中。
可选地,所述装置还包括:
传输模块408,具体用于启动所述第一设备中的消息总线,并通过所述第一设备中的消息总线确定接收目标数据的第二设备的标识;获取所述第一动态通信网络对象所属的第一设备的标识,当确定所述第一设备的标识与所述第二设备的标识不同时,将所述目标数据发送给所述第二设备中的第二动态通信网络对象,以便所述第二动态通信网络对象接收由所述第一动态通信网络对象发送的目标数据,并启动所述第二设备中的消息总线,通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点。
图6为本说明书提供的一种分布式通信装置示意图,所述装置应用于第二动态通信网网络对象,具体包括:
目标内存分配模块500,用于响应于第一工作节点发送的通知消息,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存;其中,所述通知消息是由所述第一工作节点根据执行数据处理任务得到的目标数据生成并发送的;
读取请求发送模块502,用于根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给所述第一动态通信网络对象,以使所述第一动态通信网络对象根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据,并将所述目标数据拷贝到预先分配的指定注册内存,以便将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,使得第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
可选地,所述目标内存分配模块500具体用于,根据所述通知消息携带的所述目标数据的长度,确定目标内存的目标长度,所述目标长度不小于所述目标数据的长度;在所述第二设备的内存中分配所述目标长度的用于存储所述目标数据的目标内存。
可选地,所述装置还包括:
轮询模块504,具体用于接收由所述第一动态通信网络对象发送的目标数据,启动所述第二设备中的消息总线,通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点,以使所述第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图2所示的分布式通信方法。
本说明书还提供了图7所示的电子设备的示意结构图。如图7所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图2所示的分布式通信方法。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device, PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字***“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、***、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、***或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。

Claims (20)

1.一种分布式通信***,其特征在于,所述***包括:部署在第一设备的第一工作节点、部署在第二设备的第二工作节点、配置在所述第一设备的第一动态通信网络对象,以及配置在所述第二设备的第二动态通信网络对象;
所述第一工作节点,用于执行分配到自身的数据处理任务得到目标数据;向所述第二动态通信网络对象发送通知消息,所述通知消息用于通知所述第二设备读取所述目标数据;
所述第二动态通信网络对象,用于响应于所述第一工作节点发送的通知消息,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存;根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给所述第一动态通信网络对象;
所述第一动态通信网络对象,用于响应于由所述第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从所述第一设备的内存中查找所述目标数据;将所述目标数据拷贝到预先分配的指定注册内存;将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中;
所述第二工作节点,用于从所述第二设备的目标内存中查找所述目标数据,并根据所述目标数据执行分配到的自身的数据处理任务。
2.如权利要求1所述的***,其特征在于,所述第二设备中预先创建完成队列,所述完成队列用于存放已完成的工作请求;
所述第一动态通信网络对象具体用于,生成指定信息,所述指定信息用于向所述第二动态通信网络对象通知所述目标数据已写入所述第二设备的目标内存;将所述指定注册内存中的目标数据通过写操作写入所述第二设备的目标内存,并将所述指定信息写入所述第二设备中的完成队列中;
所述第二动态通信网络对象还用于,查询所述第二设备中的完成队列,根据所述完成队列包含的指定信息,确定所述目标数据是否已写入所述第二设备的目标内存。
3.如权利要求1所述的***,其特征在于,所述第二设备中预先创建完成队列,所述完成队列用于存放已完成的工作请求;
所述第一动态通信网络对象具体用于,将所述目标数据按照预设的数据长度进行切分,得到若干子数据;针对每个子数据,生成该子数据对应的指定信息,所述指定信息用于向所述第二动态通信网络对象通知该子数据已写入所述第二设备的目标内存;将所述指定注册内存中所述目标数据对应的各子数据通过写操作依次写入所述第二设备的目标内存,并按照所述各子数据的写入顺序依次在所述第二设备中的完成队列中写入所述各子数据对应的指定信息;
所述第二动态通信网络对象还用于,查询所述第二设备中的完成队列,根据所述完成队列中存放的指定信息,确定所述目标数据包含的各子数据是否已写入所述第二设备的目标内存。
4.如权利要求2~3任一所述的***,其特征在于,所述第二动态通信网络对象还用于,当根据所述完成队列中存放的指定信息,确定所述目标数据已写入所述第二设备的目标内存时,生成确认消息,并将所述确认消息发送给所述第一动态通信网络对象;其中,所述确认消息用于通知所述第一动态通信网络对象回收所述目标数据在所述第一设备中占用的内存;
所述第一动态通信网络对象还用于,响应于所述第二动态通信网络对象发送的确认消息,将所述目标数据在所述第一设备中占用的内存回收。
5.如权利要求1所述的***,其特征在于,所述第一设备的内存中预先分配用于存储待发送的数据的第一发送指定内存和第二发送指定内存,所述第二设备的内存中预先分配用于存储接收到的数据的第一接收指定内存和第二接收指定内存,所述第一发送指定内存和所述第一接收指定内存之间存在对应关系,所述第二发送指定内存和所述第二接收指定内存之间存在对应关系;
所述第一动态通信网络对象具体用于,将查找到的目标数据切分为若干子数据;当确定所述第一发送指定内存和所述第一接收指定内存均空闲时,将所述目标数据包含的第一子数据拷贝到所述第一发送指定内存中,并将所述第一子数据通过写操作写入所述第一接收指定内存中;当确定所述第二发送指定内存和所述第二接收指定内存均空闲时,将所述目标数据包含的第二子数据拷贝到所述第二发送指定内存中,并将所述第二子数据通过写操作写入所述第二接收指定内存中;
所述第二动态通信网络对象具体用于,从所述第一接收指定内存中查找写入的第一子数据,并将查找到的第一子数据拷贝到所述第二设备的目标内存中;从所述第二接收指定内存中查找写入的第二子数据,并将查找到的第二子数据拷贝到所述第二设备的目标内存中。
6.如权利要求5所述的***,其特征在于,所述第一动态通信网络对象还用于,预先通过远程过程调用获取所述第二动态通信网络对象所属的第二设备中分配的第一接收内存和第二接收内存。
7.如权利要求1所述的***,其特征在于,所述目标数据的属性包括所述目标数据的长度;
所述第二动态通信网络对象具体用于,根据所述通知消息携带的所述目标数据的长度,确定目标内存的目标长度,所述目标长度不小于所述目标数据的长度;在所述第二设备的内存中分配所述目标长度的用于存储所述目标数据的目标内存。
8.如权利要求1所述的***,其特征在于,所述第一动态通信网络对象还用于启动所述第一设备中的消息总线,并通过所述第一设备中的消息总线确定接收目标数据的第二设备的标识;获取所述第一动态通信网络对象所属的第一设备的标识,当确定所述第一设备的标识与所述第二设备的标识不同时,将所述目标数据发送给所述第二设备中的第二动态通信网络对象;
所述第二动态通信网络对象还用于,接收由所述第一动态通信网络对象发送的目标数据,启动所述第二设备中的消息总线;通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点。
9.如权利要求1所述的***,其特征在于,所述第一工作节点所执行的数据处理任务和所述第二工作节点所执行的数据处理任务之间存在上下游关系,所述数据处理任务是基于由目标计算图分割得到的各计算子图确定的,所述上下游关系用于表征所述各计算子图之间的输入输出关系,所述目标计算图是根据获取到的目标模型确定的;
所述目标计算图包括动态计算图和静态计算图中的至少一种。
10.一种分布式通信方法,其特征在于,所述方法应用于第一动态通信网络对象,所述方法包括:
响应于由第二设备中的第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从第一设备的内存中查找所述目标数据;其中,所述读取请求是由所述第二动态通信网络对象响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性以及为目标数据分配的目标内存生成的;
将所述目标数据拷贝到预先分配的指定注册内存;
将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,以便第二工作节点从所述目标内存中查找所述目标数据,并根据查找到的目标数据执行分配到所述第二工作节点自身的数据处理任务。
11.如权利要求10所述的方法,其特征在于,所述第二设备中预先创建有完成队列,所述完成队列用于存放已完成的工作请求;
将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,具体包括:
将所述目标数据按照预设的数据长度进行切分,得到若干子数据;
针对每个子数据,生成该子数据对应的指定信息,所述指定信息用于向所述第二动态通信网络对象通知该子数据已写入所述第二设备的目标内存;
将所述指定注册内存中所述目标数据对应的各子数据,通过写操作依次写入所述第二设备的目标内存,并按照所述各子数据的写入顺序依次在所述第二设备中的完成队列中写入所述各子数据对应的指定信息,以使所述第二动态通信网络对象通过查询所述第二设备中的完成队列中存放的指定信息,确定所述目标数据包含的各子数据是否已写入所述第二设备的目标内存。
12.如权利要求10所述的方法,其特征在于,所述第一设备的内存中预先分配用于存储待发送的数据的第一发送指定内存和第二发送指定内存,所述第二设备的内存中预先分配用于存储接收到的数据的第一接收指定内存和第二接收指定内存,所述第一发送指定内存和所述第一接收指定内存之间存在对应关系,所述第二发送指定内存和所述第二接收指定内存之间存在对应关系;
所述方法还包括:
将查找到的目标数据切分为若干子数据;
当确定所述第一发送指定内存和所述第一接收指定内存均空闲时,将所述目标数据包含的第一子数据拷贝到所述第一发送指定内存中,并将所述第一子数据通过写操作写入所述第一接收指定内存中,以便所述第二动态通信网络对象从所述第一接收指定内存中查找写入的第一子数据,并将查找到的第一子数据拷贝到所述第二设备的目标内存中;
当确定所述第二发送指定内存和所述第二接收指定内存均空闲时,将所述目标数据包含的第二子数据拷贝到所述第二发送指定内存中,并将所述第二子数据通过写操作写入所述第二接收指定内存中,以便所述第二动态通信网络对象所述第二接收指定内存中查找写入的第二子数据,并将查找到的第二子数据拷贝到所述第二设备的目标内存中。
13.如权利要求10所述的方法,其特征在于,所述方法还包括:
启动所述第一设备中的消息总线,并通过所述第一设备中的消息总线确定接收目标数据的第二设备的标识;
获取所述第一动态通信网络对象所属的第一设备的标识,当确定所述第一设备的标识与所述第二设备的标识不同时,将所述目标数据发送给所述第二设备中的第二动态通信网络对象,以便所述第二动态通信网络对象接收由所述第一动态通信网络对象发送的目标数据,并启动所述第二设备中的消息总线,通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点。
14.一种分布式通信方法,其特征在于,所述方法应用于第二动态通信网络对象,所述方法包括:
响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性,在第二设备的内存中分配用于存储所述目标数据的目标内存;其中,所述通知消息是由第一工作节点根据执行数据处理任务得到的目标数据生成并发送的;
根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给第一动态通信网络对象,以使所述第一动态通信网络对象根据从所述读取请求中解析得到的目标数据的属性,从第一设备的内存中查找所述目标数据,并将所述目标数据拷贝到预先分配的指定注册内存,以便将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,使得第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
15.如权利要求14所述的方法,其特征在于,根据所述通知消息携带的所述目标数据的属性,在所述第二设备的内存中分配用于存储所述目标数据的目标内存,具体包括:
根据所述通知消息携带的所述目标数据的长度,确定目标内存的目标长度,所述目标长度不小于所述目标数据的长度;
在所述第二设备的内存中分配所述目标长度的用于存储所述目标数据的目标内存。
16.如权利要求14所述的方法,其特征在于,所述方法还包括:
接收由所述第一动态通信网络对象发送的目标数据,启动所述第二设备中的消息总线,通过所述第二设备的消息总线确定所述第二工作节点对应的消息队列,并将所述目标数据***所述第二工作节点对应的消息队列;
调用所述第二设备中的轮询线程,通过所述轮询线程轮询所述第二工作节点对应的消息队列,将所述消息队列中的目标消息发送给所述第二工作节点,以使所述第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
17.一种分布式通信装置,其特征在于,所述装置应用于第一动态通信网络对象,所述装置包括:
目标数据确定模块,用于响应于由第二设备中的第二动态通信网络对象发送的读取请求,根据从所述读取请求中解析得到的目标数据的属性,从第一设备的内存中查找所述目标数据;其中,所述读取请求是由所述第二动态通信网络对象响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性以及为目标数据分配的目标内存生成的;
拷贝模块,用于将所述目标数据拷贝到预先分配的指定注册内存;
第一写入模块,用于将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,以便第二工作节点从所述目标内存中查找所述目标数据,并根据查找到的目标数据执行分配到所述第二工作节点自身的数据处理任务。
18.一种分布式通信装置,其特征在于,所述装置应用于第二动态通信网络对象,所述装置包括:
目标内存分配模块,用于响应于第一工作节点发送的通知消息,根据所述通知消息携带的目标数据的属性,在第二设备的内存中分配用于存储所述目标数据的目标内存;其中,所述通知消息是由第一工作节点根据执行数据处理任务得到的目标数据生成并发送的;
读取请求发送模块,用于根据所述目标数据的属性以及所述目标内存,生成读取请求,将所述读取请求发送给第一动态通信网络对象,以使所述第一动态通信网络对象根据从所述读取请求中解析得到的目标数据的属性,从第一设备的内存中查找所述目标数据,并将所述目标数据拷贝到预先分配的指定注册内存,以便将所述指定注册内存中存储的目标数据通过写操作写入所述第二设备的目标内存中,使得第二工作节点基于所述目标内存中的目标数据执行分配到自身的数据处理任务。
19.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求10~13或14~16任一项所述的方法。
20.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求10~13或14~16任一项所述的方法。
CN202310561547.8A 2023-05-18 2023-05-18 一种分布式通信***及方法 Active CN116361037B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310561547.8A CN116361037B (zh) 2023-05-18 2023-05-18 一种分布式通信***及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310561547.8A CN116361037B (zh) 2023-05-18 2023-05-18 一种分布式通信***及方法

Publications (2)

Publication Number Publication Date
CN116361037A true CN116361037A (zh) 2023-06-30
CN116361037B CN116361037B (zh) 2023-08-18

Family

ID=86909976

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310561547.8A Active CN116361037B (zh) 2023-05-18 2023-05-18 一种分布式通信***及方法

Country Status (1)

Country Link
CN (1) CN116361037B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105518611A (zh) * 2014-12-27 2016-04-20 华为技术有限公司 一种远程直接数据存取方法、设备和***
CN108108819A (zh) * 2017-12-15 2018-06-01 清华大学 一种跨界大数据分析***和方法
CN110888827A (zh) * 2018-09-10 2020-03-17 华为技术有限公司 数据传输方法、装置、设备及存储介质
CN111078607A (zh) * 2019-12-24 2020-04-28 上海交通大学 面向rdma与非易失性内存的网络访问编程框架部署方法及***
CN112948025A (zh) * 2021-05-13 2021-06-11 阿里云计算有限公司 数据加载方法、装置及存储介质、计算设备、计算***
CN113298222A (zh) * 2020-02-21 2021-08-24 深圳致星科技有限公司 一种基于神经网络的参数更新方法、分布式训练平台***
CN114143140A (zh) * 2021-11-30 2022-03-04 北京三快在线科技有限公司 一种数据传输***、方法、存储介质及电子设备
CN114374609A (zh) * 2021-12-06 2022-04-19 东云睿连(武汉)计算技术有限公司 基于rdma设备的深度学习作业运行方法及***
CN114598631A (zh) * 2022-04-28 2022-06-07 之江实验室 面向神经网络计算的分布式数据路由的建模方法和装置
CN115776434A (zh) * 2021-09-07 2023-03-10 华为技术有限公司 Rdma数据传输***、rdma数据传输方法及网络设备
CN115934623A (zh) * 2023-02-09 2023-04-07 珠海星云智联科技有限公司 一种基于远程直接内存访问的数据处理方法、设备及介质

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105518611A (zh) * 2014-12-27 2016-04-20 华为技术有限公司 一种远程直接数据存取方法、设备和***
WO2016101288A1 (zh) * 2014-12-27 2016-06-30 华为技术有限公司 一种远程直接数据存取方法、设备和***
CN108108819A (zh) * 2017-12-15 2018-06-01 清华大学 一种跨界大数据分析***和方法
CN110888827A (zh) * 2018-09-10 2020-03-17 华为技术有限公司 数据传输方法、装置、设备及存储介质
CN111078607A (zh) * 2019-12-24 2020-04-28 上海交通大学 面向rdma与非易失性内存的网络访问编程框架部署方法及***
CN113298222A (zh) * 2020-02-21 2021-08-24 深圳致星科技有限公司 一种基于神经网络的参数更新方法、分布式训练平台***
CN112948025A (zh) * 2021-05-13 2021-06-11 阿里云计算有限公司 数据加载方法、装置及存储介质、计算设备、计算***
CN115776434A (zh) * 2021-09-07 2023-03-10 华为技术有限公司 Rdma数据传输***、rdma数据传输方法及网络设备
CN114143140A (zh) * 2021-11-30 2022-03-04 北京三快在线科技有限公司 一种数据传输***、方法、存储介质及电子设备
CN114374609A (zh) * 2021-12-06 2022-04-19 东云睿连(武汉)计算技术有限公司 基于rdma设备的深度学习作业运行方法及***
CN114598631A (zh) * 2022-04-28 2022-06-07 之江实验室 面向神经网络计算的分布式数据路由的建模方法和装置
CN115934623A (zh) * 2023-02-09 2023-04-07 珠海星云智联科技有限公司 一种基于远程直接内存访问的数据处理方法、设备及介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
VENKATARATNAM NIMMAGADDA: "Method for Enabling RDMA Transport Peer to Peer Transfer with NVMeoF Ethernet SSDs", 《 2022 IEEE VLSI DEVICE CIRCUIT AND SYSTEM (VLSI DCS)》 *
张昊: "基于RDMA与持久性内存的用户态文件***的研究与实现", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, no. 12 *
陈艳平;冯萍;徐代阳;姚荦;: "直接内存通信技术的研究与实现", 计算机测量与控制, no. 04 *

Also Published As

Publication number Publication date
CN116361037B (zh) 2023-08-18

Similar Documents

Publication Publication Date Title
CN111767143B (zh) 交易数据处理方法、装置、设备及***
US8381230B2 (en) Message passing with queues and channels
TWI694700B (zh) 資料處理方法和裝置、用戶端
CN108628688B (zh) 一种消息处理方法、装置及设备
CN110119304B (zh) 一种中断处理方法、装置及服务器
WO2023231336A1 (zh) 执行交易的方法和区块链节点
EP4038497A1 (en) Customized root processes for groups of applications
CN112463290A (zh) 动态调整计算容器的数量的方法、***、装置和存储介质
US8543722B2 (en) Message passing with queues and channels
CN111597035B (zh) 基于多线程的仿真引擎时间推进方法及***
CN116361037B (zh) 一种分布式通信***及方法
CN111831408A (zh) 异步任务处理方法、装置、电子设备及介质
CN115878333A (zh) 进程组间的一致性判断方法、装置及设备
US9659041B2 (en) Model for capturing audit trail data with reduced probability of loss of critical data
CN112907198B (zh) 业务状态流转维护方法、装置及电子设备
WO2018188959A1 (en) Method and apparatus for managing events in a network that adopts event-driven programming framework
CN108874560B (zh) 进行通信的方法和通信设备
CN113296972A (zh) 一种信息的注册方法、计算设备及存储介质
CN117041980B (zh) 一种网元管理方法、装置、存储介质及电子设备
CN112041817A (zh) 用于管理借助于加速器装置的硬件加速的请求的方法和节点
CN114253713B (zh) 一种基于reactor的异步批处理方法及***
US20220391223A1 (en) Adding expressiveness to plugin extensions using integration with operators
CN117424827A (zh) 一种基于分布式深度学习缓存***的通讯方法和装置
CN118277422A (zh) 物理执行计划更新方法、装置、存储介质及电子设备
CN114741165A (zh) 数据处理平台的处理方法、计算机设备及存储装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant