2021-04-20

三、开发模式

1、使用可编辑模式,先下载fate_client 和 fate_test

pip install -e ${FATE}/python/fate_client && pip install -e ${FATE}/python/fate_test

2、一些常用的命令

1>suite: used for running testsuites, collection of FATE jobs
用来进行一些testsuites和jobs的测试
fate_test suite -i
指包含testsuite.json文件的绝对路径

2>benchmark-quality used for comparing modeling quality between FATE and other machine learning systems
bq 用来比较fated 的算法模型和其他机器学习模型的好坏
fate_test bq -i
这个路径在 /examples/benchmark_quality 文件夹下

3、进行配置
因为是进行的单机部署,guest 和 host 是同一台机器,所以不需要ssh隧道

9999, service: service_a
10000, service: service_b

得保证service_a 和 service_b能直接通信

Testsuite用于按顺序运行作业集合。用于作业的数据可以在提交作业之前上载,也可以在作业完成后进行清理

1、include:
fate_test suite -i
在path1下运行testsuite

2、exclude:
fate_test suite -i -e -e ...
在path1下运行testsuite,不在path2和path3下运行

3、glob:
fate_test suite -i -g "hetero*"
将在以path1的hetero开始的子目录中运行testsuites

4、replace:
fate_test suite -i -r '{"maxIter": 5}'
将在data conf或conf或dsl中找到所有键-值对,并将值替换为5

5、timeout:
fate_test suite -i -m 3600
将在路径1中运行TestSuite,当作业在3600内未完成时超时;如果任务需要更多时间,就需要使用更大的阈值

6、task-cores
fate_test suite -i -p 4
将在path1中运行testsuites,并将eggroll 的 “task cores”设置为4;注意这仅对DSL conf有效,不适用于pipeline

7、update-job-parameters
fate_test suite -i -j {}
将在path1中运行testsuites,并将相应的作业参数设置为提供的值

8、update-component-parameters
fate_test suite -i -c {}
将在path1中运行testsuites,并将各个组件参数设置为提供的值,注意与上条 -j 的区别,一个是作业参数,一个是组件参数

9、skip-dsl-jobs:
fate_test suite -i --skip-dsl-jobs
将在路径1中运行testsuites,但跳过testsuites中的所有dsl任务。当只需要管道任务时,它会很有用。

10、skip-pipeline-jobs:
fate_test suite -i --skip-pipeline-jobs
将在path1中运行testsuites,但跳过testsuites中的所有管道任务。当只需要dsl任务时,它会很有用。

11、skip-data:
fate_test suite -i --skip-data
将在路径1中运行testsuites,而不上载中指定的数据测试套件.json

12、data only:
fate_test suite -i --data-only
只上传数据,但不运行作业

13、disable-clean-data:
fate_test suite -i --disable-clean-data
作业结束后并不清理数据

14、enable-clean-data:

fate_test suite -i --enable-clean-data
作业结束后清理数据

15、yes:

fate_test suite -i --yes
跳过询问阶段直接运行

由于数据上传出现问题,不如试试不上传数据直接运行
--skip-data


image.png

等了13分钟依然是waiting状态,再看看 fateboard


image.png

image.png

好吧还是上传不了
接着往下看

作业的配置应在文件名以“*testsuite.json”结尾的json文件中指定

一个testsuite应该包含一下几个要素

1、 data: fate任务运行前需要上传的一系列数据

file:要上载的原始数据文件的路径,应该相对于testsuite或安装路径
head:文件是否包含头
partition:数据存储的分区数
table_name:存储中的表名
name_space:存储中的表名称空间
role:上传数据的角色,如中所述测试配置;命名格式为:"{role_type}{role_index}",索引从0开始

例如:
"data": [
    {
        "file": "examples/data/motor_hetero_host.csv",
        "head": 1,
        "partition": 8,
        "table_name": "motor_hetero_host",
        "namespace": "experiment",
        "role": "host_0"
    }
]

2、 task:包括任意数量的作业,其路径指向相应的dsl和conf文件

job:要运行的作业的名称,在每个组列表中必须是唯一的
conf: conf filw的路径,应该是相对于testsuite的
dsl: dsl文件的路径,应该是相对于testsuite的

例如:
"tasks": {
     "cv": {
         "conf": "hetero_lr_cv_conf.json",
         "dsl": "hetero_lr_cv_dsl.json"
     },
     "early-stop": {
         "conf": "hetero_lr_early_stop_conf.json",
         "dsl": "hetero_lr_early_stop_dsl.json"
     }
}

3、pipeline_tasks :包括任意数量的管道作业,其路径指向相应的python脚本

job:要运行的作业的名称,在每个组列表中必须是唯一的
script:管道脚本的路径,应该是相对于testsuite的

"pipeline_tasks": {
     "cv": {
         "script": "pipeline-hetero-lr-cv.py"
     },
     "normal": {
         "script": "pipeline-hetero-lr-early-stop.py"
     }
}

model_deps(deps): 用于预测任务的模型

"tasks": {
     "cv": {
         "conf": "hetero_lr_cv_conf.json",
         "dsl": "hetero_lr_cv_dsl.json"
     },
     "normal": {
         "conf": "hetero_lr_normal_conf.json",
         "dsl": "hetero_lr_normal_dsl.json"
     },
     "predict": {
     "conf": "hetero-lr-normal-predict-conf.json",
     "dsl": "hetero-lr-normal-predict-dsl.json",
     "deps": "normal"
     }
}

dada_deps:组件输出上一个任务的数据,作为当前任务的指定输入(仅用于dsl任务)

"tasks": {
"column-expand": {
    "conf": "./test_column_expand_job_conf.json",
    "dsl": "./test_column_expand_job_dsl.json"
},
"column-expand-train": {
    "conf": "./test_column_expand_train_job_conf.json",
    "dsl": "./test_column_expand_train_job_dsl.json",
    "data_deps": {
        "column-expand": {
            "guest_0": {
                "reader_0": "column_expand_0"
            }
        }
    }
}

Benchmark Quality 基准质量

Benchmark用于比较FATE和其他机器学习系统的建模质量。Benchmark为每个基准作业组生成度量比较摘要。
基准测试还可以比较来自同一脚本/管道作业的不同模型的度量

相关命令与testsuite类似,略

参考https://github.com/FederatedAI/FATE/blob/master/python/fate_test/README.rst

testing script 测试脚本

所有作业脚本都需要有Main函数作为执行作业的入口点;
脚本应该返回两个字典:第一个字典包含数据信息键值对:{data_type}: {data_name_dictionary};第二个字典包含用于度量比较的{metric_name}: {metric_value}键值对

默认情况下,最终数据摘要显示来自名为“FATE”的作业的输出;
如果不存在此类作业,则显示第一个作业返回的数据信息。
为了清晰地表示,建议用户遵循数据集命名的一般指南。如果是多主机任务,请考虑将主机编号为:

{'guest': 'default_credit_homo_guest',
 'host_1': 'default_credit_homo_host_1',
 'host_2': 'default_credit_homo_host_2'}

对同一密钥返回的质量度量进行比较。
注意,只能比较真实值度量。
为了比较来自同一脚本的不同模型的度量,每个模型的度量需要以与上面的常规度量输出相同的格式包装到字典中。

在返回的脚本字典中,使用保留script_metrics来指示要比较的度量集合。

*   FATE script: `Main` should have three inputs:
    *   config: job configuration, [JobConfig](https://github.com/FederatedAI/FATE/blob/master/python/fate_client/pipeline/utils/tools.py#L64) object loaded from "fate_test_config.yaml"
    *   param: job parameter setting, dictionary loaded from "conf" file specified in benchmark testsuite
    *   namespace: namespace suffix, user-given *namespace* or generated timestamp string when using *namespace-mangling*
*   non-FATE script: `Main` should have one or two inputs:
    *   param: job parameter setting, dictionary loaded from "conf" file specified in benchmark testsuite
    *   (optional) config: job configuration, [JobConfig](https://github.com/FederatedAI/FATE/blob/master/python/fate_client/pipeline/utils/tools.py#L64) object loaded from "fate_test_config.yaml"

data

data子命令用于上载、删除和生成数据集
1、include:

fate_test data [upload|delete] -i
将在path1中的TestSuite 中上载/删除数据集

2、exclude:

fate_test data [upload|delete] -i  -e  -e  ...

将上载/删除path1中testsuites中的数据集
但不上载/删除path2和路径3中的数据集

3、glob:

fate_test data [upload|delete] -i  -g "hetero*"

将上载/删除子目录中testsuites中的数据集,从path1的hetero开始

好!有数据上传的命令 我们重新做一下testsuite
首先删除数据
fate_test data [upload|delete] -i/opt/standalone_fate_master_1.5.1/examples/pipeline/hetero_kmeans

fate_test data [upload|delete] -I /opt/standalone_fate_master_1.5.1/examples/pipeline/hetero_kmeans


image.png

然后再手动上传数据


image.png

还是不行
到配置文件中瞅瞅
image.png

会不会是数据集太大?去看看这个.csv


image.png

也不大啊

继续往下看

data 生成命令

1、include:
fate_test data generate -i
将在path1的testsuites中生成数据集;
注意,只需要type和include中的一个

2、host-data-type:
fate_test suite -i -ht {tag-value | dense | tag }
将在testsuites path1中生成数据集,其中主机数据为选定格式

3、sparsity:
fate_test suite -i -s 0.2
将在path1的testsuites中生成稀疏度为0.1的数据集;对标记格式的数据有用

4、encryption-type:
fate_test data generate -i -p {sha256 | md5}
将在路径1的testsuites中使用SHA256方法生成哈希id的数据集

5、match-rate:
fate_test suite -i -m 1.0
将在path1的testsuites中生成数据集,其中生成的host和guest数据的交集率为1.0

6、guest-data-size:
fate_test suite -i -ng 10000
will generate dataset in testsuites path1 where guest data each have 10000 entries

7、host-data-size:

fate_test suite -i -nh 10000
will generate dataset in testsuites path1 where host data have 10000 entries

8、guest-feature-num:

fate_test suite -i -fg 20
will generate dataset in testsuites path1 where guest data have 20 features

9、host-feature-num:

fate_test suite -i -fh 200
will generate dataset in testsuites path1 where host data have 200 features

10、output-path:

fate_test suite -i -o
will generate dataset in testsuites path1 and write file to path2

11、force:

fate_test suite -i -o --force
will generate dataset in testsuites path1 and write file to path2; will overwrite existing file(s) if designated file name found under path2

12、split-host:

fate_test suite -i -nh 10000 --split-host
will generate dataset in testsuites path1; 10000 entries will be divided equally among all host data sets

13、upload-data

fate_test suite -i --upload-data
将在测试套件路径1中生成数据集,并将生成的数据上传到FATE

14、remove-data

fate_test suite -i --remove-data
(effective with upload-data set to True) 在testsuites path1中生成并上载数据集之后,将删除生成的数据

15、use-local-data

fate_test suite -i --use-local-data
(effective with upload-data set to True)
将在TestSuitePath1中生成数据集,并从本地服务器上传数据;如果flow和数据存储部署到同一服务器,请使用此选项

你可能感兴趣的:(2021-04-20)