CN114428692A - 数据发送、数据接收方法、装置、计算机设备和存储介质 - Google Patents

数据发送、数据接收方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN114428692A
CN114428692A CN202210085452.9A CN202210085452A CN114428692A CN 114428692 A CN114428692 A CN 114428692A CN 202210085452 A CN202210085452 A CN 202210085452A CN 114428692 A CN114428692 A CN 114428692A
Authority
CN
China
Prior art keywords
message
target
target data
queue
target message
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.)
Pending
Application number
CN202210085452.9A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202210085452.9A priority Critical patent/CN114428692A/zh
Publication of CN114428692A publication Critical patent/CN114428692A/zh
Pending legal-status Critical Current

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
    • 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/544Buffers; Shared memory; Pipes
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请涉及一种数据发送方法、装置、计算机设备、存储介质和计算机程序产品,以及一种数据接收方法、装置、计算机设备、存储介质和计算机程序产品。其中,数据发送方法包括:通过多个线程并行计算生成第一目标消息并写入消息缓存组件;若任务执行失败,则获取历史任务状态信息,基于历史任务状态信息确定第二目标数据并生成第二目标消息,基于第一目标消息中包括的队列标识将第二目标消息写入消息缓存组件;将消息缓存组件中的第一目标消息以及第二目标消息依次进行发送。本申请实施例可应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景,能够降低容错交互复杂度。

Description

数据发送、数据接收方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据发送方法、装置、计算机设备、存储介质和计算机程序产品,以及一种数据接收方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机技术的发展,出现了数据发送技术,例如,在隐私计算(Privacy-Preserving Computation)中,通过对各分散的数据源的数据进行加密计算并发送,可以在数据不出域的情况下利用多方数据源联合训练机器学习模型、深度学习模型或者提供联合数据分析,以及提供模型推理服务。
隐私计算涉及大量的加密计算,整体任务的执行周期显著长远一般的分布式计算任务,任务计算出错概率高,传统技术中,在任务重启后需要协调其它参与方重新开始某一段的计算流程,整个计算的交互流程复杂高。
发明内容
基于此,有必要针对上述技术问题,提供一种降低交互流程复杂度的数据发送方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,以及一种数据接收方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
一方面,本申请提供了一种数据发送方法。所述方法包括:针对当前任务对应的第一目标数据,生成第一目标消息,并将所述第一目标消息写入消息缓存组件中;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;若当前任务执行失败,则获取已记录的历史任务状态信息;基于所述历史任务状态信息确定第二目标数据,并针对所述第二目标数据生成第二目标消息,基于所述第一目标消息所包含的队列标识将所述第二目标消息写入所述消息缓存组件;将成功写入所述消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
另一方面,本申请还提供了一种数据发送装置。所述装置包括:第一消息生成模块,用于针对当前任务对应的第一目标数据,生成第一目标消息,并将所述第一目标消息写入消息缓存组件中;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;历史状态获取模块,用于若当前任务执行失败,则获取已记录的历史任务状态信息;第二消息生成模块,用于基于所述历史任务状态信息确定第二目标数据,并针对所述第二目标数据生成第二目标消息,基于所述第一目标消息所包含的队列标识将所述第二目标消息写入所述消息缓存组件;消息发送模块,用于将成功写入所述消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
另一方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述数据发送方法所述的步骤。
另一方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述数据发送方法的步骤。
另一方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述数据发送方法的步骤。
上述数据发送方法、装置、计算机设备、存储介质和计算机程序产品,针对当前任务对应的第一目标数据,生成第一目标消息,并将第一目标消息写入消息缓存组件中,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则获取已记录的历史任务状态信息,基于历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件,最后将成功写入消息缓存组件中的目标消息依次进行发送,由于可以对目标数据生成目标消息写入消息队列,通过消息队列进行发送,使得数据发送之前的处理过程和发送过程可以异步进行,实现了将任务失败重启的流程与数据发送的流程相互之间进行解耦,发送端仅需要关注自身的容错逻辑即可,即在任务执行失败时基于历史任务状态信息确定第二目标数据,并基于第一目标消息所包含的队列标识将所述第二目标消息写入所述消息缓存组件以实现任务的重启,从而显著降低了容错交互的复杂度。
另一方面,本申请还提供一种数据接收方法。所述方法包括:针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的所述第一目标消息中提取第一目标数据;所述消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;若所述当前任务执行失败,则获取历史任务状态信息;基于所述历史任务状态信息从所述消息缓存组件中确定第二目标消息;从所述消息缓存组件中读取所述第二目标消息,并从读取的所述第二目标消息中提取第二目标数据,以基于所述第二目标数据进行相应的计算处理。
另一方面,本申请还提供一种数据接收装置。所述装置包括:第一消息读取模块,用于针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的所述第一目标消息中提取第一目标数据;所述消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;历史状态获取模块,用于若所述当前任务执行失败,则获取历史任务状态信息;目标消息确定模块,用于基于所述历史任务状态信息从所述消息缓存组件中确定第二目标消息;第二消息读取模块,用于从所述消息缓存组件中读取所述第二目标消息,并从读取的所述第二目标消息中提取第二目标数据,以基于所述第二目标数据进行相应的计算处理。
另一方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述数据接收方法所述的步骤。
另一方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述数据接收方法的步骤。
另一方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述数据接收方法的步骤。
上述数据接收方法、装置、计算机设备、存储介质和计算机程序产品,针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的第一目标消息中提取第一目标数据,消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则获取历史任务状态信息,基于历史任务状态信息从消息缓存组件中确定第二目标消息,从消息缓存组件中读取第二目标消息,并从读取的第二目标消息中提取第二目标数据,以基于第二目标数据进行相应的计算处理,由于通过消息缓存组件接收携带目标数据的目标消息,进而可以从消息缓存组件中读取目标消息即可提取到目标数据进行后续地计算处理,实现了将数据接收和接收数据的后续处理过程进行解耦,接收端只需要关注自身的容错逻辑即可,即基于历史任务状态信息确定第二目标消息,并从读取的第二目标消息中提取第二目标数据,从而可以重新得到失败任务中所要接收的目标数据,避免了协调发送方重新进行数据发送,从而显著降低了容错交互的复杂度。
附图说明
图1为一个实施例中数据发送方法以及数据接收方法的应用环境图;
图2为一个实施例中数据发送方法的流程示意图;
图3为一个实施例中队列标识的比特位分布示意图;
图4为另一个实施例中生成队列标识的流程示意图;
图5为另一个实施例中队列标识的比特位分布示意图;
图6为另一个实施例中数据发送方法的流程示意图;
图7为一个实施例中数据接收方法的流程示意图;
图8为一个实施例中数据发送过程的示意图;
图9为一个实施例中数据接收过程的示意图;
图10为一个实施例中数据发送装置的结构框图;
图11为另一个实施例中数据接收装置的结构框图;
图12为一个实施例中计算机设备的内部结构图;
图13为另一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的数据发送方法和数据接收方法涉及人工智能的机器学习技术,其中:
人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视角技术、语音处理技术、自然语言处理技术以及机器学习/深度学习、自动驾驶、智慧交通等几大方向。
机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。
随着人工智能技术研究和进步,人工智能技术在多个领域展开研究和应用,例如常见的智能家居、智能穿戴设备、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、无人机、机器人、智能医疗、智能客服、车联网、自动驾驶、智慧交通等,相信随着技术的发展,人工智能技术将在更多的领域得到应用,并发挥越来越重要的价值。
本申请涉及的机器学习技术具体通过如下实施例进行说明:
本申请实施例提供的数据发送方法和数据接收方法,可以应用于接收端和发送端。其中,接收端通过网络与发送端进行通信。接收端和发送端可以是计算机设备,计算机设备具体可以是终端,也可以是服务器。
在一个实施例中,如图1所示,接收端可以是第一服务器102,发送端可以是第二服务器104。其中,第一服务器102例如可以是金融机构对应的服务器,第二服务器106可以是电商机构对应的服务器。第一服务器102与第一终端106通过网络进行通信,第一服务器102可以接收第一终端106发送的第一用户数据进行保存。第二服务器104与第二终端108通过网络进行通信,第二服务器106可以接收第二终端108发送的第二用户数据进行保存。第一用户数据所对应的用户和第二用户所对应的用户可以是相同的用户,也可以是不同的用户。
其中,终端可以但不限于是手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等,便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
本申请实施例提供的数据发送方法中,针对当前任务对应的第一目标数据,发送端生成第一目标消息,并将第一目标消息写入消息缓存组件中,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则可以根据历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件,以实现任务的重启,发送端可以将成功写入消息缓存组件中的目标消息依次进行发送。
本申请实施例提供的数据接收方法中,针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的第一目标消息中提取第一目标数据,消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则重启任务,由于消息缓存组件中对接收的消息进行了缓存,任务重启后,可以直接从消息缓存组件中继续读取消息。
需要说明的是,本申请实施例中,发送端和接收端是一个逻辑概念,指的是发送状态和接受状态,接收端也可以发送数据,当接收端发送数据时,接收端可以作为发送端,同样地,发送端也可以接收数据,当发送端接收数据时,发送端也可以作为接收端。
还需要说明的是,本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。
在一个实施例中,如图2所示,提供了一种数据发送方法,以该方法应用于图1中的发送端为例进行说明,包括以下步骤:
步骤202,针对当前任务对应的第一目标数据,生成第一目标消息,并将第一目标消息写入消息缓存组件中;第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识。
其中,当前任务指的是当前正在执行的任务。本申请中,当需要进行数据发送时,先对需要发送的目标数据生成目标消息,并写入消息缓存组件进行缓存,再通过消息缓存组件进行发送,因此,任务可以是用于对需要发送的目标数据生成目标消息并写入消息缓存组件。第一目标数据可以是当前任务所需要读取的目标数据。第一目标消息是根据第一目标数据生成的,与第一目标数据对应,包括用于在消息缓存组件中标识第一目标数据的队列标识。队列标识可以在消息缓存组件中标识一条消息,进而可以标识该消息对应的目标数据。队列标识可以按照预设的方式进行生成,例如,队列标识可以是第一目标数据在数据库中的编号。消息缓存组件指的是可以缓存消息的组件,消息缓存组件可以是消息队列(Message Queue),例如,可以是Pulsar、Kafka、ZeroMQ、RabbitMQ、RocketMQ等中任意一种。
具体地,在执行当前任务的过程中,针对当前任务对应的第一目标数据,发送端可以从数据库中读取得到第一目标数据,根据第一目标数据生成第一消息元素,并获取与第一目标数据对应的队列标识,作为第二消息元素,进而根据第一消息元素和第二消息元素生成第一目标消息,进而将第一目标消息写入消息缓存组件中。可以理解的是,第一目标数据可以是一个或者多个。多个指的是至少两个。对于每一个第一目标数据,发送端均生成第一目标消息,并将各个第一目标消息依次写入消息缓存组件中。
在一个实施例中,发送端可以包括多个处于不同计算机设备的执行器(executor),各个执行器可以分别启动第一线程,从而发送端可以同时启动多个第一线程,将需要发送的目标数据分配到不同的任务中,各个第一线程并行执行不同的任务,对各个任务所需要发送的目标数据生成第一目标消息并写入消息缓存组件。例如在联邦学习中,可以将所有训练数据分为多个训练批次进行训练,则每一个训练批次的目标数据对应分配一个任务。
在一个实施例中,消息缓存组件中可以包括多个消息通道,不同的消息通道属于不同的主题(topic),各个执行器对应不同的topic,各个第一线程可以将各自生成的第一目标消息发送至与各自的执行器对应的topic所对应的消息通道中。举例说明,假设发送端包括三个执行器,执行器1启动线程1,执行器2启动线程2,执行器3启动线程3,其中执行器1对应的是topic1,执行器2对应的是topic2,执行器3对应的是topic3,则线程1可以将生成的第一目标消息写入topic1对应的消息通道,则线程2可以将生成的第一目标消息写入topic2对应的消息通道,则线程3可以将生成的第一目标消息写入topic3对应的消息通道。
步骤204,若当前任务执行失败,则获取已记录的历史任务状态信息。
其中,历史任务状态信息指的是历史的任务状态。
在一个实施例中,历史任务状态信息可以用于表征当前任务中在任务未失败之前的历史时刻的任务状态。发送端在执行历史任务的过程中可以每间隔预设时间记录一次任务状态,得到历史任务状态信息,进而在执行当前任务失败时,发送端可以基于历史任务状态信息重新启动任务。历史任务状态信息可以包括历史时刻所对应的目标数据的队列标识。
在一个实施例中,历史任务状态信息可以用于表征已执行成功的历史任务的状态,这里的历史任务指的是当前任务之前已执行的任务。考虑到大多数情况下,当前任务执行失败时,执行当前任务的线程通常无法再恢复使用,需要重新启动新的线程来重启任务,而启动的新线程与原来的线程可能位于不同的执行器或者不同的计算机设备,无法获取原来线程的任务执行情况,新线程需要从当前任务的第一个数据开始重新执行任务,那么发送端在执行历史任务的过程中,对于成功执行的历史任务,可记录这些历史任务的状态,得到历史任务状态信息,进而在执行当前任务失败时,发送端可以基于历史任务状态信息重新启动任务。在一个实施例中,历史任务状态信息可以包括历史任务所对应的目标数据的队列标识。在另一个实施例中,当发送端和接收端用于联邦学习场景中的模型训练时,历史任务状态信息还可以包括历史任务对应的训练状态信息,训练状态信息可以是训练过程中的中间模型,训练时期(epoch),训练批次等等。
在一个实施例中,若当前任务执行失败,发送端可以获取最新记录的历史任务状态信息,从而大大减少任务的重复执行。例如,假设已记录的历史任务状态信息,按照记录时间的先后顺序依次为任务1对应的历史任务状态信息,任务2对应的历史任务状态信息,任务3对应的历史任务状态信息,则可以获取任务3对应的历史任务状态信息。
在一个实施例中,当发送端检测到生成第一目标消息失败时,可以判定当前任务执行失败。在其他实施例中,当发送端检测到将第一目标消息写入消息缓存组件失败时,可以判定当前任务执行失败。
在一个实施例中,当发送端包括多个执行器并行执行时,当其中任意一个执行器执行失败时,该执行器可以读取该执行器自身的历史任务状态信息。
步骤206,基于历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件。
其中,第二目标数据指的重启任务后所需要读取的目标数据。第二目标数据可以是一个或者多个。多个指的是至少两个。第二目标数据中可以包括与第一目标数据相同的目标数据。第二目标消息是根据第二目标数据生成的,与第二目标数据对应,包括用于在消息缓存组件中标识第二目标数据的队列标识。可以理解的是,第二目标消息中的队列标识还可以在消息缓存组件中标识第二目标消息。
具体地,发送端在获取到已记录的历史任务状态信息之后,可以基于历史任务状态信息确定重启的任务所要读取的目标数据,得到第二目标数据,并在读取到第二目标数据后,针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识,发送端可以将第二目标消息写入消息缓存组件。可以理解的是,第二目标消息写入的结果可以是写入成功或者写入失败。
在一个实施例中,发送端在针对目标数据生成目标消息后,可以将目标数据与目标消息中的队列标识建立关联关系,并且每执行成功一个任务,记录该任务的最后一条目标消息的队列标识得到该历史任务的历史状态信息,进而可以获取上一个执行成功的历史任务的最后一条目标消息的队列标识,基于该队列标识确定存在关联关系的目标数据,进而可以从数据库中读取该目标数据的后序数据作为第二目标数据,例如,将以该目标数据的下一条目标数据开始的预设数量的目标数据确定为第二目标数据。
在一个实施例中,发送端将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入消息缓存组件。
在一个实施例中,发送端可以按照与生成第一目标消息相同的方式,针对第二目标数据生成第二目标消息,以方便后续消息去重的过程中进行消息比对。
需要说明的是,在其他一些实施例中,第一目标消息和第二目标消息也可以是按照不同的方式生成的,此时,对于同一目标数据,在第一目标消息和第二目标消息中的队列标识是不相同的,那么在进行比对时,可以按照生成方式的差异将队列标识进行对齐,再进行比对。举例说明,假设在第一目标消息中某个目标数据的队列标识为该目标数据的编号x10,而在第二目标消息中某个目标数据的队列标识为该目标数据的编号,那么可以先对第二目标消息中的队列标识x10,以和第一目标消息中的队列标识进行对齐。
步骤208,将成功写入消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
可以理解的是,第一目标消息和第二目标消息均为目标消息,因此成功写入消息缓存组件中的目标消息可以包括第一目标消息,当然也可以包括第二目标消息。
具体地,发送端可以将成功写入消息缓存组件中的目标消息依次发送至接收端。
在一个实施例中,发送端可以是在接收到接收端的数据获取请求后,响应该数据获取请求,对消息缓存组件中的目标消息依次进行发送。
上述数据发送方法中,针对当前任务对应的第一目标数据,生成第一目标消息,并将第一目标消息写入消息缓存组件中,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则获取已记录的历史任务状态信息,基于历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件,最后将成功写入消息缓存组件中的目标消息依次进行发送,由于可以对目标数据生成目标消息写入消息队列,通过消息队列进行发送,使得数据发送之前的处理过程和发送过程可以异步进行,实现了将任务失败重启的流程与数据发送的流程相互之间进行解耦,发送端仅需要关注自身的容错逻辑即可,即在任务执行失败时基于历史任务状态信息确定第二目标数据,并基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件以实现任务的重启,从而显著降低了容错交互的复杂度。
在一个实施例中,第一目标数据为当前任务对应的目标数据序列中的数据;生成第一目标消息,并将第一目标消息写入消息缓存组件中,包括:根据第一目标数据生成第一消息元素;获取根据第一目标数据在目标数据序列中的排序生成的队列标识,将第一队列标识作为第二消息元素;根据第一消息元素和第二消息元素,得到第一目标数据对应的第一目标消息。
其中,第一目标数据为当前任务对应的目标数据序列中的数据,即当前任务所对应的目标数据是按照顺序进行排列的,排列的顺序可以根据这些目标数据在数据库中的编号进行确定,例如,可以是按照目标数据在数据库中的编号从小到大进行排序。
具体地,发送端可以对第一目标数据进行计算得到第一消息元素,这里的计算泛指算法进行的计算,例如在联邦学习中,该计算可以是正常的模型训练的计算,也包括通过同态加密或差分隐私的加密技术生成的中间结果。第一消息元素中由于携带了第一目标数据,因此为第一目标消息的具体内容。发送端进一步可以获取根据第一目标数据在目标数据序列中的排序生成的队列标识,将队列标识作为第二消息元素,由于队列标识是根据第一目标数据在目标数据序列中的排序得到的,可以反映第一目标数在目标数据序列中的排序信息,根据该排序信息可以确定第一目标数据在目标数据序列中的排序先后。发送端进一步可以根据第一消息元素和第二消息元素,得到第一目标数据对应的第一目标消息。
在一个实施例中,本实施例中的队列标识可以是预先生成的,发送端在生成目标消息的过程中可以直接获取到预先生成的队列标识作为第二消息元素。在其他实施例中,队列标识也可以是在生成目标消息的过程中生成的,即发送端可以在生成目标消息的过程中,根据第一目标数据在目标数据序列中的排序生成第一队列标识。
在一个实施例中,第一目标消息可以是(key,message,sequenceId)这样的三元组,该三元组key,message,sequenceId均为消息元素,其中,key为消息键值,可包括待传输的变量名,用以区分该消息的变量类型;message为消息具体内容,用于表示要发送的目标数据,可附带额外属性值,如消息长度等,用来作消息大小与完整性验证等;sequenceId为队列标识,则用来标识该消息及对应的目标数据。
上述实施例中,生成的第一目标消息中携带了第一目标数据以及队列标识,并且队列标识是根据第一目标数在在目标数据序列中的排序生成的,可以反映第一目标数据的排序信息,可以根据排序信息可以方便快捷地实现消息比对,具体可参考后文实施例中的描述。
在一个实施例中,第一目标数据用于进行模型训练;队列标识的生成步骤包括:获取当前训练期数信息;当前训练期数信息用于表征当前训练过程所属的训练期数;基于当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;第一位移比特数根据训练总期数确定;基于第一目标数据在目标数据序列中的排序号,得到第二队列标识分量;统计第一队列标识分量和第二队列标识分量,得到队列标识。
其中,当前训练期数信息用于表征当前训练过程所属的训练期数,例如,当前训练过程所属的训练期数为第2期,则当前训练期数信息可以是2。可以理解的是,本实施例中,第一目标数据用于进行模型训练,即发送方和接收方作为两个参与方进行联邦学习,以训练得到机器学习模型。一个训练期数(Epoch)是将所有训练样本(即完整的数据集)训练一次的过程。在机器学习的训练过程中,传递完整的数据集一次是不够的,因此需要将完整的数据集在同样的模型中传递多次,即进行多个epoch训练。第一位移比特数根据训练总期数确定,即按照第一位移比特数进行位移后,为训练期数分配的比特位能够表达出训练期数的最大值。左位移运算,是将某个数a转为二进制后左移b个比特位(即在后面添加b个0)。例如100的二进制表示为1100100,100左移2位后(后面加2个零)为110010000=400,可以看出,左位移运算的值实际上就是a乘以2的b次方,因为在二进制数后面添加一个0就相当该数乘以2,2个零即2的2次方等于4。
具体地,发送方在获取到当前训练期数信息后,可以按照第一位移比特数将当前训练期数信息所表征的训练期数值的二进制序列向左进行位移运算,得到第一队列标识分量,发送方进一步可以将第一目标数据在目标数据序列中的排序号,作为第二队列标识分量。发送方可以将第一队列标识分量和第二队列标识分量进行相加,得到队列标识。
举例说明,假设队列标识的二进制序列号为64个比特,参考图3,可以将该二进制序列的前16位(高位区)作为第一队列标识分量的比特位,后47位(低位区)作为第二队列标识分量的比特位,最高位保留为符号位,高位区可以用来表示当前epoch,而低位区则表示该目标数据的排序号(index),则队列标识可以通过epoch*2^16+index计算得到,epoch*2^16即将epoch左移16个比特。
上述实施例中,首先基于当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量,然后基于第一目标数据在目标数据序列中的排序号,得到第二队列标识分量,可以确保在多个epoch的训练中得到的队列标识呈单调递增。
在一个实施例中,如图4所示,队列标识的生成步骤包括:
步骤402,获取当前训练期数信息;当前训练期数信息用于表征当前训练过程所属的训练期数。
步骤404,基于当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;第一位移比特数根据训练总期数确定。
步骤406,基于第一目标数据在目标数据序列中的排序号,得到第二队列标识分量。
关于步骤402-步骤406的描述可参考上文实施例中的描述,本申请在此不赘述。
步骤408,获取当前训练批次信息;当前训练批次信息用于表征当前训练过程所属的训练批次。
可以理解的是,当一个Epoch的样本(也就是所有的训练样本)数量过于庞大(对于计算机而言)时,就需要把它分成多个批次,也就是就是分成多个Batch来进行训练。因此,本实施例中,在生成队列标识的过程中,在结合当前训练期数(epoch)信息的基础上还可以结合当前训练批次(batch)信息。其中,当前训练批次信息用于表征当前训练过程所属的训练批次(batch),例如,当前训练过程所属的训练批次为第2批,则当前训练批次信息可以是2。
步骤410,基于当前训练批次信息以及预先设定的第二位移比特数进行左位移运算,得到第三队列标识分量;第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定。
第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定,即按照第二位移比特数进行位移后,为训练批次分配的比特位能够表达出训练批次的最大值。
具体地,发送方可以按照第二位移比特数将当前训练批次信息所表征的训练批次数值的二进制序列向左进行位移运算,得到第三队列标识分量。
步骤412,统计第一队列标识分量、第二队列标识分量和第三队列标识分量,得到队列标识。
具体地,发送方可以将第一队列标识分量、第二队列标识分量和第三队列标识分量进行相加,得到队列标识。
举例说明,假设队列标识的二进制序列号为64个比特,参考图5,可以将该二进制序列的前10位(即高位区)作为第一队列标识分量的比特位,中间16位(即中位区)作为第二队列标识分量的比特位,后37位(即低位区)作为第三队列标识分量的比特位,最高位保留为符号位,高位区可以用来表示当前epoch,中位区可以用来表示当前batch,而低位区则表示该目标数据的排序号(index),则队列标识可以通过epoch*2^26+batch*2^16+index计算得到。
上述实施例中,结合训练期数、训练批次以及排序号得到队列标识,进而可以确保在多个epoch的训练中,每个epoch下的各个batch中得到的队列标识呈单调递增。
在一个实施例中,上述数据发送方法还包括:根据消息缓存组件中成功写入的第一目标消息的队列标识,得到参考队列标识;基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件,包括:将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入消息缓存组件。
其中,参考队列标识指的是在任务重启后,用作参考的队列标识。成功写入的第一目标消息的队列标识,指的是已成功写入消息缓存组件中的队列标识。
具体地,若发送端检测到执行当前任务失败,则可以根据消息缓存组件中成功写入的第一目标消息的队列标识,得到参考队列标识,进而可以将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果确定第二目标消息中哪些消息是重复的消息,进而可以过滤掉重复的消息,避免消息的重复发送。
在一个实施例中,发送端可以将消息缓存组件中所有成功写入的第一目标消息的队列标识,都作为参考队列标识。
在一个实施例中,当消息缓存组件中各个目标消息按照排序单调递增或者单调递减时,发送端可以将消息缓存组件中最后一条目标消息作为参考队列标识。这里的最后一条目标消息指的是排序在最后,也就是最后写入的目标消息。例如,假设消息缓存组件中按照时间先后顺序依次写入消息X1,消息X2,消息X3,其中,消息X3是最后写入的消息,则可以将消息X3的队列标识作为参考队列标识。
在一个实施例中,第二目标消息和第一目标消息是按照相同的方式生成的,那么对于同一个目标数据,在第二目标消息以及第一目标消息中的队列标识是相同的,基于此,若参考队列标识为消息缓存组件中的所有消息的队列标识,则发送端将第二目标消息所包括的队列标识和参考队列标识进行比对可以是:比较第二目标消息所包括的队列标识和参考队列标识是否相同,得到的比对结果为第二目标消息所包括的队列标识和参考队列标识不相同,或者第二目标消息所包括的队列标识和参考队列标识相同,当比对结果为第二目标消息所包括的队列标识和参考队列标识不相同时,表示该第二目标消息所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异,可以将该第二目标消息写入消息缓存组件中。而当比对结果为第二目标消息所包括的队列标识和参考队列标识相同时,表示该第二目标消息所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据是相同的数据,对于这样的第二目标消息,可以对其进行丢弃,从而可以避免消息重复发送。
在一个实施例中,第二目标消息和第一目标消息是按照相同的方式生成的,那么对于同一个目标数据,在第二目标消息以及第一目标消息中的队列标识是相同的,若参考队列标识为消息缓存组件中的最后一条消息的队列标识,且消息队列中各消息的队列标识按照写入的先后顺序单调递增,则将第二目标消息所包括的队列标识和参考队列标识进行比对可以是比第二目标消息所包括的较队列标识和参考队列标识之间的大小关系,得到的比对结果可以是队列标识小于或者等于或者大于参考队列标识,当比对结果为队列标识小于或者等于参考队列标识时,可以将该第二目标消息进行丢弃,而当比对结果为队列标识大于参考队列标识时,可以将该目标消息写入消息缓存组件中,从而可以避免消息重复发送。可以理解的是,在其他实施例中,消息队列中各消息的队列标识也可以是按照写入的先后顺序单调递减的,那么当比对结果为队列标识小于参考队列标识时,可以将该第二目标消息写入消息缓存组件中,而当比对结果为队列标识大于或者等于参考队列标识时,可以将该第二目标消息进行丢弃。
在一个实施例中,如图6所示,提供了一种数据发送方法,以该方法应用于图1中的发送端为例进行说明,包括以下步骤:
步骤602,针对当前任务对应的第一目标数据,生成第一目标消息,并将第一目标消息写入消息缓存组件中;第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识。
在一个实施例中,发送方可以结合训练期数信息、训练批次信息以及第一目标数据在其所在目标数据序列中的排序号生成队列标识,并保证队列标识呈单调递增,即使得消息缓存组件中,排序在后的第一目标消息所包括的队列标识大于排序在前的第一目标消息所包括的队列标识。
步骤604,若当前任务执行失败,则将消息缓存组件中成功写入的最后一条第一目标消息的队列标识,作为参考队列标识。
具体地,本实施例中,消息缓存组件中,排序在后的第一目标消息所包括的队列标识大于排序在前的第一目标消息所包括的队列标识,且第一目标消息和第二目标消息的生成方式相同。因此,消息缓存组件中最后一条目标消息的队列标识是最大的,将最后一条第一目标消息的队列标识作为参考队列标识,可以基于某个目标消息所对应的队列标识与参考队列标识之间的大小关系来确定该消息缓存组件中是否存在与之相同的目标消息,避免对所有的目标消息进行一一比对,提高了数据发送的效率。
步骤606,获取已记录的历史任务状态信息。
步骤608,基于历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息。
其中,关于步骤602可以参考上文实施例中步骤202的描述,关于步骤606-步骤608可参考上文实施例中步骤204-步骤206的描述,本申请在此不赘述。
步骤610,将第二目标消息所包括的队列标识和参考队列标识进行比对。
具体地,发送端可以将第二目标消息所包括的队列标识和参考队列标识进行大小比较。
步骤612,当第二目标消息所包括的队列标识小于或者等于参考队列标识时,将第二目标消息进行丢弃。
具体地,当第二目标消息所包括的队列标识小于或者等于参考队列标识时,说明消息队列中存在与该第二目标消息相同的目标消息,为避免消息重复发送,发送端可以将该第二目标消息进行丢弃。
步骤614,当第二目标消息所包括的队列标识大于参考队列标识时,将第二目标消息确定为存在差异的第二目标消息并写入消息缓存组件。
具体地,当第二目标消息所包括的队列标识小于或者等于参考队列标识时,说明消息队列中不存在与该第二目标消息相同的目标消息,发送端可以将该第二目标消息写入消息缓存组件。
步骤616,将成功写入消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
关于步骤616的描述可参考上文实施例中步骤208的描述,本申请在此不赘述。
上述实施例中,通过将消息缓存组件中最后一条目标消息的队列标识,作为参考队列标识,由于消息缓存组件中排序在后的第一目标消息所包括的队列标识大于排序在前的第一目标消息所包括的队列标识,因此发送端在进行比对时,可以通过比较所生成的第二目标消息中的队列标识与参考队列标识之间的大小关系实现消息去重,避免了消息逐一比对,提高了数据发送效率。
在一个实施例中,将第二目标消息所包括的队列标识和参考队列标识进行比对,包括:若上一个第二目标消息所包括的队列标识小于参考队列标识,则将当前的第二目标消息所包括的队列标识和参考队列标识进行比对;上述方法还包括:若上一个第二目标消息所包括的队列标识等于参考队列标识,则将当前的第二目标消息确定为存在差异的第二目标消息并写入消息缓存组件;将当前的第二目标消息对应的后续第二目标消息确定为存在差异的第二目标消息并写入消息缓存组件。
其中,当前的第二目标消息指的是当前生成的第二目标消息。上一个第二目标消息指的是与当前的第二目标消息之间的间隔时间最短的第二目标消息。举例说明,假设发送端依次针对第二目标数据X1生成第二目标消息Y1,针对第二目标数据X2生成第二目标消息Y2,针对第二目标数据X3生成第二目标消息Y3,那么在生成第二目标消息Y3的时候,Y3为当前的第二目标消息,而Y2为上一个第二目标消息。当前的第二目标消息对应的后续第二目标消息指的是在当前的第二目标消息之后生成的第二目标消息,举例说明,假设上述例子中,发送端在生成第二目标消息Y3之后,接着生成针对第二目标数据X4生成第二目标消息Y4,则Y4为Y3的后续第二目标消息。
本实施例中,由于消息缓存组件中,排序在后的第一目标消息所包括的队列标识大于排序在前的第一目标消息所包括的队列标识,那么在生成第二目标消息时,当前的第二目标消息所包含的队列标识必然是大于上一个第二目标消息,因此,若上一个第二目标消息所包括的队列标识小于参考队列标识,表示在当前的第二目标消息之前生成的第二目标消息均与消息缓存队列中成功写入的目标消息相同,即均为重复的目标消息,那么发送端可以继续将当前的第二目标消息所包括的队列标识和参考队列标识进行比对,直至比对到某一个第二目标消息所包含的队列标识等于参考队列标识,说明该第二目标消息是最后一个重复的目标消息,此后的目标消息都不是重复的目标消息。
基于此,若上一个第二目标消息所包括的队列标识等于参考队列标识,则发送端可以直接将当前的第二目标消息确定为存在差异的第二目标消息并写入消息缓存组件,从而避免了不必要的比对影响数据发送效率,并且对于当前的第二目标消息对应的后续第二目标消息,也可以直接确定为存在差异的第二目标消息并写入消息缓存组件。
上述实施例中,若上一个第二目标消息所包括的队列标识等于参考队列标识,则可以直接将当前的第二目标消息及后续第二目标消息直接写入消息缓存组件中,避免了不必要的比对,提高了数据发送效率。
在一个实施例中,获取已记录的历史任务状态信息包括:获取已记录的上一个历史任务的历史训练期数信息和历史训练批次信息;基于历史任务状态信息确定第二目标数据,包括:基于历史训练期数信息和历史训练批次信息确定当前任务对应的当前训练期数信息和当前训练批次信息,将与当前训练期数信息和当前训练批次信息对应的目标数据确定为第二目标数据。
其中,上一个历史任务指的是在所有的历史任务中与当前任务之间的间隔时间最短的历史任务。例如,假设发送端依次执行了任务1、任务2和任务3,其中任务3为当前任务,则该当前任务对应的上一个历史任务为任务2。需要说明的是,当发送端包括多个执行器时,由于各个不同的执行器对应的不同的消息通道,因此,对于当前任务,其对应的历史任务指的是由执行当前任务的执行器所执行的历史任务。
具体地,本实施例中,发送端每执行完成一个任务,可以记录该任务的训练期数信息和训练批次信息,从而在当前任务执行失败时,发送端可以获取已记录的上一个历史任务的训练期数信息和训练批次信息,得到历史训练期数信息和历史训练批次信息,从而可以根据历史训练期数信息和历史训练批次信息所对应的目标数据的下一个训练批次,确定当前任务对应的当前训练期数信息和当前训练批次信息,将与当前训练期数信息和当前训练批次信息对应的目标数据确定为第二目标数据。
举例说明,假设当前任务对应的上一个历史任务处于第三个训练期数下的第三个训练批次,并且该训练批次并不是该训练期数的最后一个训练批次,则可以确定下一个训练批次为第三个训练期数下的第四个训练批次,从而可以获取到与第三个训练期数下的第四个训练批次对应的目标数据,得到第二目标数据。可以理解的是,假设当前任务对应的上一个历史任务处于第三个训练期数下的第三个训练批次,并且该训练批次为该训练期数的最后一个训练批次,则可以确定下一个训练批次为第四个训练期数下的第一个训练批次,从而可以获取到与第四个训练期数下的第一个训练批次对应的目标数据,得到第二目标数据。
上述实施例中,通过获取已记录的上一个历史任务的历史训练期数信息和历史训练批次信息来确定第二目标数据,可以快速地获取到第二目标数据。
在一个实施例中,获取已记录的历史任务状态信息,包括:获取已记录的上一个历史任务的最后一个目标数据的队列标识;基于历史任务状态信息确定第二目标数据,包括:基于最后一个目标数据的队列标识确定与上一个历史任务的最后一个目标数据对应的下一个目标数据,将以下一个目标数据为起始数据的预设数量的目标数据确定为第二目标数据;预设数量与当前任务对应的第一目标数据的总数量匹配。
其中,上一个任务的最后一个目标数据指的是上一个任务处理的最后一个目标数据,即上一个任务中,写入消息缓存组件中的最后一条目标消息所对应的目标数据。
具体地,本实施例中,发送端每执行完成一个任务,可以记录该任务的最后一个目标数据,从而在当前任务执行失败时,发送端可以获取已记录的上一个历史任务的最后一个目标数据的队列标识,基于最后一个目标数据的队列标识可以确定上一个历史任务的最后一个目标数据,进而可以确定与上一个历史任务的最后一个目标数据对应的下一个目标数据,该目标数据即为失败的当前任务中的第一个目标数据,因此,发送端可以将以下一个目标数据为起始数据的预设数量的目标数据确定为第二目标数据。其中,预设数量与当前任务对应的第一目标数据的总数量匹配,可以是一个训练批次的数量总量。由于获取的第二目标数据是以下一个目标数据为起始数据的预设数量的目标数据,因此,第二目标数据可以是数据库中,以下一个目标数据为起始数据,并且在数据库中的排序连续的多个目标数据。
举例说明,假设队列标识是目标数据在数据库中的编号,上一个历史任务的最后一个目标数据的队列标识为100,一个训练批次的数据为100,则第二目标数据可以是数据库中编号为101-200的目标数据。
上述实施例中,通过确定上一个历史任务的最后一个目标数据的下一个目标数据,基于该目标数据重新可以重新获取失败的任务中所要读取的数据,从而可以实现任务重启,提高了数据发送效率。
在一个实施例中,上述方法还包括:若消息缓存组件具备消息去重功能,则将第二目标消息写入消息缓存组件中,消息缓存组件用于将第二目标消息所包含的队列标识与成功写入的各个目标消息对应的队列标识进行比对,以过滤与成功写入的各个目标消息相同的第二目标消息;若消息缓存组件不具备消息去重功能,则进入将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入消息缓存组件的步骤。
其中,消息去重功能指的是可以自动过滤重复消息的功能。
具体地,本实施例中,若消息缓存组件具备消息去重功能,则发送端在生成了第二目标消息后,可以直接将第二目标消息写入消息缓存组件,消息缓存组件将该第二目标消息所包含的队列标识与消息缓存组件中成功写入的各个目标消息对应的队列标识进行比对,若是比对结果指示该第二目标消息与成功写入的目标消息的队列标识相同,则消息缓存组件可以将该第二目标消息进行丢弃,以过滤掉重复写入的消息。
在一个实施例中,当第一目标消息和第二目标消息是通过相同的方式生成的,那么对于同一个目标数据,其在第一目标消息和第二目标消息中的队列标识是相同的,消息缓存组件可以直接将当前写入的第二目标消息的队列标识和成功写入的各个目标消息进行比对,若存在相同的队列标识,则将该第二目标消息进行丢弃。可以理解的是,在其他实施例中,第一目标消息和第二目标消息是通过相同的方式生成可以通过不同的方式生成,那么消息组件在进行比对时,可以首先基于生成方式的差异将当前写入的第二目标消息的队列标识与消息缓存组件中的队列标识进行对齐,将对齐后的队列标识再进行比对。这里的对齐指的是,使得同一个目标数据的队列标识相同。
在一个实施例中,当消息缓存组件中包括多个消息通道时,由于不同的消息通道对应不同的执行器,那么消息缓存组件在进行比对时,可以仅将各个执行器写入的第二目标消息与各自的消息通道中的消息进行比对。
进一步,若消息缓存组件不具备消息去重功能,则发送端可以进入将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果,确定所对应的目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入消息缓存组件的步骤。该步骤具体可以参考上文实施例中的描述。
上述实施例中,若消息缓存组件具备消息去重功能,则发送端可以不需要执行比对步骤,直接将第二目标消息写入消息缓存组件,提高了数据发送效率。
在一个实施例中,如图7所示,提供了一种数据接收方法,以该方法应用于图1中的接收端为例进行说明,包括以下步骤:
步骤702,针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的第一目标消息中提取第一目标数据;消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息;第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识。
其中,当前任务指的是当前正在执行的任务。本申请中,可以通过消息缓存组件接收携带目标数据的目标消息,从而接收端可以从消息缓存组件中读取目标消息并提取目标数据以进行相应地计算处理,因此,任务至少可以包括从消息缓存组件中读取目标消息并提取目标数据,当然任务也可以包括对目标数据进行计算处理。第一目标消息可以是当前任务所需要读取的目标消息。第一目标消息是根据第一目标数据生成的,与第一目标数据对应,包括用于在消息缓存组件中标识第一目标数据的队列标识。队列标识可以在消息缓存组件中标识一条消息,进而可以标识该消息对应的目标数据。队列标识可以按照预设的方式进行生成,例如,队列标识可以是第一目标数据在数据库中的编号。消息缓存组件指的是可以缓存消息的组件,消息缓存组件可以是消息队列(Message Queue),例如,可以是Pulsar、Kafka、ZeroMQ、RabbitMQ、RocketMQ等中任意一种。
具体地,在执行当前任务的过程中,针对当前任务对应的第一目标消息。接收端读取第一目标消息,并从读取的第一目标消息中提取第一目标数据。可以理解的是,接收端从第一目标数据中提取到的第一目标数据可以是发送端计算处理后的处理,计算处理可以是加密计算,例如,在联邦学习中,提取到的第一目标数据可以是同态加密后的数据。
在一个实施例中,接收到在提取到第一目标数据后,进行相应的计算处理,这里的计算可以包括模型训练过程中的计算,也包括通过同态加密或差分隐私的加密技术生成中间结果、或采用同态解密等等。
在一个实施例中,消息缓存组件可以是接收端所在计算机设备上的组件,即接收端先通过消息缓存组件接收携带目标数据的目标消息,通过该消息缓存组件对目标消息进行缓存,进而接收端可以从消息缓存组件中读取目标消息。在其他实施例中,消息缓存组件也可以是其他计算机设备上的组件,例如,消息缓存组件可以是发送端和接收端之间的第三方服务器上的组件,即,接收端可以在生成第一目标消息后,将第一目标消息写入第三方服务器上的消息缓存组件,进而接收端可以从第三方服务器上的消息缓存组件中读取目标消息。可以理解的是,在另外的实施例中,消息缓存组件还可以是设置在发送端的组件,接收端可以从发送端的消息缓存组件中读取目标消息。
步骤704,若当前任务执行失败,则获取历史任务状态信息。
其中,历史任务状态信息指的是历史的任务状态。
在一个实施例中,历史任务状态信息可以用于表征当前任务中在任务未失败之前的历史时刻的任务状态。接收端在执行历史任务的过程中可以每间隔预设时间记录一次任务状态,得到历史任务状态信息,进而在执行当前任务失败时,接收端可以基于历史任务状态信息重新启动任务。历史任务状态信息可以包括历史时刻所对应的目标数据的队列标识。
在一个实施例中,历史任务状态信息可以用于表征已执行成功的历史任务的状态,这里的历史任务指的是当前任务之前已执行的任务。考虑到大多数情况下,当前任务执行失败时,执行当前任务的线程通常无法再恢复使用,需要重新启动新的线程来重启任务,而启动的新线程与原来的线程可能位于不同的执行器或者不同的计算机设备,无法获取原来线程的任务执行情况,新线程需要从当前任务的第一个数据开始重新执行任务,那么接收端在执行历史任务的过程中,对于成功执行的历史任务,可记录这些历史任务的状态,得到历史任务状态信息,进而在执行当前任务失败时,接收端可以基于历史任务状态信息重新启动任务。在一个实施例中,历史任务状态信息可以包括历史任务所对应的目标数据的队列标识。在另一个实施例中,当发送端和接收端用于联邦学习场景中的模型训练时,历史任务状态信息还可以包括历史任务对应的训练状态信息,训练状态信息可以是训练过程中的中间模型,训练时期(epoch),训练批次等等。
在一个实施例中,当接收端检测到读取第一目标消息失败时,可以判定当前任务执行失败。在其他实施例中,当前任务还包括对提取到的第一目标数据进行计算,那么当接收端检测到在对第一目标数据计算失败时,可以判定当前任务执行失败。
在一个实施例中,接收端在检测到当前任务执行失败后,可以读取最新记录的历史任务状态信息,从而大大减少任务的重复执行。例如,假设已记录的历史任务状态信息,按照记录时间的先后顺序依次为任务1对应的历史任务状态信息,任务2对应的历史任务状态信息,任务3对应的历史任务状态信息,则可以获取任务3对应的历史任务状态信息。
步骤706,基于历史任务状态信息从消息缓存组件中确定第二目标消息。
其中,第二目标消息指的是重启的任务所需要读取的目标消息。第二目标消息可以是一个或者多个。多个指的是至少两个。第二目标消息中可以包括与第一目标消息相同的目标消息。第二目标消息是根据第二目标数据生成的,与第二目标数据对应,包括用于在消息缓存组件中标识第二目标数据的队列标识。可以理解的是,第二目标消息中的队列标识还可以在消息缓存组件中标识第二目标消息。
具体地,接收端在获取到已记录的历史任务状态信息之后,可以基于历史任务状态信息确定任务重启后所要读取的目标消息,得到第二目标消息。
在一个实施例中,接收端在提取到目标数据后,可以将目标数据与目标消息中的队列标识建立关联关系,并且每执行成功一个任务,记录该任务提取到的最后一条目标数所关联的队列标识得到该历史任务的历史状态信息,进而接收端可以获取上一个执行成功的历史任务提取到的最后一条目标数据的队列标识,基于该队列标识确定存在关联关系的目标消息,进而可以从消息队列中读取该目标消息的后序数据作为第二目标消息,例如,将该目标消息的下一条目标消息开始的预设数量的目标消息确定为第二目标消息。
步骤708,从消息缓存组件中读取第二目标消息,并从读取的第二目标消息中提取第二目标数据,以基于第二目标数据进行相应的计算处理。
具体地,接收端可以从消息缓存组件中读取第二目标消息,并从读取的第二目标消息中提取第二目标数据,以基于第二目标数据进行相应的计算处理,从而实现任务的重启。
上述数据接收方法,针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的第一目标消息中提取第一目标数据,消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则获取历史任务状态信息,基于历史任务状态信息从消息缓存组件中确定第二目标消息,从消息缓存组件中读取第二目标消息,并从读取的第二目标消息中提取第二目标数据,以基于第二目标数据进行相应的计算处理,由于通过消息缓存组件接收携带目标数据的目标消息,进而可以从消息缓存组件中读取目标消息即可提取到目标数据进行后续地计算处理,实现了将数据接收和接收数据的后续处理过程进行解耦,接收端只需要关注自身的容错逻辑即可,即基于历史任务状态信息确定第二目标消息,并从读取的第二目标消息中提取第二目标数据,从而可以重新得到失败任务中所要接收的目标数据,避免了协调发送方重新进行数据发送,从而显著降低了容错交互的复杂度。
在一个实施例中,第一目标数据为目标数据序列中的数据;第一目标消息是根据第一消息元素和第二消息元素得到的;第一消息元素根据第一目标数据生成;第二消息元素根据第一目标数据在目标数据序列中的排序生成。
在一个实施例中,第一目标数据用于进行模型训练;队列标识的生成步骤包括:获取当前训练期数信息;当前训练期数信息用于表征当前训练过程所属的训练期数;基于当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;第一位移比特数根据训练总期数确定;基于第一目标数据在目标数据序列中的排序,得到第二队列标识分量;统计第一队列标识分量和第二队列标识分量,得到队列标识。
在一个实施例中,统计第一队列标识分量和第二队列标识分量,得到队列标识,包括:获取当前训练批次信息;当前训练批次信息用于表征当前训练过程所属的训练批次;基于当前训练批次信息以及预先设定的第二位移比特数进行左位移运算,得到第三队列标识分量;第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定;统计第一队列标识分量、第二队列标识分量和第三队列标识分量,得到队列标识。
本申请还另外提供一种应用场景,该应用场景应用上述的数据发送方法法和数据接收方法。具体地,在该应用场景中,发送端和接收端作为两个参与方进行联邦学习,发送端发送的数据为训练过程中的样本数据。上述的数据发送方法和数据接收方法在该应用场景的具体应用如下:
1、任务启动之前,发送端和接收端配置通消息队列(Message Queue,MQ)作为各方数据传输的缓存。发送端和接收端可以将数据进行分批处理,不同的小批量数据之间由多个执行器(executor)进行并行计算并将加密中间结果异步传输给MQ后继续执行后续计算,由MQ本身或额外的数据同步服务负责在各参与方之间同步MQ之间的数据,从而实现参与方的计算与跨参与方的通信之间的重叠。这里对具体的MQ实现可以不作限定,常用的MQ有Pulsar、Kafka、ZeroMQ,RabbitMQ,RocketMQ等。
2、任务正常启动后,作为发送端:
各个执行器分别调用第一线程将消息以(key,message,sequenceId)三元组的形式发送到MQ,为了保证各批量数据及执行过程中中间结果均由各方对应executor之间同步(例如,由A方的executor1将数据传输给B方的executor1),需要为每条传递的数据指定key以及队列标识sequenceId,即每条数据由(key,message,sequenceId)三个属性构成,分别为消息键值(可由executor编号和待传输的变量名构成),用以区分该消息的变量类型及需要由参与方对应的哪个executor接收,message则为消息内容本身(可附带额外属性值,如消息长度等,用来作消息大小与完整性验证等),sequenceId则为消息序列号,用以标明该条消息在对应传输变量的第几条。
发送端生成SequenceId的方式如下:获取当前训练过程的epoch信息和batch信息,通过epoch*2^26+batch*2^16+index计算得到sequenceId,以确定消息队列中各个消息的sequenceId按照消息写入的时间先后顺序单调递增。其中,index可以是目标数据在所在batch中的排序号。
3、任务正常启动后,作为发送端和接收端,在计算层实现checkpoint机制,checkpoint的时机点可以是每个epoch或每个batch;checkpoint需要记录当前的任务的执行状态,包括但不限于当前任务最后一个数据的队列标识,当前的epoch信息,中间模型等。
4、任务失败重启后:
1)作为发送端,当某个执行器启动的第一线程执行任务失败,则通过该执行器或者另外的执行器启动第二线程,从最近一次checkpoint处加载已记录的任务的执行状态(即上文中的历史任务状态信息),基于该执行状态确定第二目标数据,以实现任务重启后的恢复机制(容错机制)。
举例说明,参考图8,假设该执行器的当前任务是要针对batch2内的三个目标数据分别生成M4、M5、M6三个目标消息并写入消息队列,该执行器的上一个任务对batch1内的三个目标数据分别生成了M1、M2、M3三个目标消息并写入了消息队列,而且在T3时刻进行了checkpoint,该checkpoint记录了上一任务的batch信息以及epoch信息,当前任务从T4时刻开始运行,在T5时刻任务失败,任务在T6时刻重启,通过该执行器或者另外的执行器启动第二线程,加载checkpoint的batch信息以及epoch信息,从而获取与batch信息以及epoch信息对应的下一个batch的信息得到batch2,以重播(replay)丢失的计算过程,可是T6到T7时刻中间该执行器计算产生的消息与T4至T5产生的消息是重复的,需要有机制避免这一段重复消息的生产,而在T7时刻以后计算产生的消息则仍需要发送到MQ中。
因此,第二线程重新开始计算每条待发送消息的sequenceId:
1.1、如果MQ支持依据sequenceId进行消息去重,即MQ侧会针对每个topic维护当前发送消息的lastSequenceId(即最后一条消息的队列标识),对于接收到的消息的sequenceId(即队列标识)小于或等于lastSequenceId的消息会自动过滤,比如MQ自动过滤掉图8中的M4和M5,由于MQ可以具备消息去重功能,因此,这种情况下,任务重启后第二线程直接从checkpoint恢复的状态继续发送数据即可,即生成M4、M5和M6并写入MQ。
1.2、如果MQ不支持上述自动去重的功能,则需要由一个全局机制来记录各个topic的lastSequenceId,发送端在发送数据时比较生成sequenceId和lastSequenceId,如果小于或等于当前lastSequenceId则丢弃当前消息,从而避免消息的重复发送。具体地,可以在数据库中以(key,value)的形式存储各个topic的lastSequenceId,其中key存储的是topic名称,value存储的是该topic对应的lastSequenceId。
需要说明的是,topic代表MQ中待传输的数据的通道(channel),这个通道中的消息/数据是按顺序生产和消费的;这里的topic与(key,message,sequenceId)三元组中的key对应,topic可由变量名、executor编号、partition编号等构成;比如发送端A在每轮迭代中需要传一批计算中间结果(变量定义为v)给接收端B,且A按数据进行并行共有5个executor同时进行训练,则topic可以定义成v.1,v.2,v.3,v.4,v.5,5个executor分别往上述5个topic同时发送数据,供B方的executor进行消费。
2)作为接收端,当某个执行器启动的第一线程执行任务失败,则通过该执行器或者另外的执行器启动第二线程,从最近一次checkpoint处加载已记录的任务的执行状态(即上文中的历史任务状态信息),基于该执行状态确定第二目标消息,以实现任务重启后的恢复机制(容错机制)。
举例说明,参考图9,假设该执行器的当前任务是要读取batch2内的三个目标消息M4、M5、M6三个目标消息并对这些目标消息提取目标数据进行模型训练,该执行器的上一个任务对batch1内的三个目标消息M1、M2、M3三个目标消息并对这些目标消息提取目标数据进行模型训练,而且在T3时刻进行了checkpoint,该checkpoint记录了上一个任务的lastReceivedId,即上一个任务读取的最后一条消息M3的队列标识,当前任务从T4时刻开始运行,在T5时刻任务失败,任务在T6时刻重启,通过该执行器或者另外的执行器启动第二线程,加载checkpoint的lastReceivedId,从而从消息队列中确定M3的下一个消息即M4,以重播(replay)丢失的计算过程,但是一般MQ的消费流程会依次将消息按顺序发送给消费端,因此任务重启后,T6时刻开始会接收到M6,而这与任务重启恢复T4-T5时刻的计算不一致。
因此,第二线程可以从checkpoint处获取lastReceivedId(T3时刻的lastReceivedID指向M3),并向MQ请求从lastReceivedId对应的下一个消息(即M4)处开始继续接收消息,对于消息队列中已经接收到的消息可以MQ的缓存中立马获得,从而避免了协调其它参与方重新计算并发送数据。
说明说明的是,一般来说,不存在单纯的发送端和接收端,任务在执行的过程中常见的是会涉及发送和接收,所以本申请中的发送端和接收端是一个逻辑概念,描述的是一个任务中发送状态和接受状态。
需要说明的是,以上描述的容错机制不限于两方参与的隐私计算,还可以用于多方隐私计算场景,包括多方联邦学习和多方联合数据分析。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的数据发送方法的数据发送装置,以及一种实现上述所涉及的数据发送方法的数据发送装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个数据发送装置或者数据接收装置实施例中的具体限定可以参见上文中对于数据发送方法或者数据接收方法的限定,在此不再赘述。
在一个实施例中,如图10所示,提供了一种数据发送装置1000,包括:
第一消息生成模块1002,用于针对当前任务对应的第一目标数据,生成第一目标消息,并将第一目标消息写入消息缓存组件中;第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识;
历史状态获取模块1004,用于若当前任务执行失败,则获取已记录的历史任务状态信息;
第二消息生成模块1006,用于基于历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件;
消息发送模块1008,用于将成功写入消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
上述数据发送装置,针对当前任务对应的第一目标数据,针对当前任务对应的第一目标数据,生成第一目标消息,并将第一目标消息写入消息缓存组件中,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则获取已记录的历史任务状态信息,基于历史任务状态信息确定第二目标数据,并针对第二目标数据生成第二目标消息,基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件,最后将成功写入消息缓存组件中的目标消息依次进行发送,由于可以对目标数据生成目标消息写入消息队列,通过消息队列进行发送,使得数据发送之前的处理过程和发送过程可以异步进行,实现了将任务失败重启的流程与数据发送的流程相互之间进行解耦,发送端仅需要关注自身的容错逻辑即可,即在任务执行失败时基于历史任务状态信息确定第二目标数据,并基于第一目标消息所包含的队列标识将第二目标消息写入消息缓存组件以实现任务的重启,从而显著降低了容错交互的复杂度。
在一个实施例中,第一目标数据为当前任务对应的目标数据序列中的数据;第一消息生成模块,还用于根据第一目标数据生成第一消息元素;获取根据第一目标数据在目标数据序列中的排序生成的队列标识,将第一队列标识作为第二消息元素;根据第一消息元素和第二消息元素,得到第一目标数据对应的第一目标消息。
在一个实施例中,上述装置还包括:队列标识生成模块,用于获取当前训练期数信息;当前训练期数信息用于表征当前训练过程所属的训练期数;基于当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;第一位移比特数根据训练总期数确定;基于第一目标数据在目标数据序列中的排序号,得到第二队列标识分量;统计第一队列标识分量和第二队列标识分量,得到队列标识。
在一个实施例中,队列标识生成模块,还用于获取当前训练批次信息;当前训练批次信息用于表征当前训练过程所属的训练批次;基于当前训练批次信息以及预先设定的第二位移比特数进行左位移运算,得到第三队列标识分量;第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定;统计第一队列标识分量、第二队列标识分量和第三队列标识分量,得到队列标识。
在一个实施例中,上述装置还包括参考标识确定模块,用于若当前任务执行失败,则根据消息缓存组件中成功写入的第一目标消息的队列标识,得到参考队列标识;第二消息生成模块1008,还用于将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入消息缓存组件。
在一个实施例中,消息缓存组件中,排序在后的第一目标消息所包括的队列标识大于排序在前的第一目标消息所包括的队列标识,且第一目标消息和第二目标消息按照相同的方式生成;参考标识确定模块,用于若当前任务执行失败,则将消息缓存组件中成功写入的最后一条第一目标消息的队列标识,作为参考队列标识;第二消息生成模块1008,还用于将第二目标消息所包括的队列标识和参考队列标识进行比对,当第二目标消息所包括的队列标识小于或者等于参考队列标识时,将第二目标消息进行丢弃,当第二目标消息所包括的队列标识大于参考队列标识时,将第二目标消息确定为存在差异的第二目标消息。
在一个实施例中,第二消息生成模块1008,还用于若上一个第二目标消息所包括的队列标识小于参考队列标识,则将当前的第二目标消息所包括的队列标识和参考队列标识进行比对;上述装置还包括消息写入模块,用于若上一个第二目标消息所包括的队列标识等于参考队列标识,则将当前的第二目标消息确定为存在差异的第二目标消息并写入消息缓存组件;将当前的第二目标消息对应的后续第二目标消息确定为存在差异的第二目标消息并写入消息缓存组件。
在一个实施例中,历史状态获取模块,用于获取已记录的上一个历史任务的历史训练期数信息和历史训练批次信息;第二消息生成模块,还用于基于历史训练期数信息和历史训练批次信息确定当前任务对应的当前训练期数信息和当前训练批次信息,将与当前训练期数信息和当前训练批次信息对应的目标数据确定为第二目标数据。
在一个实施例中,历史状态获取模块,用于获取已记录的上一个历史任务的最后一个目标数据的队列标识;第二消息生成模块,还用于基于最后一个目标数据的队列标识确定与上一个历史任务的最后一个目标数据对应的下一个目标数据,将以下一个目标数据为起始数据的预设数量的目标数据确定为第二目标数据;预设数量与当前任务对应的第一目标数据的总数量匹配。
在一个实施例中,上述装置还用于若消息缓存组件具备消息去重功能,则将第二目标消息写入消息缓存组件中,消息缓存组件用于将第二目标消息所包含的队列标识与成功写入的各个目标消息对应的队列标识进行比对,以过滤与成功写入的各个目标消息相同的第二目标消息;若消息缓存组件不具备消息去重功能,则进入将第二目标消息所包括的队列标识和参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入消息缓存组件的步骤。
在一个实施例中,如图11所示,提供了一种数据接收装置1100,包括:
第一消息读取模块1102,用于针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的第一目标消息中提取第一目标数据;消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息;第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识;
历史状态获取模块1104,用于若当前任务执行失败,则获取历史任务状态信息;
目标消息确定模块1106,用于基于历史任务状态信息从消息缓存组件中确定第二目标消息;
第二消息读取模块1108,通过从消息缓存组件中读取第二目标消息,并从读取的第二目标消息中提取第二目标数据,以基于第二目标数据进行相应的计算处理。
上述数据接收方法、装置、计算机设备、存储介质和计算机程序产品,针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的第一目标消息中提取第一目标数据,消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息,第一目标消息包括用于在消息缓存组件中标识第一目标数据的队列标识,若当前任务执行失败,则获取历史任务状态信息,基于历史任务状态信息从消息缓存组件中确定第二目标消息,从消息缓存组件中读取第二目标消息,并从读取的第二目标消息中提取第二目标数据,以基于第二目标数据进行相应的计算处理,由于通过消息缓存组件接收携带目标数据的目标消息,进而可以从消息缓存组件中读取目标消息即可提取到目标数据进行后续地计算处理,实现了将数据接收和接收数据的后续处理过程进行解耦,接收端只需要关注自身的容错逻辑即可,即基于历史任务状态信息确定第二目标消息,并从读取的第二目标消息中提取第二目标数据,从而可以重新得到失败任务中所要接收的目标数据,避免了协调发送方重新进行数据发送,从而显著降低了容错交互的复杂度。
在一个实施例中,第一目标数据为目标数据序列中的数据;第一目标消息是根据第一消息元素和第二消息元素得到的;第一消息元素根据第一目标数据生成;第二消息元素根据第一目标数据在目标数据序列中的排序生成。
在一个实施例中,第一目标数据为用于进行模型训练的训练样本;队列标识的生成步骤包括:获取当前训练期数信息;当前训练期数信息用于表征当前训练过程所属的训练期数;基于当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;第一位移比特数根据训练总期数确定;基于第一目标数据在目标数据序列中的排序,得到第二队列标识分量;统计第一队列标识分量和第二队列标识分量,得到队列标识。
在一个实施例中,统计第一队列标识分量和第二队列标识分量,得到队列标识,包括:获取当前训练批次信息;当前训练批次信息用于表征当前训练过程所属的训练批次;基于当前训练批次信息以及预先设定的第二位移比特数进行左位移运算,得到第三队列标识分量;第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定;统计第一队列标识分量、第二队列标识分量和第三队列标识分量,得到队列标识。
上述数据发送装置及数据接收装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储历史任务状态信息、目标数据等。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据发送方法或者一种数据接收方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图13所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种一种数据发送方法或者一种数据接收方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图12、图13中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各数据发送方法实施例或者数据接收方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各数据发送方法实施例或者数据接收方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各数据发送方法实施例或者数据接收方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (19)

1.一种数据发送方法,其特征在于,所述方法包括:
针对当前任务对应的第一目标数据,生成第一目标消息,并将所述第一目标消息写入消息缓存组件中;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;
若当前任务执行失败,则获取已记录的历史任务状态信息;
基于所述历史任务状态信息确定第二目标数据,并针对所述第二目标数据生成第二目标消息,基于所述第一目标消息所包含的队列标识将所述第二目标消息写入所述消息缓存组件;
将成功写入所述消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
2.根据权利要求1所述的方法,其特征在于,所述第一目标数据为所述当前任务对应的目标数据序列中的数据;所述生成第一目标消息,并将所述第一目标消息写入消息缓存组件中,包括:
根据所述第一目标数据生成第一消息元素;
获取根据所述第一目标数据在所述目标数据序列中的排序生成的队列标识,将所述第一队列标识作为第二消息元素;
根据所述第一消息元素和所述第二消息元素,得到所述第一目标数据对应的第一目标消息。
3.根据权利要求2所述的方法,其特征在于,所述第一目标数据用于进行模型训练;所述队列标识的生成步骤包括:
获取当前训练期数信息;所述当前训练期数信息用于表征当前训练过程所属的训练期数;
基于所述当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;所述第一位移比特数根据训练总期数确定;
基于所述第一目标数据在所述目标数据序列中的排序号,得到第二队列标识分量;
统计所述第一队列标识分量和所述第二队列标识分量,得到所述队列标识。
4.根据权利要求3所述的方法,其特征在于,所述统计所述第一队列标识分量和所述第二队列标识分量,得到所述队列标识,包括:
获取当前训练批次信息;所述当前训练批次信息用于表征当前训练过程所属的训练批次;
基于所述当前训练批次信息以及预先设定的第二位移比特数进行左位移运算,得到第三队列标识分量;所述第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定;
统计所述第一队列标识分量、第二队列标识分量和所述第三队列标识分量,得到所述队列标识。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若当前任务执行失败,则根据所述消息缓存组件中成功写入的第一目标消息的队列标识,得到参考队列标识;
所述基于所述第一目标消息所包含的队列标识将所述第二目标消息写入所述消息缓存组件,包括:
将所述第二目标消息所包括的队列标识和所述参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与所述消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入所述消息缓存组件。
6.根据权利要求5所述的方法,其特征在于,所述消息缓存组件中,排序在后的第一目标消息所包括的队列标识大于排序在前的第一目标消息所包括的队列标识,且所述第一目标消息和所述第二目标消息按照相同的方式生成;
所述根据所述消息缓存组件中成功写入的第一目标消息的队列标识,得到参考队列标识,包括:
将所述消息缓存组件中成功写入的最后一条第一目标消息的队列标识,作为所述参考队列标识;
所述将所述第二目标消息所包括的队列标识和所述参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与所述消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,包括:
将所述第二目标消息所包括的队列标识和所述参考队列标识进行比对;
当所述第二目标消息所包括的队列标识小于或者等于所述参考队列标识时,将所述第二目标消息进行丢弃;
当所述第二目标消息所包括的队列标识大于所述参考队列标识时,将所述第二目标消息确定为存在差异的第二目标消息。
7.根据权利要求6所述的方法,其特征在于,所述将所述第二目标消息所包括的队列标识和所述参考队列标识进行比对,包括:
若上一个第二目标消息所包括的队列标识小于所述参考队列标识,则将当前的第二目标消息所包括的队列标识和所述参考队列标识进行比对;
所述方法还包括:
若上一个第二目标消息所包括的队列标识等于所述参考队列标识,则将当前的第二目标消息确定为存在差异的第二目标消息并写入所述消息缓存组件;
将当前的第二目标消息对应的后续第二目标消息确定为存在差异的第二目标消息并写入所述消息缓存组件。
8.根据权利要求5所述的方法,其特征在于,所述方法还包括:
若所述消息缓存组件具备消息去重功能,则将所述第二目标消息写入所述消息缓存组件中,所述消息缓存组件用于将所述第二目标消息所包含的队列标识与成功写入的各个目标消息对应的队列标识进行比对,以过滤与成功写入的各个目标消息相同的第二目标消息;
若所述消息缓存组件不具备消息去重功能,则进入所述将所述第二目标消息所包括的队列标识和所述参考队列标识进行比对,基于得到的比对结果,确定所对应的第二目标数据与所述消息缓存组件中成功写入的目标消息所对应的目标数据存在差异的第二目标消息,将存在差异的第二目标消息写入所述消息缓存组件的步骤。
9.根据权利要求1所述的方法,其特征在于,所述获取已记录的历史任务状态信息,包括:
获取已记录的上一个历史任务的历史训练期数信息和历史训练批次信息;
所述基于所述历史任务状态信息确定第二目标数据,包括:
基于所述历史训练期数信息和历史训练批次信息确定所述当前任务对应的当前训练期数信息和当前训练批次信息,将与所述当前训练期数信息和当前训练批次信息对应的目标数据确定为第二目标数据。
10.根据权利要求1所述的方法,其特征在于,所述获取已记录的历史任务状态信息,包括:
获取已记录的上一个历史任务的最后一个目标数据的队列标识;
所述基于所述历史任务状态信息确定第二目标数据,包括:
基于所述最后一个目标数据的队列标识确定与上一个历史任务的最后一个目标数据对应的下一个目标数据,将以下一个目标数据为起始数据的预设数量的目标数据确定为第二目标数据;所述预设数量与当前任务对应的第一目标数据的总数量匹配。
11.一种数据接收方法,其特征在于,所述方法包括:
针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的所述第一目标消息中提取第一目标数据;
所述消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;
若所述当前任务执行失败,则获取历史任务状态信息;
基于所述历史任务状态信息从所述消息缓存组件中确定第二目标消息;
从所述消息缓存组件中读取所述第二目标消息,并从读取的所述第二目标消息中提取第二目标数据,以基于所述第二目标数据进行相应的计算处理。
12.根据权利要求11所述的方法,其特征在于,所述第一目标数据为目标数据序列中的数据;所述第一目标消息是根据第一消息元素和第二消息元素得到的;所述第一消息元素根据所述第一目标数据生成;所述第二消息元素根据所述第一目标数据在所述目标数据序列中的排序生成。
13.根据权利要求12所述的方法,其特征在于,所述第一目标数据用于进行模型训练;所述队列标识的生成步骤包括:
获取当前训练期数信息;所述当前训练期数信息用于表征当前训练过程所属的训练期数;
基于所述当前训练期数信息以及预先设定的第一位移比特数进行左位移运算,得到第一队列标识分量;所述第一位移比特数根据训练总期数确定;
基于所述第一目标数据在所述目标数据序列中的排序,得到第二队列标识分量;
统计所述第一队列标识分量和所述第二队列标识分量,得到所述队列标识。
14.根据权利要求13所述的方法,其特征在于,所述统计所述第一队列标识分量和所述第二队列标识分量,得到所述队列标识,包括:
获取当前训练批次信息;所述当前训练批次信息用于表征当前训练过程所属的训练批次;
基于所述当前训练批次信息以及预先设定的第二位移比特数进行左位移运算,得到第三队列标识分量;所述第二位移比特数根据当前训练过程所属的训练期数的训练总批次确定;
统计所述第一队列标识分量、第二队列标识分量和所述第三队列标识分量,得到所述队列标识。
15.一种数据发送装置,其特征在于,所述装置包括:
第一消息生成模块,用于针对当前任务对应的第一目标数据,生成第一目标消息,并将所述第一目标消息写入消息缓存组件中;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;
历史状态获取模块,用于若当前任务执行失败,则获取已记录的历史任务状态信息;
第二消息生成模块,用于基于所述历史任务状态信息确定第二目标数据,并针对所述第二目标数据生成第二目标消息,基于所述第一目标消息所包含的队列标识将所述第二目标消息写入所述消息缓存组件;
消息发送模块,用于将成功写入所述消息缓存组件中的第一目标消息和第二目标消息依次进行发送。
16.一种数据接收装置,其特征在于,所述装置包括:
第一消息读取模块,用于针对消息缓存组件中与当前任务对应的第一目标消息,读取第一目标消息,并从读取的所述第一目标消息中提取第一目标数据;所述消息缓存组件用于缓存接收到的携带第一目标数据的第一目标消息;所述第一目标消息包括用于在所述消息缓存组件中标识所述第一目标数据的队列标识;
历史状态获取模块,用于若所述当前任务执行失败,则获取历史任务状态信息;
目标消息确定模块,用于基于所述历史任务状态信息从所述消息缓存组件中确定第二目标消息;
第二消息读取模块,用于从所述消息缓存组件中读取所述第二目标消息,并从读取的所述第二目标消息中提取第二目标数据,以基于所述第二目标数据进行相应的计算处理。
17.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10或11至14中任一项所述的方法的步骤。
18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10或11至14中任一项所述的方法的步骤。
19.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至10或11至14中任一项所述的方法的步骤。
CN202210085452.9A 2022-01-25 2022-01-25 数据发送、数据接收方法、装置、计算机设备和存储介质 Pending CN114428692A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210085452.9A CN114428692A (zh) 2022-01-25 2022-01-25 数据发送、数据接收方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210085452.9A CN114428692A (zh) 2022-01-25 2022-01-25 数据发送、数据接收方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN114428692A true CN114428692A (zh) 2022-05-03

Family

ID=81312331

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210085452.9A Pending CN114428692A (zh) 2022-01-25 2022-01-25 数据发送、数据接收方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN114428692A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114822804A (zh) * 2022-06-30 2022-07-29 深圳核心医疗科技有限公司 数据存储方法、装置、计算机设备和存储介质
CN115767448A (zh) * 2022-12-07 2023-03-07 京东科技信息技术有限公司 一种消息发送方法、装置、设备和存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114822804A (zh) * 2022-06-30 2022-07-29 深圳核心医疗科技有限公司 数据存储方法、装置、计算机设备和存储介质
CN115767448A (zh) * 2022-12-07 2023-03-07 京东科技信息技术有限公司 一种消息发送方法、装置、设备和存储介质

Similar Documents

Publication Publication Date Title
Xiao et al. Achieving accountable MapReduce in cloud computing
CN109034993A (zh) 对账方法、设备、系统及计算机可读存储介质
CN114428692A (zh) 数据发送、数据接收方法、装置、计算机设备和存储介质
CN103049565B (zh) 应用程序实例和查询存储
CN113505882B (zh) 基于联邦神经网络模型的数据处理方法、相关设备及介质
US20220101189A1 (en) Federated inference
US20230275771A1 (en) Pre-execution of block chain transaction in parallel during block consensus
US11487736B2 (en) Blockchain transaction processing systems and methods
CN111770002A (zh) 测试数据转发控制方法、装置、可读存储介质和电子设备
CN115759295A (zh) 一种基于纵向联邦学习的协同训练方法、装置及存储介质
CN116431878A (zh) 向量检索服务方法、装置、设备及其存储介质
CN114968227A (zh) 智能作战仿真平台以及智能作战仿真平台的数据处理方法
WO2022105546A1 (zh) 一种基于区块链的大数据交易方法、装置、介质及设备
CN116800671A (zh) 数据传输方法、装置、计算机设备、存储介质和程序产品
CN113630476B (zh) 应用于计算机集群的通信方法及通信装置
CN113873025B (zh) 数据处理方法及装置、存储介质及电子设备
CN116186755A (zh) 隐私计算方法、装置、终端设备及存储介质
CN114489770A (zh) 灰度发布方法、装置、计算机设备和存储介质
CN105683961B (zh) 管理用于假设分析的回写的数据的方法和系统
CN113971428A (zh) 数据处理方法、系统、设备、程序产品及存储介质
CN117033664B (zh) 业务的序列图生成方法、装置、计算机设备和存储介质
CN117073699A (zh) 车辆路线数据的处理方法、装置、计算机设备和存储介质
CN118036775A (zh) 联邦学习方法、装置、设备和存储介质
CN115858673A (zh) 数据同步方法、装置、计算机设备和存储介质
CN118094024A (zh) 虚拟资源推送方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40068476

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination