更新时间:2024-11-20 GMT+08:00
分享

准备数据

(可选)准备MRS Hive数据源

如果您的数据需通rds_02_0008过MRS Hive发布到TICS,则您需要提前准备MRS Hive数据源。

准备数据步骤如下:

  1. 购买MRS服务,操作步骤参考创建集群章节,且MRS服务的VPC必须与计算节点部署节点处于同一个VPC内。

    注意事项:

    • “区域”必须与CCE集群在同一个VPC下。
      图1 区域配置
    • “Kerberos”认证无论是否勾选,当前的MRS Hive连接器都支持。
    • “虚拟私有云”与后续要建立的CCE集群必须在同一个VPC下。
    • “安全组”建议在同一个安全组内且对同组节点开放必要端口。

  2. 准备MRS Hive用户,操作步骤参考准备开发用户。需要注意的是用户必须具有Hive权限以及对应库表的访问权限。

    如果要创建MRS安全集群的数据连接,不能使用admin用户。因为admin用户是默认的管理页面用户,这个用户无法作为安全集群的认证用户来使用。您可以参考以下步骤创建一个新的MRS用户:

    1. 使用admin账号登录MRS Manager页面。
    2. 单击“系统 > 权限 > 角色管理”,选择添加角色,角色名称为“tics_hive_read”,配置角色权限依次单击“集群名 > Hive > Hive读写权限”,勾选后续需要发布的Hive库表的读或者写权限。
      图2 添加角色权限

    3. 登录MRS Manager,在页面的“系统设置”中,单击“用户管理”,在用户管理页面,添加用户,添加一个专有用户作为Kerberos认证用户,并且为这个用户添加用户组和分配角色权限,用户组至少选择Hive组,角色至少要勾选新建的角色(用于访问Hive)和Manager_administrator(用于下载安全认证配置),然后根据页面提示完成用户的创建。
      图3 新建用户

    4. 使用新建的用户登录MRS Manager页面,更新初始密码。

  3. 将数据资源导入MRS中的Hive,操作步骤参考从零开始使用Hive中关于导入数据的描述。
  4. 配置安全组,操作步骤请参考如何配置安全组

    安全组配置示例

    该步骤是为了确保计算节点的部署节点能够与该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)准备数据的步骤:

  1. 购买RDS服务,操作步骤参考购买RDS(MySQL)数据库实例,且RDS服务的VPC必须与计算节点部署节点处于同一个VPC内。

    参数配置注意事项:

    • “区域”必须与后续要建立的CCE集群在同一个区域下。
    • “虚拟私有云”与CCE集群必须在同一个VPC下。
    • “安全组”建议在同一个安全组内且对同组节点开放数据库端口。
    • 当前暂不支持开启“SSL连接”

  2. 准备数据库数据及访问用户,操作步骤参考数据库与用户创建。需要注意的是的访问用户必须具有对应库表的访问权限。
  3. 将数据导入RDS库表中。
  4. 在RDS服务控制台,单击实例名进入RDS实例,在连接管理 -> 安全组规则处配置安全组。确保数据库端口对计算节点开放。

(可选)准备DWS数据源

如果您的数据需通过DWS发布到TICS,则您需要提前准备DWS数据源。

JDBC数据源支持DWS(GaussDB SQL)的连接,目前仅支持默认数据库为postgres的DWS数据源。这里介绍DWS(GaussDB SQL)准备数据的步骤:

  1. 购买DWS服务,选择默认数据库为postgres的数仓,创建DWS集群,操作步骤参考创建DWS集群

    参数配置注意事项:

    • “安全组”建议自动创建安全组,或选择与计算节点在同一个安全组内且对同组节点开放数据库端口。
    • 当前暂不支持开启“SSL连接”。
    • 购买“公网访问”,按照实际带宽需求来进行购买

  2. 准备数据库数据及访问用户。需要注意的是访问用户必须具有对应库表的访问权限。
  3. 将数据导入DWS库表中。
  4. 在DWS服务控制台,单击实例名进入DWS集群详情页面,在“网络 -> 安全组”,检查安全组配置。确保数据库端口对计算节点开放。

(可选)准备API数据源

如果您的数据需通过API发布到TICS,则您需要提交准备API数据源。

  1. 目前API数据源支持基础认证方式。
  2. API数据源可以是GET或者POST请求。
  3. API数据源的返回格式如下,使用json格式

[{"id":"1","x0":"3232","x1":15}]

准备本地横向联邦数据资源

  1. 上传数据集文件(作业参与方)

    上传数据集文件到计算节点挂载路径下,供计算节点执行的脚本读取。如果是主机挂载,上传到宿主机的挂载路径下。如果是OBS挂载,使用华为云提供的对象存储服务,上传到当前计算节点使用的对象桶中。

    图5 对象桶名称

    此处以主机挂载为例:

    1. 创建一个主机挂载的计算节点Agent1,挂载路径为/tmp/tics1/。
    2. 使用文件上传工具上传包含数据集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
    3. 为了使容器内的计算节点程序有权限能够读取到文件,使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组为1000:1000。
    4. 在第二台主机上创建计算节点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
  2. 准备模型文件/初始权重(作业发起方)

    作业发起方需要提供模型、初始权重(非必须),上传到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
  3. 编写训练脚本(作业发起方)

    作业发起方还需要编写联邦学习训练脚本,其中需要用户自行实现读取数据、训练模型、评估模型、获取评估指标的逻辑。计算节点会将数据集配置文件中的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格式的文件。

例如,标签方有30条数据,每条数据有1列ID、7列特征和1列标签:
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
特征方有30条数据,每条数据有1列ID和6列特征:
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
           }]
    }
  }
表1 配置文件参数介绍

参数

介绍

*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文件内容:
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"
     },
  ]
}
表2 配置文件参数介绍

参数

介绍

*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:表示该字段需要脱敏。

相关文档