联邦学习FATE创建自己的组件Component
FATE官网:https://fate.readthedocs.io/en/latest/
FATE-Github:https://github.com/FederatedAI/FATE
具体请参考github
中的doc/develop_guide/component_guide.md
,此处。
1 创建自己组件的文件
在$fate_base/python/fate/components/components
文件夹下创建一个python文件,以新组件命名。
在 学习笔记(一):安装和部署FATE 中,我们使用了PyPI(安装方式1)
安装的FATE
,因此$fate_base
在anaconda下,具体路径如下
Anaconda3/envs/fate_env/lib/python3.8/site-packages/fate/
进入终端并创建文件
vi component_name.py # 名字以创建的组件名命名
2 编写自己的组件文件
这里我以sshe_lr
为例,直接复制fate组件中的sshe_lr
2.1 添加装饰器
# @cpn.component(roles=[$roles], provider="{$provider_source}")
@cpn.component(roles=[GUEST, HOST], provider="fate")
def component_name(ctx, role):
...
将新组件添加到__init__.py
文件中:components/components/__init__.py
,具体如下:
@_lazy_cpn
def component_name(self):
from .component_name import component_name
return component_name
2.2 编写组件代码 (直接复制,具体内容放在后续更新)
实现组件代码编写,
如果组件包含不同阶段,为每个阶段实现不同的输入和输出
@component_name.train()
def train():
...
@component_name.predict()
def predict():
...
3 生成yaml描述文件
进入$fate_client/python/fate_client/pipeline/component_define/fate
目录
注意: 是我们用PyPI安装的fate中的fate_client
文件夹下
运行如下代码
python -m fate.components component desc --name component_name--save component_name.yaml
这行代码会在当前目录下,也就是$fate_client/python/fate_client/pipeline/component_define/fate
目录下创建组件的yaml描述文件。
4 创建并编写定义新租件的python文件
进入$fate_client/python/fate_client/pipeline/component
目录,并创建一个python文件,以 组件名 命名。
直接复制粘贴原有的sshe_lr.py
文件,并更改class名
和参数yaml_define_path
yaml_define_path = "./component_define/fate/component_name.yaml"
并将改文件添加到当前文件夹下的__init__.py
文件中
from .component_name import component_name
5 创建运行python文件并运行
运行文件参考主机安装中的/examples/pipeline/sshe_lr
创建自己的运行文件,并修改导包信息为自己 第4步 中创建的python文件
from fate_client.pipeline.components.fate import component_name
以及下面调用部分的名字
lr_0 = component_name("lr_0",
learning_rate=0.15,
epochs=3,
batch_size=300,
init_param={"fit_intercept": True, "method": "random_uniform"},
train_data=psi_0.outputs["output_data"],
reveal_every_epoch=False,
early_stop="diff",
reveal_loss_freq=1, )
需要注意的是main
函数的参数中config
的文件路径。
具体运行步骤请参考 学习笔记(一):安装和部署FATE
运行结果(因为是复制的,所以结果与examples的结果一样):
输入一下代码,可以查看包含的组件
python -m fate.components component list