准备数据
(可选)准备MRS Hive数据源
如果您的数据需通rds_02_0008过MRS Hive发布到TICS,则您需要提前准备MRS Hive数据源。
准备数据步骤如下:
- 购买MRS服务,操作步骤参考创建集群章节,且MRS服务的VPC必须与计算节点部署节点处于同一个VPC内。
注意事项:
- “区域”必须与CCE集群在同一个VPC下。
图1 区域配置
- “Kerberos”认证无论是否勾选,当前的MRS Hive连接器都支持。
- “虚拟私有云”与后续要建立的CCE集群必须在同一个VPC下。
- “安全组”建议在同一个安全组内且对同组节点开放必要端口。
- “区域”必须与CCE集群在同一个VPC下。
- 准备MRS Hive用户,操作步骤参考准备开发用户。需要注意的是用户必须具有Hive权限以及对应库表的访问权限。
如果要创建MRS安全集群的数据连接,不能使用admin用户。因为admin用户是默认的管理页面用户,这个用户无法作为安全集群的认证用户来使用。您可以参考以下步骤创建一个新的MRS用户:
- 使用admin账号登录MRS Manager页面。
- 单击“系统 > 权限 > 角色管理”,选择添加角色,角色名称为“tics_hive_read”,配置角色权限依次单击“集群名 > Hive > Hive读写权限”,勾选后续需要发布的Hive库表的读或者写权限。
图2 添加角色权限
- 登录MRS Manager,在页面的“系统设置”中,单击“用户管理”,在用户管理页面,添加用户,添加一个专有用户作为Kerberos认证用户,并且为这个用户添加用户组和分配角色权限,用户组至少选择Hive组,角色至少要勾选新建的角色(用于访问Hive)和Manager_administrator(用于下载安全认证配置),然后根据页面提示完成用户的创建。
图3 新建用户
- 使用新建的用户登录MRS Manager页面,更新初始密码。
- 将数据资源导入MRS中的Hive,操作步骤参考从零开始使用Hive中关于导入数据的描述。
- 配置安全组,操作步骤请参考如何配置安全组。
安全组配置示例
该步骤是为了确保计算节点的部署节点能够与该MRS集群通信以获取Hive数据。
一种方式是让计算节点与MRS集群的master节点处于同一个安全组。
另一个方式,是配置MRS集群的安全组策略,开放部分端口提供给计算节点。
必须确保互通的ip和端口:
- KrbServer的ip,以及tcp端口21730 和udp端口(21732,21731)
- zookeeper的ip和端口(2181)
- Hive-server的ip和端口(10000)
- MRS Manager的TCP端口(9022)
参考如下:
图4 添加入方向规则
(可选)准备RDS(MySQL)数据源
如果您的数据需通过RDS(MySQL)发布到TICS,则您需要提前准备RDS(MySQL)数据源。
JDBC数据源支持原生MySQL及RDS(MySQL)的连接。这里介绍RDS(MySQL)准备数据的步骤:
- 购买RDS服务,操作步骤参考购买RDS(MySQL)数据库实例,且RDS服务的VPC必须与计算节点部署节点处于同一个VPC内。
参数配置注意事项:
- “区域”必须与后续要建立的CCE集群在同一个区域下。
- “虚拟私有云”与CCE集群必须在同一个VPC下。
- “安全组”建议在同一个安全组内且对同组节点开放数据库端口。
- 当前暂不支持开启“SSL连接”。
- 准备数据库数据及访问用户,操作步骤参考数据库与用户创建。需要注意的是的访问用户必须具有对应库表的访问权限。
- 将数据导入RDS库表中。
- 在RDS服务控制台,单击实例名进入RDS实例,在 处配置安全组。确保数据库端口对计算节点开放。
(可选)准备DWS数据源
如果您的数据需通过DWS发布到TICS,则您需要提前准备DWS数据源。
JDBC数据源支持DWS(GaussDB SQL)的连接,目前仅支持默认数据库为postgres的DWS数据源。这里介绍DWS(GaussDB SQL)准备数据的步骤:
- 购买DWS服务,选择默认数据库为postgres的数仓,创建DWS集群,操作步骤参考创建DWS集群。
参数配置注意事项:
- “安全组”建议自动创建安全组,或选择与计算节点在同一个安全组内且对同组节点开放数据库端口。
- 当前暂不支持开启“SSL连接”。
- 若购买“公网访问”,按照实际带宽需求来进行购买。
- 准备数据库数据及访问用户。需要注意的是访问用户必须具有对应库表的访问权限。
- 将数据导入DWS库表中。
- 在DWS服务控制台,单击实例名进入DWS集群详情页面,在“网络 -> 安全组”,检查安全组配置。确保数据库端口对计算节点开放。
(可选)准备API数据源
如果您的数据需通过API发布到TICS,则您需要提交准备API数据源。
- 目前API数据源支持基础认证方式。
- API数据源可以是GET或者POST请求。
- API数据源的返回格式如下,使用json格式
[{"id":"1","x0":"3232","x1":15}]
准备本地横向联邦数据资源
- 上传数据集文件(作业参与方)
上传数据集文件到计算节点挂载路径下,供计算节点执行的脚本读取。如果是主机挂载,上传到宿主机的挂载路径下。如果是OBS挂载,使用华为云提供的对象存储服务,上传到当前计算节点使用的对象桶中。
图5 对象桶名称
此处以主机挂载为例:
- 创建一个主机挂载的计算节点Agent1,挂载路径为/tmp/tics1/。
- 使用文件上传工具上传包含数据集iris1.csv的dataset文件夹到宿主机/tmp/tics1/目录下。
iris1.csv内容如下:
sepal_length,sepal_width,petal_length,petal_width,class 5.1,3.5,1.4,0.3,Iris-setosa 5.7,3.8,1.7,0.3,Iris-setosa 5.1,3.8,1.5,0.3,Iris-setosa 5.4,3.4,1.7,0.2,Iris-setosa 5.1,3.7,1.5,0.4,Iris-setosa 4.6,3.6,1,0.2,Iris-setosa 5.1,3.3,1.7,0.5,Iris-setosa 4.8,3.4,1.9,0.2,Iris-setosa 5,3,1.6,0.2,Iris-setosa 5,3.4,1.6,0.4,Iris-setosa 5.2,3.5,1.5,0.2,Iris-setosa 5.2,3.4,1.4,0.2,Iris-setosa 4.7,3.2,1.6,0.2,Iris-setosa 4.8,3.1,1.6,0.2,Iris-setosa 5.4,3.4,1.5,0.4,Iris-setosa 5.2,4.1,1.5,0.1,Iris-setosa 5.5,4.2,1.4,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa 5,3.2,1.2,0.2,Iris-setosa 5.5,3.5,1.3,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa 4.4,3,1.3,0.2,Iris-setosa 5.1,3.4,1.5,0.2,Iris-setosa 5,3.5,1.3,0.3,Iris-setosa 4.5,2.3,1.3,0.3,Iris-setosa 4.4,3.2,1.3,0.2,Iris-setosa 5,3.5,1.6,0.6,Iris-setosa 5.1,3.8,1.9,0.4,Iris-setosa 4.8,3,1.4,0.3,Iris-setosa 5.1,3.8,1.6,0.2,Iris-setosa 4.6,3.2,1.4,0.2,Iris-setosa 5.3,3.7,1.5,0.2,Iris-setosa 5,3.3,1.4,0.2,Iris-setosa 6.8,2.8,4.8,1.4,Iris-versicolor 6.7,3,5,1.7,Iris-versicolor 6,2.9,4.5,1.5,Iris-versicolor 5.7,2.6,3.5,1,Iris-versicolor 5.5,2.4,3.8,1.1,Iris-versicolor 5.5,2.4,3.7,1,Iris-versicolor 5.8,2.7,3.9,1.2,Iris-versicolor 6,2.7,5.1,1.6,Iris-versicolor 5.4,3,4.5,1.5,Iris-versicolor 6,3.4,4.5,1.6,Iris-versicolor 6.7,3.1,4.7,1.5,Iris-versicolor 6.3,2.3,4.4,1.3,Iris-versicolor 5.6,3,4.1,1.3,Iris-versicolor 5.5,2.5,4,1.3,Iris-versicolor 5.5,2.6,4.4,1.2,Iris-versicolor 6.1,3,4.6,1.4,Iris-versicolor 5.8,2.6,4,1.2,Iris-versicolor 5,2.3,3.3,1,Iris-versicolor 5.6,2.7,4.2,1.3,Iris-versicolor 5.7,3,4.2,1.2,Iris-versicolor 5.7,2.9,4.2,1.3,Iris-versicolor 6.2,2.9,4.3,1.3,Iris-versicolor 5.1,2.5,3,1.1,Iris-versicolor 5.7,2.8,4.1,1.3,Iris-versicolor 6.3,3.3,6,2.5,Iris-virginica 5.8,2.7,5.1,1.9,Iris-virginica 7.1,3,5.9,2.1,Iris-virginica 6.3,2.9,5.6,1.8,Iris-virginica 6.5,3,5.8,2.2,Iris-virginica 7.6,3,6.6,2.1,Iris-virginica 4.9,2.5,4.5,1.7,Iris-virginica 7.3,2.9,6.3,1.8,Iris-virginica 6.7,2.5,5.8,1.8,Iris-virginica 7.2,3.6,6.1,2.5,Iris-virginica 6.5,3.2,5.1,2,Iris-virginica 6.4,2.7,5.3,1.9,Iris-virginica 6.8,3,5.5,2.1,Iris-virginica 5.7,2.5,5,2,Iris-virginica 5.8,2.8,5.1,2.4,Iris-virginica 6.4,3.2,5.3,2.3,Iris-virginica 6.5,3,5.5,1.8,Iris-virginica 7.7,3.8,6.7,2.2,Iris-virginica 7.7,2.6,6.9,2.3,Iris-virginica 6,2.2,5,1.5,Iris-virginica 6.9,3.2,5.7,2.3,Iris-virginica 5.6,2.8,4.9,2,Iris-virginica 7.7,2.8,6.7,2,Iris-virginica 6.3,2.7,4.9,1.8,Iris-virginica 6.7,3.3,5.7,2.1,Iris-virginica 7.2,3.2,6,1.8,Iris-virginica
- 为了使容器内的计算节点程序有权限能够读取到文件,使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组为1000:1000。
- 在第二台主机上创建计算节点Agent2,挂载路径为/tmp/tics2/。上传包含数据集iris2.csv的dataset文件夹到宿主机目录下,修改属主。
iris2.csv的内容如下:
sepal_length,sepal_width,petal_length,petal_width,class 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5,3.6,1.4,0.2,Iris-setosa 5.4,3.9,1.7,0.4,Iris-setosa 4.6,3.4,1.4,0.3,Iris-setosa 5,3.4,1.5,0.2,Iris-setosa 4.4,2.9,1.4,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa 5.4,3.7,1.5,0.2,Iris-setosa 4.8,3.4,1.6,0.2,Iris-setosa 4.8,3,1.4,0.1,Iris-setosa 4.3,3,1.1,0.1,Iris-setosa 5.8,4,1.2,0.2,Iris-setosa 5.7,4.4,1.5,0.4,Iris-setosa 5.4,3.9,1.3,0.4,Iris-setosa 7,3.2,4.7,1.4,Iris-versicolor 6.4,3.2,4.5,1.5,Iris-versicolor 6.9,3.1,4.9,1.5,Iris-versicolor 5.5,2.3,4,1.3,Iris-versicolor 6.5,2.8,4.6,1.5,Iris-versicolor 5.7,2.8,4.5,1.3,Iris-versicolor 6.3,3.3,4.7,1.6,Iris-versicolor 4.9,2.4,3.3,1,Iris-versicolor 6.6,2.9,4.6,1.3,Iris-versicolor 5.2,2.7,3.9,1.4,Iris-versicolor 5,2,3.5,1,Iris-versicolor 5.9,3,4.2,1.5,Iris-versicolor 6,2.2,4,1,Iris-versicolor 6.1,2.9,4.7,1.4,Iris-versicolor 5.6,2.9,3.6,1.3,Iris-versicolor 6.7,3.1,4.4,1.4,Iris-versicolor 5.6,3,4.5,1.5,Iris-versicolor 5.8,2.7,4.1,1,Iris-versicolor 6.2,2.2,4.5,1.5,Iris-versicolor 5.6,2.5,3.9,1.1,Iris-versicolor 5.9,3.2,4.8,1.8,Iris-versicolor 6.1,2.8,4,1.3,Iris-versicolor 6.3,2.5,4.9,1.5,Iris-versicolor 6.1,2.8,4.7,1.2,Iris-versicolor 6.4,2.9,4.3,1.3,Iris-versicolor 6.6,3,4.4,1.4,Iris-versicolor 6.8,2.8,4.8,1.4,Iris-versicolor 6.2,2.8,4.8,1.8,Iris-virginica 6.1,3,4.9,1.8,Iris-virginica 6.4,2.8,5.6,2.1,Iris-virginica 7.2,3,5.8,1.6,Iris-virginica 7.4,2.8,6.1,1.9,Iris-virginica 7.9,3.8,6.4,2,Iris-virginica 6.4,2.8,5.6,2.2,Iris-virginica 6.3,2.8,5.1,1.5,Iris-virginica 6.1,2.6,5.6,1.4,Iris-virginica 7.7,3,6.1,2.3,Iris-virginica 6.3,3.4,5.6,2.4,Iris-virginica 6.4,3.1,5.5,1.8,Iris-virginica 6,3,4.8,1.8,Iris-virginica 6.9,3.1,5.4,2.1,Iris-virginica 6.7,3.1,5.6,2.4,Iris-virginica 6.9,3.1,5.1,2.3,Iris-virginica 5.8,2.7,5.1,1.9,Iris-virginica 6.8,3.2,5.9,2.3,Iris-virginica 6.7,3.3,5.7,2.5,Iris-virginica 6.7,3,5.2,2.3,Iris-virginica 6.3,2.5,5,1.9,Iris-virginica 6.5,3,5.2,2,Iris-virginica 6.2,3.4,5.4,2.3,Iris-virginica 5.9,3,5.1,1.8,Iris-virginica
- 准备模型文件/初始权重(作业发起方)
作业发起方需要提供模型、初始权重(非必须),上传到Agent1的挂载目录下并使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组。
使用python代码创建模型文件,保存为二进制文件model.h5,以鸢尾花为例,生成如下的模型:
import tensorflow as tf import keras model = keras.Sequential([ keras.layers.Dense(4, activation=tf.nn.relu, input_shape=(4,)), keras.layers.Dense(6, activation=tf.nn.relu), keras.layers.Dense(3, activation='softmax') ]) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.save("d:/model.h5")
初始权重的格式是浮点数的数组,与模型对应。使用联邦学习训练出来的结果result_1可以作为初始权重,样例如下:
-0.23300957679748535,0.7804553508758545,0.0064492723904550076,0.5866460800170898,0.676144003868103,-0.7883696556091309,0.5472091436386108,-0.20961782336235046,0.58524489402771,-0.5079598426818848,-0.47474920749664307,-0.3519996106624603,-0.10822880268096924,-0.5457949042320251,-0.28117161989212036,-0.7369481325149536,-0.04728877171874046,0.003856887575238943,0.051739662885665894,0.033792052417993546,-0.31878742575645447,0.7511205673217773,0.3158722519874573,-0.7290999293327332,0.7187696695327759,0.09846954792737961,-0.06735057383775711,0.7165604829788208,-0.730293869972229,0.4473201036453247,-0.27151209115982056,-0.6971480846405029,0.7360773086547852,0.819558322429657,0.4984433054924011,0.05300116539001465,-0.6597640514373779,0.7849202156066895,0.6896201372146606,0.11731931567192078,-0.5380218029022217,0.18895208835601807,-0.18693888187408447,0.357051283121109,0.05440644919872284,0.042556408792734146,-0.04341210797429085,0.0,-0.04367709159851074,-0.031455427408218384,0.24731603264808655,-0.062861368060112,-0.4265706539154053,0.32981523871421814,-0.021271884441375732,0.15228557586669922,0.1818728893995285,0.4162319302558899,-0.22432318329811096,0.7156463861465454,-0.13709741830825806,0.7237883806228638,-0.5489991903305054,0.47034209966659546,-0.04692812263965607,0.7690137028694153,0.40263476967811584,-0.4405142068862915,0.016018997877836227,-0.04845477640628815,0.037553105503320694
- 编写训练脚本(作业发起方)
作业发起方还需要编写联邦学习训练脚本,其中需要用户自行实现读取数据、训练模型、评估模型、获取评估指标的逻辑。计算节点会将数据集配置文件中的path属性作为参数传递给训练脚本。
JobParam属性如下:
class JobParam: """训练脚本参数 """ # 作业id job_id = '' # 当前轮数 round = 0 # 迭代次数 epoch = 0 # 模型文件路径 model_file = '' # 数据集路径 dataset_path = '' # 是否仅做评估 eval_only = False # 权重文件 weights_file = '' # 输出路径 output = '' # 其他参数json字符串 param = ''
鸢尾花的训练脚本iris_train.py样例如下:
# -*- coding: utf-8 -*- import getopt import sys import keras import horizontal.horizontallearning as hl def train(): # 解析命令行输入 jobParam = JobParam() jobParam.parse_from_command_line() job_type = 'evaluation' if jobParam.eval_only else 'training' print(f"Starting round {jobParam.round} {job_type}") # 加载模型,设置初始权重参数 model = keras.models.load_model(jobParam.model_file) hl.set_model_weights(model, jobParam.weights_file) # 加载数据、训练、评估 -- 用户自己实现 print(f"Load data {jobParam.dataset_path}") train_x, test_x, train_y, test_y, class_dict = load_data(jobParam.dataset_path) if not jobParam.eval_only: b_size = 1 model.fit(train_x, train_y, batch_size=b_size, epochs=jobParam.epoch, shuffle=True, verbose=1) print(f"Training job [{jobParam.job_id}] finished") eval = model.evaluate(test_x, test_y, verbose=0) print("Evaluation on test data: loss = %0.6f accuracy = %0.2f%% \n" % (eval[0], eval[1] * 100)) # 结果以json格式保存 -- 用户读取评估指标 result = {} result['loss'] = eval[0] result['accuracy'] = eval[1] # 生成结果文件 hl.save_train_result(jobParam, model, result) # 读取CSV数据集,并拆分为训练集和测试集 # 该函数的传入参数为CSV_FILE_PATH: csv文件路径 def load_data(CSV_FILE_PATH): import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelBinarizer # 读取目录数据集,读取目录下所有CSV文件 if os.path.isdir(CSV_FILE_PATH): print(f'read file folder [{CSV_FILE_PATH}]') all_csv_path = glob.glob(os.path.join(CSV_FILE_PATH, '*.csv')) all_csv_path.sort() csv_list = [] for csv_path in all_csv_path: csv_list.append(pd.read_csv(csv_path)) IRIS = pd.concat(csv_list) # 读取CSV文件 else: IRIS = pd.read_csv(CSV_FILE_PATH) target_var = 'class' # 目标变量 # 数据集的特征 features = list(IRIS.columns) features.remove(target_var) # 目标变量的类别 Class = IRIS[target_var].unique() # 目标变量的类别字典 Class_dict = dict(zip(Class, range(len(Class)))) # 增加一列target, 将目标变量进行编码 IRIS['target'] = IRIS[target_var].apply(lambda x: Class_dict[x]) # 对目标变量进行0-1编码(One-hot Encoding) lb = LabelBinarizer() lb.fit(list(Class_dict.values())) transformed_labels = lb.transform(IRIS['target']) y_bin_labels = [] # 对多分类进行0-1编码的变量 for i in range(transformed_labels.shape[1]): y_bin_labels.append('y' + str(i)) IRIS['y' + str(i)] = transformed_labels[:, i] # 将数据集分为训练集和测试集 train_x, test_x, train_y, test_y = train_test_split(IRIS[features], IRIS[y_bin_labels], train_size=0.7, test_size=0.3, random_state=0) return train_x, test_x, train_y, test_y, Class_dict class JobParam: """训练脚本参数 """ # required parameters job_id = '' round = 0 epoch = 0 model_file = '' dataset_path = '' eval_only = False # optional parameters weights_file = '' output = '' param = '' def parse_from_command_line(self): """从命令行中解析作业参数 """ opts, args = getopt.getopt(sys.argv[1:], 'hn:w:', ['round=', 'epoch=', 'model_file=', 'eval_only', 'dataset_path=', 'weights_file=', 'output=', 'param=', 'job_id=']) for key, value in opts: if key in ['--round']: self.round = int(value) if key in ['--epoch']: self.epoch = int(value) if key in ['--model_file']: self.model_file = value if key in ['--eval_only']: self.eval_only = True if key in ['--dataset_path']: self.dataset_path = value if key in ['--weights_file']: self.weights_file = value if key in ['--output']: self.output = value if key in ['--param']: self.param = value if key in ['--job_id']: self.job_id = value if __name__ == '__main__': train()
准备本地纵向联邦数据资源
纵向联邦学习的数据方分为标签方(数据集中有标签列的一方)和特征方(数据集中没有标签列的一方),目前仅支持CSV格式的文本文件,以及包含CSV文本的数据目录。目录数据集下必须至少包含一个CSV文件,且多个CSV文件表头结果必须保持一致。以下示例中如果没有特别说明,一般都是CSV格式的文件。
ID,f1,f2,f3,f4,f5,f6,f7,LABEL 0,2,7,27,92,950,1128,1139,1 1,2,8,17,157,763,1127,1140,1 2,1,9,12,48,846,1129,1131,1 3,2,8,28,113,1119,1126,1136,0 4,1,6,37,313,762,1127,1132,1 5,2,6,28,329,718,1128,1136,1 6,2,6,29,114,592,1127,1140,1 7,2,7,26,153,927,1127,1132,1 8,2,10,28,161,1000,1127,1136,0 9,2,8,30,117,762,1127,1140,1 10,2,8,23,176,841,1126,1136,0 11,1,10,23,176,928,1127,1140,1 12,2,8,23,53,624,1126,1136,1 13,1,8,23,70,455,1126,1140,1 14,2,10,17,177,791,1126,1138,1 15,2,7,29,156,429,1128,1131,0 16,2,6,28,304,999,1127,1140,1 17,2,7,12,48,446,1126,1136,1 18,2,6,27,372,1000,1127,1131,0 19,1,8,20,343,1106,1128,1131,0 20,2,8,38,301,1039,1128,1136,0 21,1,8,30,134,768,1128,1139,0 22,2,7,26,294,636,1129,1140,1 23,1,7,16,101,944,1127,1136,0 24,2,8,11,43,834,1129,1140,0 25,2,7,32,175,1040,1129,1136,0 26,1,7,22,196,787,1127,1136,1 27,1,10,29,74,555,1127,1131,0 28,1,8,21,364,984,1128,1140,1 29,2,8,15,85,718,1128,1140,1
ID,f8,f9,f10,f11,f12,f13 0,20,642,1559,1864,1877,2617 1,67,341,1158,1872,1878,2616 2,28,522,1400,1857,1876,2627 3,50,593,1505,1866,1877,2549 4,57,196,1006,1873,1877,2632 5,50,99,907,1866,1877,2313 6,67,348,1165,1872,1878,2627 7,57,132,940,1873,1877,2628 8,50,401,1248,1866,1877,2933 9,67,336,1152,1872,1878,2632 10,50,394,1241,1866,1877,2057 11,67,448,1303,1872,1878,2627 12,50,221,1033,1866,1877,1975 13,11,113,921,1872,1877,2632 14,14,305,1118,1865,1877,2627 15,61,628,1542,1857,1876,2627 16,67,341,1158,1872,1878,2616 17,50,603,1515,1866,1877,2617 18,62,320,1135,1857,1876,2627 19,28,205,1015,1857,1876,2617 20,50,160,968,1866,1877,2064 21,42,418,1269,1864,1877,2630 22,36,235,1047,1859,1877,2616 23,50,97,905,1866,1877,2064 24,1,191,1001,1874,1878,2837 25,50,226,1038,1866,1877,1930 26,50,391,1238,1866,1877,1936 27,56,565,1456,1857,1876,2627 28,71,513,1383,1872,1878,2617 29,67,336,1152,1872,1878,2634
参考准备本地横向联邦数据资源 -> 上传数据集文件,将该文件上传到两个不同计算节点的挂载路径下,即完成纵向联邦数据集配置。
如果数据集文件不含有csv文件表头,需要用户提供额外的配置文件用来说明数据集每一列的信息。示例如下:
0,20,642,1559,1864,1877,2617 1,67,341,1158,1872,1878,2616 2,28,522,1400,1857,1876,2627 3,50,593,1505,1866,1877,2549 4,57,196,1006,1873,1877,2632 5,50,99,907,1866,1877,2313 6,67,348,1165,1872,1878,2627 7,57,132,940,1873,1877,2628 8,50,401,1248,1866,1877,2933 9,67,336,1152,1872,1878,2632 10,50,394,1241,1866,1877,2057 11,67,448,1303,1872,1878,2627 12,50,221,1033,1866,1877,1975 13,11,113,921,1872,1877,2632 14,14,305,1118,1865,1877,2627 15,61,628,1542,1857,1876,2627 16,67,341,1158,1872,1878,2616 17,50,603,1515,1866,1877,2617 18,62,320,1135,1857,1876,2627 19,28,205,1015,1857,1876,2617 20,50,160,968,1866,1877,2064 21,42,418,1269,1864,1877,2630 22,36,235,1047,1859,1877,2616 23,50,97,905,1866,1877,2064 24,1,191,1001,1874,1878,2837 25,50,226,1038,1866,1877,1930 26,50,391,1238,1866,1877,1936 27,56,565,1456,1857,1876,2627 28,71,513,1383,1872,1878,2617 29,67,336,1152,1872,1878,2634
为尽可能说明配置文件(.json)中的各参数写法,典型示例如下,其中参数介绍如表1所示。
{ "schema": [ { "column_name": "id", "data_type": "INTEGER", "is_unique_id": true, "column_sensitive_level": "SENSITIVE", "feature_type": "CONTINUOUS", "privacy_policy": "NONE", "comments": "id_Description" }, { "column_name": "x0", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "SENSITIVE", "feature_type": "CONTINUOUS", "privacy_policy": "NONE" }, { "column_name": "x1", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "feature_type": "DISCRETE", "privacy_policy": "NONE" }, { "column_name": "x2", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "feature_type": "MULTIHOT", "privacy_policy": "MASK" }, { "column_name": "x3", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "feature_type": "MULTIHOT", "privacy_policy": "NONE" }, { "column_name": "x4", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "feature_type": "MULTIHOT", "privacy_policy": "NONE" }, { "column_name": "x5", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "feature_type": "MULTIHOT", "privacy_policy": "NONE" }, { "column_name": "x6", "data_type": "FLOAT", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "feature_type": "CONTINUOUS", "privacy_policy": "NONE" } ], "ext": { "multihot_settings": [{ "features": ["x2", "x3"], "field_size": 30 }, { "features": ["x4", "x5"], "field_size": 25 }] } }
参数 |
介绍 |
---|---|
*column_name |
必选参数,字段名称。 |
*data_type |
必选参数,字段类型。 当前支持的取值为:INTEGER、FLOAT、STRING。 |
is_unique_id |
true:表示该字段为唯一标识。 false:表示该字段为非唯一标识。 |
column_sensitive_level |
SENSITIVE:表示该字段敏感。 NON_SENSITIVE:表示该字段非敏感。 |
feature_type |
CONTINUOUS:表示该字段特征类型为连续。 DISCRETE:表示该字段特征类型为离散。 MULTIHOT:表示该字段特征类型为MULTIHOT。当数据集需要配置MULTIHOT分组时,配置文件需要添加ext字段,补充multihot_settings信息。 |
privacy_policy |
NONE:表示该字段不需要脱敏。 MASK:表示该字段需要脱敏。 |
如果数据集文件不包含ID,该数据集将不能进行样本对齐,且特征选择、联邦训练、评估时会校验特征方、标签方的数据量是否相等,若不相等作业会报错。用户可以提供额外的数据ID文件用来说明数据每一行的ID。以上述特征数据集为例,有表头没有ID的数据集文件和数据ID文件格式如下:
f8,f9,f10,f11,f12,f13 20,642,1559,1864,1877,2617 67,341,1158,1872,1878,2616 28,522,1400,1857,1876,2627 50,593,1505,1866,1877,2549 57,196,1006,1873,1877,2632 50,99,907,1866,1877,2313 67,348,1165,1872,1878,2627 57,132,940,1873,1877,2628 50,401,1248,1866,1877,2933 67,336,1152,1872,1878,2632 50,394,1241,1866,1877,2057 67,448,1303,1872,1878,2627 50,221,1033,1866,1877,1975 11,113,921,1872,1877,2632 14,305,1118,1865,1877,2627 61,628,1542,1857,1876,2627 67,341,1158,1872,1878,2616 50,603,1515,1866,1877,2617 62,320,1135,1857,1876,2627 28,205,1015,1857,1876,2617 50,160,968,1866,1877,2064 42,418,1269,1864,1877,2630 36,235,1047,1859,1877,2616 50,97,905,1866,1877,2064 1,191,1001,1874,1878,2837 50,226,1038,1866,1877,1930 50,391,1238,1866,1877,1936 56,565,1456,1857,1876,2627 71,513,1383,1872,1878,2617 67,336,1152,1872,1878,2634
id 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
准备本地多方安全计算数据资源
本地多方安全计算数据目前仅支持csv格式的文本文件。以下示例中如果没有特别说明,一般都是CSV格式的文件。
例如,数据表中有三列字段:
employee_id,name,salary 491915,tony,5000 491916,mark,7000 491917,jack,9000 491918,tom,9000 491919,hony,9000 500000,jim,20000 500001,tom,9000 500002,hony,9000
参考准备本地横向联邦数据资源 -> 上传数据集文件,将该文件上传到计算节点的挂载路径下,即完成多方安全计算数据集配置。
如果数据集文件不含有csv文件表头,需要用户提供额外的配置文件用来说明数据集每一列的信息。以上述标签方数据集为例,没有表头的数据集文件和数据配置文件的格式如下:
491915,tony,5000 491916,mark,7000 491917,jack,9000 491918,tom,9000 491919,hony,9000 500000,jim,20000 500001,tom,9000 500002,hony,9000
配置文件(.json):
{ "schema": [ { "column_name": "employee_id", "data_type": "STRING", "is_unique_id": true, "column_sensitive_level": "SENSITIVE", "privacy_policy": "NONE" }, { "column_name": "name", "data_type": "STRING", "is_unique_id": false, "column_sensitive_level": "NON_SENSITIVE", "privacy_policy": "MASK" }, { "column_name": "salary", "data_type": "INTEGER", "is_unique_id": false, "column_sensitive_level": "SENSITIVE", "privacy_policy": "NONE" }, ] }
参数 |
介绍 |
---|---|
*column_name |
必选参数,字段名称。 |
*data_type |
必选参数,字段类型。 当前支持的取值为:INTEGER、FLOAT、STRING。 |
is_unique_id |
true:表示该字段为唯一标识。 false:表示该字段为非唯一标识。 |
column_sensitive_level |
SENSITIVE:表示该字段敏感。 NON_SENSITIVE:表示该字段非敏感。 |
feature_type |
CONTINUOUS:表示该字段特征类型为连续。 DISCRETE:表示该字段特征类型为离散。 MULTIHOT:表示该字段特征类型为MULTIHOT。当数据集需要配置MULTIHOT分组时,配置文件需要添加ext字段,补充multihot_settings信息。 |
privacy_policy |
NONE:表示该字段不需要脱敏。 MASK:表示该字段需要脱敏。 |