一种程序运行方法及系统
文献发布时间:2023-06-19 11:05:16
技术领域
本说明书实施例涉及计算机领域,尤其涉及一种程序运行方法及系统。
背景技术
设备在运行程序时,往往根据程序中的运算逻辑,对数据集合进行运算,得到运算结果,作为程序的输出。其中,数据集合至少包括用于对程序变量进行赋值的数据。
在有些场景下,出于信息安全的需要,不希望数据集合所承载的敏感信息泄露给运行该程序的设备。例如,在模型训练场景下,运行模型训练程序的设备需要获取多个用户样本与相应的标签进行运算,然而,这意味着设备能够基于获取到的多个用户样本以及相应的标签得到用户隐私信息。
因此,亟需一种确保信息安全的程序运行方法。
发明内容
为了确保信息安全,本说明书提供了一种程序运行方法及系统。技术方案如下所示。
一种程序运行方法,包括:
对原始数据集合中每个数据的值进行分片处理,得到每个数据的N个分片值;所述原始数据集合包括用于对程序中变量进行赋值的数据;
确定N个分片数据集合;确定每个分片数据集合,包括:对所述原始数据集合中的每个数据,采用该数据的一个分片值进行重新赋值;同一数据在N个分片数据集合中的值与该同一数据的N个分片值一一对应;
在指定情况下,N个运行设备分别基于不同的分片数据集合运行目标程序;
其中,通过预先配置,使得针对所述目标程序对应的每个基础运算单元,将任意一组值输入该基础运算单元进行运算得到的运算结果,等于:将该任意一组值的每组分片值分别输入该基础运算单元进行分别运算后,对得到的全部运算结果进行逆分片处理后得到的处理结果。
一种程序运行系统,预先对原始数据集合中每个数据的值进行分片处理,得到每个数据的N个分片值;所述原始数据集合包括用于对程序中变量进行赋值的数据;确定N个分片数据集合;确定每个分片数据集合,包括:对所述原始数据集合中的每个数据,采用该数据的一个分片值进行重新赋值;同一数据在N个分片数据集合中的值与该同一数据的N个分片值一一对应;
所述系统包括N个运行设备,每个运行设备用于:在指定情况下基于分片数据集合运行目标程序;
其中,N个运行设备分别基于不同的分片数据集合运行目标程序;通过预先配置,使得针对所述目标程序对应的每个基础运算单元,将任意一组值输入该基础运算单元进行运算得到的运算结果,等于:将该任意一组值的每组分片值分别输入该基础运算单元进行分别运算后,对得到的全部运算结果进行逆分片处理后得到的处理结果。
上述技术方案通过预先配置,使得N个运行设备可以基于分片数据集合运行目标程序,得到基于原始数据集合的目标程序运行结果。因此,在能够得到基于原始数据集合的目标程序运行结果的前提下,每个运行设备都只能获取到分片数据集合中的分片值,无法获取到原始数据集合中的任一明文数据,也就无法获取到原始数据集合中的敏感信息,保护了信息安全。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本说明书实施例提供的一种程序运行方法的流程示意图;
图2是本说明书实施例提供的一种分片数据集合确定方法的原理示意图;
图3是本说明书实施例提供的另一种分片数据集合确定方法的原理示意图;
图4是本说明书实施例提供的一种虚拟运行设备的结构示意图;
图5是本说明书实施例提供的一种模型训练程序运行方法的流程示意图;
图6是本说明书实施例提供的一种程序运行系统的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于公开的范围。
设备在运行程序时,往往根据程序中的运算逻辑,对数据集合进行运算,得到运算结果,作为程序的输出。其中,数据集合至少包括用于对程序变量进行赋值的数据。
在有些场景下,出于信息安全的需要,不希望数据集合所承载的敏感信息泄露给运行该程序的设备。
例如,在模型训练场景下,运行模型训练程序的设备需要获取多个用户样本与相应的标签进行运算,然而,这意味着设备能够基于获取到的多个用户样本以及相应的标签得到用户隐私信息。
因此,亟需一种确保信息安全的程序运行方法。
本说明书提供一种程序运行方法。由于单个设备在运行程序时,通常都会获取到程序所运算的数据集合中的全部明文数据(为了便于描述,将包含全部明文数据的数据集合称为原始数据集合),因此,本说明书提供的程序运行方法中,可以针对原始数据集合中每个明文数据的值进行分片处理,得到多个分片值;进而可以得到多个包含原始数据集合中全部数据(值为分片值)的分片数据集合,并将得到的多个分片数据集合分别部署在多个设备上,使得这些设备可以基于分片数据集合运行相同的程序。
而在具体运行程序时,可以通过特定分片运算算法执行程序中针对分片数据集合的运算,使得多个设备的多个基于分片数据集合的程序运行结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的程序运行结果。
为了便于理解,下面给出一种具体的示例。
原始数据集合中包含数据X,其数值为a。针对数据X进行分片处理,可以是将数值a拆分成N份,具体为a
确定N个分片数据集合,N个分片数据集合中都包含数据X。对于分片数据集合i而言,所包含的数据X的数值为a
而所需运行的程序为F(X),基于特定分片运算算法对F(X)进行配置修改,得到F'(X),使得
在上述方法实施例中,由于通过特定分片运算算法,使得多个设备基于分片数据集合得到的多个程序运行结果,在经过逆分片处理后,依然可以得到基于原始数据集合的程序运行结果,因此,在能够得到实际所需求的程序运行结果(即,基于原始数据集合的程序运行结果)的前提下,针对原始数据集合中的每个数据的值进行分片处理,可以得到多个没有实际含义的分片值,并不包含任何信息(包括敏感信息),从而去除数据中包含的敏感信息,实现了脱敏处理。每个设备无法根据所获取的数据分片值得到任何敏感信息。
也就是说,多个设备中的每个设备运行程序所运算的数据集合(即分片数据集合)中并不包含敏感信息,原始数据集合所承载的敏感信息在程序运行过程中没有泄露给任一运行程序的设备,保护了敏感信息的安全。
下面对上述方法实施例中特定分片运算算法进行解释。
在执行程序时,程序中可以包括任意一种运算,例如,加减乘除、求导、开方等。而每种运算,都需要在运行程序的设备上进行,具体可以是由该设备的计算单元执行,例如,中央处理器CPU。
为了便于更好地理解上述特定分片运算算法,下面介绍两点值得注意的前提。
前提1:由于设备为数据分配的存储空间有限,设备上的数据都存在精度。
需要注意的是,设备在针对数据进行运算时,单个数据都存在存储空间的限制,并进一步具有数据大小和精度的限制。例如,针对整型数据,通常在设备的存储空间中可以占4个字节,所能够表示的数据大小存在限制,精度为1;而针对双精度浮点数类型的数据,通常在设备的存储空间中可以占8个字节,所能够表示的精度存在限制。
基于这一点,设备在运行程序对数据进行运算时,如果运算结果受到数据存储空间的限制无法精确表示,则会取近似值作为运算结果。一种具体的示例为,在使用双精度浮点数类型的数据表示1/3时,设备通常表示为0.333333,而不会表示为无限循环小数。
前提2:程序所包括的任意一种运算都会被拆解为计算单元所能执行的基础运算操作。
设备的计算单元通常只能执行部分基础运算操作,例如,加法、乘法以及与或非等逻辑运算。而程序中包含的任意一种运算都需要由计算单元执行,具体是将任意一种运算转换为计算单元可实现的一个或多个基础运算操作。
由于任意一种逻辑运算都可以用异或操作、与操作以及非操作表示出来,因此,任意一种逻辑运算可以转换为基础运算操作。
对于算术运算,显然可以转换为基础运算操作。例如,两个数据之间的减法运算可以转换成一个数据与另一个数据的相反数之间的加法运算,两个数据之间的除法运算可以转换成被除数、与除数的倒数之间的乘法预算。
而对于更为复杂的运算,可以通过一些求近似值的方法,转换为一个或多个基础运算操作。例如,牛顿迭代法、二分法、泰勒展开公式等等。由于设备本身所存储的数据的精度存在限制,因此,可以通过这些求近似值的方法提高近似值的精度高于运算结果在设备上的精度,从而可以降低精度得到运算结果;也可以在利用原始数据进行正向运算的情况下,使得近似值的逆向运算结果与原始数据之间的差值无法被设备表示,从而将近似值作为正向运算结果。
下面给出两种具体的复杂运算的示例。
第一个示例,求导数值可以根据导数值的定义直接计算。可以直接计算导数值
需要注意的是,这一计算方式所得到的导数值为近似值,但由于设备上数据本身精度存在限制,可以通过控制Δx的大小,使得这一计算方式所求得的导数值的精度高于导数值在设备上的精度。
例如,在导数值数据的精度为0.1的情况下,可以通过不断减小Δx并多次代入计算,使得
第二个示例,开方运算可以利用二分法进行计算。在一种具体的计算
1*1=1<2
1.5*1.5=2.25>2
1.25*1.25=1.5625<2
1.375*1.375=1.890625<2
1.4375*1.4375=2.06640625>2
1.40625*1.40625=1.9775390625<2
1.421875*1.421875=2.021728515625>2
1.4140625*1.4140625=1.9995727539062...
在乘积与2的差值小于运算结果的精度0.01的情况下,设备对于运算结果无法表示出误差值0.00042...,对于1.4140625的平方运算结果实际可以表示为2,因此,可以确定运算结果为1.41。
通过上述两个前提的分析,程序中所包含的任意一种运算,如果能够被设备执行,通常可以转换为计算单元所能执行的一个或多个基础运算操作。
如果基于特定分片运算算法,计算单元的每个基础运算操作满足“多个基于分片数据集合的基础运算结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的基础运算结果”,由于程序中任意一种运算操作都是由一个或多个基础运算操作实现的,因此,程序中任意一种运算操作也满足“多个基于分片数据集合的运算结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的运算结果”。
进一步地,程序最终的运行结果是通过程序中的多个运算操作得到的,程序运行结果也满足“多个设备的多个基于分片数据集合的程序运行结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的程序运行结果”。
因此,如果“多个设备的多个基于分片数据集合的程序运行结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的程序运行结果”,则需要使得计算单元的每个基础运算操作满足“多个基于分片数据集合的基础运算结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的基础运算结果”。
在解释基于特定分片运算算法配置基础运算操作之前,首先需要说明的是分片处理的具体操作。在进行分片处理时,需要区分参与算术运算和参与逻辑运算的两种情况。
对于同一数据的值(为了便于描述,称为初始值),在需要参与算术运算的情况下,所拆分的分片值需要满足“各分片值的和等于初始值”;而在需要参与逻辑运算的情况下,所拆分的分片值需要满足“各分片值彼此异或的结果等于初始值”。
例如,对于取值为a的数据X,在需要参与算术运算的情况下,拆分得到的分片值a
上述分片处理具体可以是:基于随机算法进行分片。例如,基于随机算法得到N-1个随机数,作为a
此外,满足不同条件的分片值可以基于现有方式互相转换。因此,在程序中包含算术运算和逻辑运算的情况下,可以根据需求即时对分片值进行转换,并不需要分别进行两次不同的分片处理,得到两组不同的分片值。
而对应于两种分片处理情况的逆分片处理也不同,针对算术运算而言是加法运算,针对逻辑运算是异或操作。
由于分片处理是一种脱敏处理方式,可以在完成计算的前提下,使得设备无法获取被分片处理的数据所包含的敏感信息。因此,可以针对需要隐藏敏感信息、保护信息安全的数据进行分片处理,例如,程序的输入、部分常量、部分变量的取值。
但程序中也存在部分不需要保护信息安全的数据,例如部分常量、部分权重、部分固定值等。其中并不包含敏感信息,因此不需要进行分片处理。
因此,程序中参与运算的数据包括进行分片处理的数据和未进行分片处理的数据。
为了便于理解,下面针对基础运算操作的配置,都是针对两个数据而言的,可以理解的是,对于包括两个以上数据的运算,可以拆分成多组两个数据的基础运算。
1、加法运算。
针对分片处理的两个数据之间的加法运算,每个设备可以直接将这两个数据的分片值相加得到加法运算结果。全部设备基于分片值的加法运算结果之和等于基于初始值的加法运算结果。
例如,对于取值为a的数据X、以及取值为b的数据Y,在经过分片处理后,设备i上的数据X的取值为a
对于程序中执行的X+Y,设备i具体执行的是a
针对未分片处理的一个数据与分片处理的一个数据之间的加法运算,可以在N个设备中选择一个设备执行加法运算,而其他N-1个设备并不执行;也可以每个设备将未分片处理的数据实时进行分片,例如,将该数据的值N等分,再将这两个数据的分片值相加得到加法运算结果。
同样,基于下述推导,A为未分片处理数据的初始值,对于全部N个设备,N个加法运算结果之和等于a+b(即,N个基于分片数据集合的加法运算结果在经过逆分片处理(加法操作)后,得到的逆分片处理结果,等于基于原始数据集合的加法运算结果)。
针对未分片处理的两个数据之间的加法运算,由于都不涉及分片处理,也并不会进行逆分片处理,可以正常执行加法运算。
2、乘法运算。
针对分片处理的两个数据之间的乘法运算,N个设备之间可以约定一组随机数,基于这一组随机数对这两个数据的分片值进行随机数加密,从而可以交互加密后的数据分片值而不会泄露数据的原始值和敏感信息,并进一步进行指定运算,使得N个设备基于分片值的指定运算结果之和,等于这两个数据的初始值的乘法运算结果。全部设备基于分片值的指定运算结果之和等于基于初始值的乘法运算结果。
为了便于解释指定运算,下面给出一种具体的示例。
例如,对于取值为a的数据X、以及取值为b的数据Y,在经过分片处理后,设备i上的数据X的取值为a
步骤一:N个设备之间需要针对本次数据X和数据Y之间的乘法运算约定一组随机数,其中包含3个随机数α,β,δ,其中αβ=δ。
对这3个随机数也进行分片处理,得到
N个设备之间互相交互(a
步骤二:每个设备i进行指定运算
基于下述推导,对于全部N个设备,N个设备的N个乘法运算结果之和等于ab(即,N个基于分片数据集合的指定运算结果(对于设备而言是乘法运算结果)在经过逆分片处理(加法操作)后,得到的逆分片处理结果,等于基于原始数据集合的乘法运算结果)。
此外,步骤二中,也可以指定一个设备计算(a-α)(b-β)+(b-β)α
针对未分片处理的一个数据与分片处理的一个数据之间的乘法运算,每个设备可以直接将未分片处理的数据取值与分片值的乘积确定为乘法运算结果,基于下述推导,例如,A是未分片处理的数据取值,对于全部N个设备,N个设备的N个乘法运算结果之和等于Ab。
当然,也可以对未分片处理的数据取值即时进行分片处理,从而可以基于上述步骤一、二获取乘法运算结果。
针对未分片处理的两个数据之间的乘法运算,由于都不涉及分片处理,也并不会进行逆分片处理,可以正常执行乘法运算。
3、异或操作。
针对逻辑运算,分片处理所得到的分片值具体可以满足“各分片值彼此异或的结果等于初始值”。
针对分片处理的两个数据之间的异或操作,每个设备可以直接针对两个数据的分片值进行异或操作,得到异或操作执行结果。全部设备基于分片值的异或操作执行结果之间,彼此异或的结果等于基于初始值的异或操作执行结果。
例如,对于取值为a的数据X、以及取值为b的数据Y,在经过分片处理后,设备i上的数据X的取值为a
基于下述推导,对于全部N个设备,N个异或操作执行结果彼此异或的结果等于
针对未分片处理的一个数据与分片处理的一个数据之间的异或操作,可以是确定一个设备执行未分片处理的数据取值与本地分片值的异或操作得到结果,其他N-1个设备并不执行该操作,直接将分片值作为异或操作的结果。全部设备基于分片值的异或操作执行结果之间,彼此异或的结果等于基于初始值的异或操作执行结果。
例如,对于取值为a的数据X,在经过分片处理后,设备i上的数据X的取值为a
,
基于下述推导,A是未分片处理的数据的初始值,对于全部N个设备,N个异或操作执行结果彼此异或的结果等于
当然,也可以对A即时进行分片处理,直接针对两个数据的分片值进行异或操作,得到异或操作执行结果。
针对未分片处理的两个数据之间的异或操作,由于都不涉及分片处理,也并不会进行逆分片处理,可以正常执行异或操作。
4、与操作。
针对分片处理的两个数据之间的与操作,N个设备之间可以约定一组随机数,基于这一组随机数对这两个数据的分片值进行随机数加密,从而可以交互加密后的数据分片值而不会泄露数据的原始值和敏感信息,并进一步进行指定操作,使得N个设备基于分片值的指定操作执行结果经过相互异或操作(逆分片处理)的结果,等于这两个数据的初始值的与操作执行结果。
为了便于解释指定操作,下面给出一种具体的示例。
例如,对于取值为a的数据X、以及取值为b的数据Y,在经过分片处理后,设备i上的数据X的取值为a
步骤一:N个设备之间需要针对本次数据X和数据Y之间的与操作约定一组随机数,其中包含3个随机数α,β,δ,其中α∧β=δ。
对这3个随机数也进行分片处理,得到
N个设备之间互相交互
步骤二:指定一个设备计算
基于下述推导,对于全部N个设备,N个与操作执行结果经过相互异或操作得到的结果等于a∧b(即,N个基于分片数据集合的指定操作执行结果(对于设备而言是与操作执行结果)在经过逆分片处理(异或操作)后,得到的逆分片处理结果,等于基于原始数据集合的与操作执行结果)。
针对未分片处理的一个数据与分片处理的一个数据之间的与操作,每个设备可以直接将未分片处理的数据取值与分片值之间的与操作执行结果确定为与操作执行结果,基于下述推导,例如,A是未分片处理的数据取值,对于全部N个设备,N个与操作执行结果经过相互异或操作的结果等于A∧b(即,N个基于分片数据集合的指定操作执行结果(对于设备而言是与操作执行结果)在经过逆分片处理(异或操作)后,得到的逆分片处理结果,等于基于原始数据集合的与操作执行结果)。
当然,也可以对未分片处理的数据取值即时进行分片处理,从而可以基于上述步骤一、二获取与操作执行结果。
针对未分片处理的两个数据之间的与操作,由于都不涉及分片处理,也并不会进行逆分片处理,可以正常执行与操作。
5、非操作。
非操作可以看作是针对单个数据的操作,因此,针对分片处理的一个数据的非操作,N个设备之间可以指定一个设备,该指定设备可以执行针对分片值的非操作得到非操作执行结果,其他N-1个设备可以直接将分片值作为非操作执行结果。
例如,对于取值为a的数据X,在经过分片处理后,设备i上的数据X的取值为a
基于下述推导,对于全部N个设备,N个设备的N个非操作执行结果经过相互异或操作得到的结果等于
针对未分片处理的一个数据的非操作,由于不涉及分片处理,也不会进行逆分片处理,可以正常执行非操作。
6、或操作。
针对分片处理的两个数据之间的或操作,N个设备之间可以约定一组随机数,基于这一组随机数对这两个数据的分片值进行随机数加密,从而可以交互加密后的数据分片值而不会泄露数据的原始值和敏感信息,并进一步进行指定操作,使得N个设备基于分片值的指定操作执行结果经过相互异或操作(逆分片处理)的结果,等于这两个数据的初始值的或操作执行结果。
为了便于解释指定操作,下面给出一种具体的示例。
例如,对于取值为a的数据X、以及取值为b的数据Y,在经过分片处理后,设备i上的数据X的取值为a
步骤一:N个设备之间需要针对本次数据X和数据Y之间的或操作约定一组随机数,其中包含3个随机数α,β,δ,其中α∧β=δ。
对这3个随机数也进行分片处理,得到
N个设备之间互相交互
步骤二:1个设备计算
基于下述推导,对于全部N个设备,N个或操作执行结果经过相互异或操作得到的结果等于a∨b(即,N个基于分片数据集合的指定操作执行结果(对于设备而言是或操作执行结果)在经过逆分片处理(异或操作)后,得到的逆分片处理结果,等于基于原始数据集合的或操作执行结果)。
针对未分片处理的一个数据与分片处理的一个数据之间的或操作,每个设备可以执行指定操作,使得N个设备基于分片值的指定操作执行结果经过相互异或操作(逆分片处理)的结果,等于这两个数据的初始值的或操作执行结果。
例如,对于取值为a的数据X,在经过分片处理后,设备i上的数据X的取值为a
可以指定一个设备执行
基于下述推导,对于全部N个设备,N个或操作执行结果经过相互异或操作的结果等于A∨b(即,N个基于分片数据集合的指定操作执行结果(对于设备而言是与操作执行结果)在经过逆分片处理(异或操作)后,得到的逆分片处理结果,等于基于原始数据集合的或操作执行结果)。
当然,也可以对未分片处理的数据取值即时进行分片处理,从而可以基于上述步骤一、二获取或操作执行结果。
针对未分片处理的两个数据之间的或操作,由于都不涉及分片处理,也并不会进行逆分片处理,可以正常执行或操作。
通过上述对特定分片运算算法的解释,使得针对包括加法运算、乘法运算、与或非操作以及异或操作,都可以通过对应的指定运算或指定操作,实现“多个基于分片数据集合的基础运算结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的基础运算结果”,从而实现“多个设备的多个基于分片数据集合的程序运行结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的程序运行结果”。
下面结合附图,对本说明书所提供的一种程序运行方法进行详细的解释。
如图1所示,为本说明书提供的一种程序运行方法的流程示意图。该方法可以至少包括以下步骤S101-S103。
S101:对原始数据集合中每个数据的值进行分片处理,得到每个数据的N个分片值。
其中,原始数据集合可以包括保护敏感信息需求的数据,例如,用于对程序中的变量进行赋值的数据、用于对程序中的常量进行赋值的数据、程序的输入数据等等。通过分片处理可以隐藏数据值所包含的敏感信息。
而N是预设的参与程序运行的设备数量。N≥2。为了便于描述,将待参与程序运行的设备成为运行设备。
S102:确定N个分片数据集合;确定每个分片数据集合,包括:对原始数据集合中的每个数据,采用该数据的一个分片值进行重新赋值;同一数据在N个分片数据集合中的值与该同一数据的N个分片值一一对应。
综合上述S101和S102进行解释。
原始数据集合的存储位置可以至少存在两种实施例,相对应地,确定N个分片数据集合的具体方式也不同。
实施例一:原始数据集合可以存储在N个运行设备之外的目标设备上。
目标设备可以是N个运行设备之外的任一存储设备,存储有原始数据集合中的全部数据。目标设备可以针对原始数据集合中每个数据进行分片处理,得到N个分片值,从而创建N个分片数据集合,其中每个分片数据集合中可以包含有原始数据集合中的全部数据,并将N个分片值分别重新赋值到N个分片数据集合的该数据中,使得同一数据在N个分片数据集合中的值与该同一数据的N个分片值一一对应。
目标设备可以将创建的N个分片数据集合分别发送到N个运行设备,使得N个运行设备与N个分片数据集合一一对应。
为了便于理解,在一种可选的实施例中,如图2所示,为本说明书提供的一种分片数据集合确定方法的原理示意图,其中包括目标设备、设备1和设备2,其中目标设备存储有原始数据集合{X=a,Y=b}。
针对原始数据集合{X=a,Y=b},参与程序运行的设备包括设备1和设备2。目标设备针对原始数据集合中的每个数据进行分片处理,得到a
目标设备将分片数据集合{X=a
实施例二:原始数据集合具体可以分布式存储在N个运行设备上。
也就是说,N个运行设备中的每个运行设备可以存储有原始数据集合中的部分数据。
而得到每个数据的N个分片值并确定N个分片数据集合,具体可以是N个运行设备分别对本地存储的数据值(运行设备所存储的、且属于原始数据集合的数据值)进行分片处理,并彼此交互分片处理结果,使得每个运行设备可以获得原始数据集合中每个数据的一个分片值,也就是分片数据集合。
为了便于理解,在一种可选的实施例中,如图3所示,为本说明书提供的另一种分片数据集合确定方法的原理示意图,其中包括设备1和设备2。
针对原始数据集合{X=a,Y=b},参与程序运行的设备包括设备1和设备2。设备1上存储有数据X取值为a,设备2上存储有数据Y取值为b。设备1对本地存储的数据X进行分片处理,得到分片值a
设备1利用a
针对上述情况二,本说明书还提供了一种具体的实施例,针对运行设备之间的交互、以及分片数据集合的形式进行具体限定。
N个运行设备可以预先创建符号表。符号表至少可以用于存储运行设备所预定义的变量。符号表中具体可以包括变量名称、变量数据类型和变量取值存储地址。
N个运行设备中的每个运行设备上存储有原始数据集合中的部分数据。运行设备可以根据本地数据在符号表中创建对应的变量。
在任一运行设备根据本地任一数据在符号表中创建变量的情况下,该运行设备可以生成对应的变量名称、变量数据类型和变量取值存储地址。同时,可以对该数据进行分片处理,选择其中一个分片值对符号表中的变量进行赋值,并将这一变量的变量名称、变量数据类型以及其他N-1个分片值分别发送到其他N-1个运行设备中,使得其他N-1个运行设备中每个运行设备可以获取到变量名称、变量数据类型以及1个分片值,以便于其他N-1个运行设备在本地符号表中创建变量名称相同、变量数据类型相同的变量,并利用获得的1个分片值进行赋值。
在N个运行设备分别根据本地存储的数据值(运行设备所存储的、且属于原始数据集合的数据值)在符号表中创建变量并进行分片处理,彼此交互,使得每个运行设备的符号表中包含原始数据集合中每个数据对应的变量、以及每个数据的分片值。
为了便于理解,在一种可选的实施例中,针对原始数据集合{X=a,Y=b},参与程序运行的设备包括设备1和设备2。设备1上存储有数据X取值为a,设备2上存储有数据Y取值为b。
设备1可以根据本地存储的数据X,在本地符号表中创建变量X,变量名称为X,变量数据类型为整型数据,变量取值存储地址可以由设备指定。设备1可以对a进行分片处理,得到分片值a
同时,设备1可以将变量名称X、变量数据类型为整型数据、以及分片值a
同理,设备2在本地符号表中创建变量Y,利用b
因此,设备1本地符号表可以包含分片数据集合{X=a
需要注意的是,同一符号表中不能出现名称相同的两个变量。因此在实际交互之前,需要N个运行设备之间进行变量名称冲突检查,以使得交互之后任一运行设备的符号表中不会存在名称相同的两个变量。
在一种可选的实施例中,在N个运行设备彼此交互在各自符号表中新创建的变量之前,可以先确定不同运行设备之间是否存在名称相同的变量,如果存在,则可以更换名称;如果不存在,则可以继续进行交互。
此外,符号表中也可以用于存储运行设备预定义的常量,并对常量也进行上述分片处理和彼此交互,以便于N个运行设备同步符号表中的常量。
S103:在指定情况下,N个运行设备分别基于不同的分片数据集合运行目标程序。通过预先配置,使得针对目标程序对应的每个基础运算单元,将任意一组值输入该基础运算单元进行运算得到的运算结果,等于:将该任意一组值的每组分片值分别输入该基础运算单元进行分别运算后,对得到的全部运算结果进行逆分片处理后得到的处理结果。
在经过S102之后,N个运行设备上分别部署有分片数据集合,可以根据本地部署的分片数据集合运行程序。
下面分别从4个角度对S103进行解释。
1、指定情况。
指定情况可以是本方法流程所指定的N个运行设备可以运行目标程序的前提条件被满足的情况。
在一种可选的实施例中,指定情况可以是N个运行设备完成部署分片数据集合和目标程序。例如,确定每个运行设备都部署有分片数据集合和目标程序,则可以基于分片数据集合运行目标程序。
在另一种可选的实施例中,目标程序的运行需要原始数据集合中的一个或多个数据,指定情况可以是每个运行设备所部署的分片数据集合中包含原始数据集合中的全部数据,以保证任一运行设备都可以正常运行目标程序,不会存在某一运行设备因为缺少原始数据集合中任一数据导致无法运行目标程序的情况。基于上述符号表的实施例,指定情况具体可以是每个运行设备的符号表中都包含根据原始数据集合中全部数据所创建的变量。
在一种具体的实施例中,目标程序在运行之前,需要确定N个运行设备分别预定义的变量属性集合之间满足一致性,从而使得同一变量在N个运行设备之间都具有定义,可以存储分片值。如果任一运行设备上不存在某一变量的分片值,则目标程序可能在该运行设备上无法成功运行。
因此,为了保证N个运行设备都可以成功运行目标程序,每个运行设备上存在全部变量的分片值,指定情况可以是N个运行设备分别预定义的变量属性集合之间满足一致性。其中一个变量属性可以包括一个变量符号与一个变量数据类型。具体可以是由指定设备接收N个运行设备分别预定义的N个变量属性集合,确定N个变量属性集合所包含的变量属性相同;也可以是任一运行设备接收其他N-1个运行设备分别预定义的N个变量属性集合,确定N个变量属性集合所包含的变量属性相同;也可以是每个运行设备接收其他N-1个运行设备分别预定义的N个变量属性集合,都确定N个变量属性集合所包含的变量属性相同。
此外,运行设备预定义的变量属性集合,具体可以是根据预定义的符号表得到的。运行设备预定义的符号表中可以至少包括运行设备预定义的变量对应的变量符号、变量数据类型、以及变量取值存储地址;变量属性集合可以包括符号表中的变量符号和变量数据类型。
2、目标程序。
在本方法流程中,目标程序与原始数据集合之间的关系可以至少存在以下两种实施例。
实施例一:目标程序可以基于原始数据集合中的数据编写。
为了便于理解,可以给出一个具体的示例。
例如,原始数据集合为{X=1,Y=2,Z=3}。在编写目标程序时,可以基于原始数据集合中的一个或多个数据编写,具体可以使用其中的X、Y或Z编写目标程序,使得目标程序可以根据所使用的数据值(初始值或者分片值)成功运行,得到程序运行结果。在一种具体的示例中,可以使用X和Y编写目标程序,具体可以是计算(X+Y
因此,任一运行设备可以基于分片数据集合(包含了原始数据集合中的全部数据)中的数据分片值运行目标程序。
实施例二:原始数据集合可以根据目标程序运行所需的数据创建。
为了便于理解,可以给出一个具体的示例。
例如,针对编写的目标程序计算(X+Y
而针对包含有原始数据集合中全部数据的分片数据集合,也可以为目标程序中的变量X和Y赋值并运行目标程序。
因此,在本方法流程中,并不限定目标程序具体是如何编写的,只要目标程序可以基于原始数据集合中的数据值成功运行,也就是目标程序可以基于分片数据集合中的分片值成功运行即可。
值得强调的是,N个运行设备可以运行相同的目标程序,基于不同的分片数据集合得到程序运行结果。
3、预先配置。
为了便于理解,可以将基础运算操作视为基础运算单元,基础运算单元具有输入和输出。基于上述特定分片运算算法,针对基础运算单元进行配置,具体可以是配置后的基础运算单元执行上述特定分片运算算法中所对应的基础运算操作。
例如,针对乘法运算,可以视为一个乘法运算单元,基于上述特定分片运算算法,将任意一组值输入配置特定分片运算算法前的乘法运算单元进行运算,输出得到的运算结果,等于:将该任意一组值的每组分片值分别输入配置特定分片运算算法后的乘法运算单元进行分别运算后,对输出得到的全部运算结果再进行逆分片处理后得到的处理结果。
其中,配置后的乘法运算单元中,针对所输入的两个经过分片处理的数据,具体可以执行上述特定分片运算算法中对应于乘法运算的步骤一和步骤二。而针对其他情况,例如,输入两个未经过分片处理的数据、或者输入一个经过分片处理的数据和一个未经过分片处理的数据,具体可以直接执行乘法运算。
而针对具体的配置方法,可以至少存在以下2个实施例。
实施例一:配置运行设备的指令集中基础运算所对应的运算逻辑。
在运行设备中,不同的基础运算的功能是通过调用系统指令集中对应的运算指令实现的。其中,系统指令集是运行设备的操作系统的指令集。例如,针对乘法运算,可以调用系统指令集中的乘法运算指令,进而由运行设备的计算单元执行乘法运算指令对应的运算逻辑,完成乘法运算。
因此,预先配置具体可以是针对每个基础运算单元,确定系统指令集中对应于该基础运算单元的运算指令;并在操作系统中,基于上述特定分片运算算法配置对应于确定的运算指令的运算逻辑。
在具体运行目标程序的过程中,针对目标程序对应的任一基础运算单元,可以在编译过程中调用运行设备配置后的指令集,确定其中对应于该基础运算单元的运算指令,得到上述特定分片运算算法中对应于该基础运算单元的运算逻辑。
例如,针对目标程序对应的乘法运算单元,当输入是两个经过分片处理的数据时,可以基于配置后的指令集进行编译,得到上述特定分片运算算法中对应于乘法运算的步骤一和步骤二,从而利用输入执行步骤一和步骤二得到输出。
实施例二:配置运行设备的计算单元中基础运算所对应的运算逻辑。
在运行设备中,针对目标程序对应的每个基础运算单元,都是由计算单元调用自身基础运算的运算逻辑进行运算。例如,针对目标程序对应的多个乘法运算单元,都是由运行设备的CPU调用自身的乘法器进行运算。
因此,预先配置具体可以是针对运行设备的计算单元中每个基础运算对应的运算逻辑,基于上述特定分片运算算法配置对应于每个基础运算的运算逻辑。例如,针对配置后的计算单元,其中的乘法运算逻辑被配置为:针对所输入的两个经过分片处理的数据,具体可以执行上述特定分片运算算法中对应于乘法运算的步骤一和步骤二;针对输入两个未经过分片处理的数据、或者输入一个经过分片处理的数据和一个未经过分片处理的数据,具体可以直接执行乘法运算。
此外,基于上述特定分片运算算法,其中区分了未分片处理的数据和分片处理的数据,并且针对不同的情况,相同的基础运算也可以对应于不同的运算逻辑。因此,在目标程序中,可以通过指定标识区分未分片处理的数据和分片处理的数据。
例如,新设置一个数据类型为分片类型,针对分片处理的变量,可以指定变量数据类型为分片类型。分片类型并不区分具体的数据类型是整型、浮点型或其他类型。
在目标程序部署到运行设备之后,针对分片类型的变量,可以根据运行设备上预定义的符号表,确定符号表中变量名称与该分片类型的变量名称相同的变量,并将该分片类型的变量重新确定为符号表中所确定的变量。
为了便于理解,下面提供一种具体的示例。
在目标程序中,可以使用ashr表示分片类型。可以在目标程序中创建一个分片类型的变量X。
在目标程序部署到运行设备之后,在符号表中确定变量名称为X的变量(变量数据类型可以是整型数据,取值可以是分片值),则可以将分片类型的变量X确定为符号表中所确定的变量X,取值为分片值。
而未经过分片处理的变量并不是ashr类型,也就不需要根据符号表确定变量,取值也是初始值,从而可以区分未分片处理的变量和分片处理的变量。
4、程序运行结果。
在N个运行设备分别基于分片数据集合运行目标程序,得到各自的程序运行结果之后,可以视为目标程序已经运行完成。但需要注意的是,当需要获取目标程序基于原始数据集合的程序运行结果时,需要获取N个运行设备的程序运行结果,再进行逆分片处理。
由于N个运行设备运行的是相同的目标程序,尽管是基于不同的分片数据集合在运行,但针对目标程序中的每次运算,N个运行设备上基于分片数据集合得到的运算结果在经过逆分片处理后,得到的处理结果都等于单个运行设备基于原始数据集合得到的运算结果,因此,可以将N个运行设备整体视为一个虚拟的运行设备,可以基于原始数据集合运行目标程序。
为了便于理解,如图4所示,为本说明书提供的一种虚拟运行设备的结构示意图。其中包括3个运行设备,分别是运行设备1、运行设备2和运行设备3。
针对原始数据集合进行分片处理,得到分片数据集合1、分片数据集合2和分片数据集合3。其中,运行设备1基于分片数据集合1运行目标程序得到程序运行结果1,运行设备2基于分片数据集合2运行目标程序得到程序运行结果2,运行设备3基于分片数据集合3运行目标程序得到程序运行结果3,而程序运行结果1、程序运行结果2和程序运行结果3经过逆分片处理后,可以得到虚拟运行设备基于原始数据集合运行目标程序得到的程序运行结果。
因此,可以将运行相同程序的运行设备1、运行设备2和运行设备3视为一个虚拟的运行设备。
而具体到实际的运行设备上,每个运行设备都无法获取到运行目标程序所需的原始数据集合中的明文数据,也就不会泄露任何敏感信息。
可以理解的是,为了保护敏感信息安全,使得设备无法获得明文数据,上述方法流程通过对原始数据集合的分片处理,并由N个运行设备分别基于不同的分片数据集合运行相同的目标程序,使得在满足目标程序正常运行、可以得到正确的目标程序运行结果的前提下,每个实际运行目标程序的运行设备都无法得到原始数据集合中的任一明文数据,只能得到分片值。而分片值本身并不具有实际含义,也就不包含任何信息(例如,敏感信息),基于分片值得到的目标程序中间运行结果也不具有任何实际含义,并不包含任何信息。
由于上述特定分片运算算法中,存在部分基础运算所对应的运算逻辑中需要N个运行设备交互随机数加密的分片值,因此,基于上述方法流程,本说明书还提供一种可选的实施例。
在N个运行设备需要针对目标程序中任一变量交互分片值的情况下,可以分别对本地存储的该变量的分片值进行随机数加密。
因此,基于上述方法流程,在N个运行设备分别运行目标程序的过程中,针对目标程序中每个变量,当首次对该变量的分片值进行随机数加密时,可以向随机数提供方请求一个随机数并分配给该变量;当再次对该变量的分片值进行随机数加密时,可以复用分配给该变量的随机数;当对该变量的分片值经过数学变换得到的变换结果进行随机数加密时,也可以复用分配给该变量的随机数。
在对该变量的分片值经过数学变换得到的变换结果进行随机数加密时,具体可以是复用分配给该变量的随机数,针对该随机数进行相同的数学变换,并利用变换后的随机数对上述分片值的变换结果进行随机数加密;也可以直接复用分配给该变量的随机数对上述分片值的变换结果进行随机数加密。数学变换具体可以是:转置、矩阵切割、与系数相乘等等。
其中,随机数提供方可以是提供随机数的可信第三方。基于上述特定分片运算算法,随机数提供方具体可以是生成一组随机数,其中包含3个随机数满足特定的条件,并对3个随机数分别进行分片处理,分别将每个随机数的N个分片值一一发送到N个运行设备,用于对N个运行设备上的同一变量加密。
在向随机数提供方请求一个随机数并分配给该变量之后,若该变量的分片值在目标程序中还需要进行至少1次随机数加密,则可以在本地存储分配给该变量的随机数。复用分配给该变量的随机数,具体可以是复用本地存储的分配给该变量的随机数。
显然,本实施例中,通过针对同一变量、或者同一变量的数学变换结果,在不同运算过程中复用随机数进行加密,可以减少运行设备与随机数提供方之间的数据传输,提高了运行设备的运算速度。
需要注意的是,在一种可选的实施例中,由于随机数提供方通常是针对两个经过分片处理的数据生成一组随机数,因此,在具体复用时,如果两个数据都存在可以复用的随机数,则可以至少复用其中一个数据对应的随机数,避免在不同运算中使用完全相同的两组随机数(每组包含3个随机数),进一步避免了破解随机数加密的风险。
为了便于理解,下面提供一种示例。
针对数据X和数据Y之间的第一次乘法运算,可以由随机数提供方针对(X,Y)生成一组随机数(a,b,c)满足a+b=c。针对a、b和c进行分片处理后,每个运行设备利用分片值进行随机数加密。
针对数据X和数据Y之间的第二次乘法运算,由于随机数需要满足特定条件,如果复用a和b,则一定复用c。为了避免整组随机数(a,b,c)全部复用,导致存在破解随机数加密的风险,可以仅仅复用其中的a或b,其他随机数重新生成,得到例如(a,d,e)满足a+d=e;或者(f,b,g)满足f+b=g进行随机数加密。
针对数据X和数据Z之间的第一次乘法运算,则可以重新请求一组随机数;也可以复用上述随机数中的a,重新生成其他随机数,得到(a,x,y)满足a+x=y进行随机数加密。
而针对数据Y和数据Z之间的第一次乘法运算,则可以重新请求一组随机数;也可以复用上述随机数中的b或x;也可以复用上述随机数中的b和x,得到z=b+x,由于z在之前的运算中并未使用过,因此避免在不同运算中使用完全相同的两组随机数。
此外,基于上述方法流程,本说明书还提供另一种可选的实施例,其中每个运行设备可以基于至少两个线程,分担执行目标程序,从而可以提高运行设备的程序执行效率。
其中每个运行设备上的至少两个线程,具体可以是通过分裂线程得到的多个线程。而分裂线程的开销较小,可以忽略不计。
分担执行目标程序,具体可以是分担执行目标程序中的不同任务,例如交互任务、运算任务等等。
为了便于理解,基于上述特定分片运算算法,N个运行设备在运行目标程序时,可能需要交互分片值,可以视为交互任务;也可能需要基于分片值进行运算,可以视为运算任务。
而针对交互任务,在N个运行设备需要针对目标程序中任一变量交互分片值的情况下,分别对本地存储的该变量的分片值进行随机数加密;则目标程序可以包含至少两个用于交互加密后的分片值的交互任务;每个运行设备的至少两个线程可以分担目标程序的不同交互任务。
其中,每个运行设备的至少两个线程中每个线程标识可以由目标程序指定。由于N个运行设备运行的目标程序相同,因此,针对不同运行设备,分担相同交互任务的线程标识也相同。
为了便于理解,下面给出一种示例。
目标程序中针对数据X和数据Y之间的乘法运算,存在交互加密后的分片值的交互任务。基于目标程序,运行设备创建一个线程分担该交互任务,并且指定线程标识为root1。则N个运行设备中的每个运行设备上,都存在标识为root1的线程,并且都分担该交互任务。
同理,针对数据Y和数据Z之间的乘法运算,N个运行设备也基于目标程序创建线程root2分担这一交互任务。
也就是说,不同运行设备之间由目标程序指定的标识相同的线程,分担目标程序中相同的交互任务。
此外,针对不同交互任务,N个运行设备之间可以使用相同的信道交互,也就需要针对交互任务进行区分。
因此,在具体交互时,N个运行设备之间具体可以交互指定数据;指定数据可以包括待交互的变量分片值(即,随机数加密后的分片值)和发送该变量分片值的线程标识,以便于确定其他运行设备中标识相同的线程接收该变量分片值。
指定数据中携带的线程标识用于区分其他设备中分担相同交互任务的线程。
例如,在N个运行设备之间,可以交互包含root1标识的指定数据、以及包含root2标识的指定数据。运行设备在接收到指定数据之后,可以根据指定数据中包含的线程标识,确定对应接收并处理指定数据的线程(即标识相同的线程)。具体可以是运行设备在接收到包含root2标识的指定数据后,由运行设备上标识为root2的线程接收并处理该指定数据。
由于不同运行设备之间由目标程序指定的标识相同的线程,分担目标程序中相同的交互任务,在发送指定数据之前,不同运行设备之间并不需要提前交互需要通信的线程标识,而是可以直接将自身线程的标识作为其他运行设备中接收的线程标识,从而减少网络开销。
此外,由于N个运行设备使用相同的信道,而同一线程可能分担多个交互任务,为了进一步区分同一线程中的不同交互任务,具体指定数据中还可以额外携带顺序标识。
例如,指定数据中除了携带线程标识root1,还可以携带顺序标识3,表示线程root1上的第3个交互任务。其他运行设备在接收到指定数据后,可以根据线程标识确定分担相同交互任务的线程,并进一步确定线程上的第3个交互任务,从而可以将指定数据中的变量分片值用于第3个交互任务,完成运算。
本实施例中,无需提前交互不同运行设备之间、需要通信的两个线程标识,就可以直接确定不同运行设备之间分担相同交互任务的线程(即,其他运行设备中需要通信的线程),减少了网络通信的开销,提高了运行设备的程序运行速度。
为了便于进一步理解,下面提供一种应用实施例。
在一种更为具体的模型训练场景下,存在多个数据持有方共同训练模型以提高训练效果的需求,需要多个数据持有方综合各自的样本数据共同训练模型。具体可以是不同数据持有方存储有不同用户的样本数据,也可以是不同数据持有方存储有相同用户的不同样本特征数据。为了保护信息安全,每个数据持有方都不希望自身所存储的用户样本数据(承载敏感信息)出域,也不希望运行模型训练程序的设备能够获取到明文的用户样本数据。
基于上述方法流程,本实施例中可以通过以下步骤实现。如图5所示,为本说明书提供的一种模型训练程序运行方法的流程示意图。
为了便于描述,将参与模型训练的数据持有方数量确定为N,所需要运行的目标程序为模型训练程序。每个数据持有方提供一个运行设备,存储有数据持有方的用户样本集合,则共存在N个运行设备运行模型训练程序。而模型训练程序成功运行所需要运算的原始数据集合可以包括N个数据持有方的全部用户样本。
S201:N个运行设备分别对本地存储的用户样本进行分片处理,并彼此交互分片处理结果,使得每个运行设备可以获得原始数据集合中每个用户样本的每个特征的分片值,即分片数据集合。
为了便于理解,下面提供两种情况下的示例。
示例一:不同数据持有方存储有不同用户的样本数据。例如,运行设备1存储有用户1的样本数据,包含特征X=a;运行设备2存储有用户2的样本数据,包含特征X=b。
则这两个运行设备对每个样本数据的每个特征进行分片处理,运行设备1得到a1和a2,运行设备2得到b1和b2。经过彼此交互,使得运行设备1中具有分片数据集合{X=a1(用户1),X=b1(用户2)},运行设备2中具有分片数据集合{X=a2,X=b2}。
示例二:不同数据持有方存储有相同用户的不同样本特征数据。例如,运行设备1存储有用户1的样本数据,包含特征X=a;运行设备2存储有用户1的样本数据,包含特征Y=b。
则这两个运行设备对每个样本数据的每个特征进行分片处理,运行设备1得到a1和a2,运行设备2得到b1和b2。经过彼此交互,使得运行设备1中具有分片数据集合{X=a1,Y=b1},运行设备2中具有分片数据集合{X=a2,Y=b2}。
显然,针对横向联邦学习或纵向联邦学习的场景,都可以通过分片处理使得每个运行设备获得原始数据集合中每个用户样本的每个特征的分片值。
S202:每个运行设备基于分片数据集合运行模型训练程序。基于预先配置,多个运行设备的多个基于分片数据集合的程序运行结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的程序运行结果。
其中,模型训练程序可能涉及求导、求和、计算损失、更新参数等运算,而基于上述分析,这些运算都可以拆分成多个基础运算操作,从而可以基于上述特定分片运算算法实现“多个设备的多个基于分片数据集合的程序运行结果在经过逆分片处理后,得到的逆分片处理结果,等于基于原始数据集合的程序运行结果”的效果。
而分片数据集合中,尽管包含了原始数据集合中的全部样本(全部数据),但每个样本中每个特征值都是分片值,不具备任何含义。因此,运行设备也无法获取到用户样本中包含的敏感信息(例如,用户隐私信息)。
S203:指定设备汇总N个运行设备的模型训练程序运行结果,针对N个模型训练程序运行结果进行逆分片处理,并将得到的处理结果作为模型训练程序基于原始数据集合得到的运行结果。
指定设备可以是N个运行设备中的任一运行设备,也可以是N个运行设备之外的任一设备。所得到的逆分片处理结果也就是基于原始数据集合(N个数据持有方的全部用户样本)进行模型训练得到的结果。
其中,N个运行设备中每个运行设备都无法获取到原始数据集合中任一用户样本的明文特征数据,只能获得没有实际含义、且并不包含任何信息(例如敏感信息)的特征数据分片值,基于分片值得到的中间结果也没有实际含义,从而保护了原始数据集合(保护每个数据持有方的用户样本)的数据安全和敏感信息安全。
本说明书还提供了一种系统实施例。
如图6所示,为本说明书提供的一种程序运行系统的结构示意图,其中包括N个运行设备,分别是运行设备1、运行设备2、运行设备3、...、运行设备N。
在该程序运行系统中,可以预先对原始数据集合中每个数据的值进行分片处理,得到每个数据的N个分片值;原始数据集合可以包括用于对程序中变量进行赋值的数据。
还可以预先确定N个分片数据集合;确定每个分片数据集合,可以包括:对原始数据集合中的每个数据,采用该数据的一个分片值进行重新赋值;同一数据在N个分片数据集合中的值与该同一数据的N个分片值一一对应。
此外,通过预先配置,使得针对目标程序对应的每个基础运算单元,将任意一组值输入该基础运算单元进行运算得到的运算结果,等于:将该任意一组值的每组分片值分别输入该基础运算单元进行分别运算后,对得到的全部运算结果进行逆分片处理后得到的处理结果。
而该程序运行系统中的每个运行设备可以用于:在指定情况下基于分片数据集合运行目标程序。
不同基础运算单元的功能是通过调用系统指令集中不同运算指令实现的;系统指令集为,运行设备的操作系统的指令集;预先配置,具体可以包括:针对每个基础运算单元,确定系统指令集中对应于该基础运算单元的运算指令;在操作系统中,配置对应于确定的运算指令的运算逻辑。
其中,N个运行设备分别基于不同的分片数据集合运行目标程序。
指定情况可以包括:N个运行设备分别预定义的变量属性集合之间满足一致性;一个变量属性包括一个变量符号与一个变量数据类型。
在N个运行设备需要针对目标程序中任一变量交互分片值的情况下,每个运行设备还可以用于对本地存储的该变量的分片值进行随机数加密;N个运行设备在分别运行目标程序的过程中,每个运行设备用于:针对目标程序中每个变量,当首次对该变量的分片值进行随机数加密时,向随机数提供方请求一个随机数并分配给该变量;当再次对该变量的分片值进行随机数加密时,复用分配给该变量的随机数。
每个运行设备还可以用于:当对该变量的分片值经过数学变换得到的变换结果进行随机数加密时,复用分配给该变量的随机数。
每个运行设备还可以用于:向随机数提供方请求一个随机数并分配给该变量之后,若该变量的分片值在目标程序中还需要进行至少1次随机数加密,则在本地存储分配给该变量的随机数。当再次对该变量的分片值进行随机数加密时,复用本地存储的分配给该变量的随机数。
在N个运行设备需要针对目标程序中任一变量交互分片值的情况下,每个运行设备还可以用于分别对本地存储的该变量的分片值进行随机数加密;目标程序可以包含至少两个用于交互加密后的分片值的交互任务;每个运行设备的至少两个线程分担目标程序的不同交互任务。
其中,每个运行设备的至少两个线程中每个线程标识由目标程序指定;不同运行设备之间由目标程序指定的标识相同的线程,分担目标程序中相同的交互任务;不同交互任务可以使用相同的信道交互指定数据;指定数据中可以包括待交互的变量分片值和发送该变量分片值的线程标识,以便于确定其他运行设备中标识相同的线程接收该变量分片值。
原始数据集合中的数据可以分布式存储在N个运行设备上;N个运行设备可以具体用于:分别对本地存储的数据值进行分片处理并彼此交互处理结果,使得每个运行设备获得原始数据集合中每个数据的一个分片值。
该程序运行系统还可以包括目标设备;原始数据集合中的数据可以存储在目标设备上;目标设备可以用于:将N个分片数据集合分别发送到N个运行设备。
原始数据集合可以还包括用于对程序中常量进行赋值的数据。
该程序运行系统还可以包括指定设备;指定设备可以用于:接收N个运行设备分别预定义的N个变量属性集合,确定N个变量属性集合所包含的变量属性相同。
运行设备还可以具体用于:接收其他N-1个运行设备分别预定义的N个变量属性集合,确定N个变量属性集合所包含的变量属性相同。
运行设备预定义的符号表中可以至少包括运行设备预定义的变量对应的变量符号、变量数据类型、以及变量取值存储地址;变量属性集合可以包括符号表中的变量符号和变量数据类型。
上述系统实施例的解释可以参见上述方法流程。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护。
- 容错系统、服务器、容错系统的运行方法、服务器的运行方法和服务器的运行方法的程序
- 虚拟应用程序系统、存储设备、虚拟应用程序的运行方法及虚拟环境的保护方法