FATE 2.0 Hetero NN Pipeline 实战指南:基于 FedPass 与 SSHE 的纵向联邦神经网络

发布时间:2026/10/12 5:20:02

FATE 2.0 Hetero NN Pipeline 实战指南:基于 FedPass 与 SSHE 的纵向联邦神经网络 人工智能机器学习联邦学习深度学习分布式训练隐私计算密码学【免费下载链接】FATEAn Industrial Grade Federated Learning Framework项目地址https://gitcode.com/gh_mirrors/fa/FATE点击查看免费下载导读本文围绕 examples/pipeline/hetero_nn 目录下的官方 Pipeline 示例系统讲解在 FATE 2.0 中如何通过 FATE-Pipeline 搭建纵向联邦神经网络Hetero NN任务并重点剖析两种隐私保护策略——FedPass自适应混淆与SSHE同态加密结合安全共享——在聚合层中的配置方式与底层实现。读完本文你将掌握从数据上传、Pipeline 任务编排、模型与训练参数配置到结果评估的完整实操链路并能根据业务场景在 FedPass 与 SSHE 之间做出合理选型。一、Hetero NN Pipeline 示例总览1.1 示例任务构成examples/pipeline/hetero_nn目录下提供了两类纵向联邦神经网络任务的 Pipeline 脚本其任务类型由 README.md 明确列出任务类型隐私保护策略对应脚本NN with FedPass基于 DNN Passport 的自适应混淆test_nn_binary_fedpass.pyNN with SSHE同态加密 安全共享test_nn_binary_sshe.py两个脚本都是**二分类binary**任务使用相同的乳腺肿瘤数据集guest 侧breast_hetero_guest.csv、host 侧breast_hetero_host.csv区别在于聚合层的隐私保护方案不同。用户可以直接以一行命令运行任意一个 Pipeline 作业python ${pipeline_script}例如python test_nn_binary_fedpass.py python test_nn_binary_sshe.py脚本默认从../config.yaml读取集群参与方配置也可以通过--config参数指定其他配置文件通过--namespace指定数据在 FATE 中的命名空间。1.2 配套的测试套件与数据配置该目录下的 hetero_nn_testsuite.yaml 是供 FATE-Test 测试框架使用的套件配置其中定义了数据上传配置data段将 breast_hetero_guest.csv 以guest_0角色、breast_hetero_host.csv 以host_0角色上传到 FATE任务映射tasks段hetero-nn-binary-sshe与hetero-nn-binary-fedpass分别映射到两个测试脚本。数据段的元数据配置直接决定了上传到 FATE 的表的格式其中几个关键项说明如下配置项示例值作用meta.delimiter,CSV 字段分隔符meta.dtypefloat64特征数据类型meta.input_formatdense输入格式稠密格式meta.label_type/meta.label_nameint64/y标签类型与标签列名guest 数据独有meta.match_id_name/meta.match_id_rangeid/0参与方间样本对齐的匹配 ID 列名及其起始范围meta.tag_with_value/meta.tag_value_delimiterfalse/:是否携带标签值及其分隔符meta.weight_typefloat64样本权重数据类型partitions4表的分区数headtrue首行为表头extend_sidtrue自动扩展样本 IDtable_name/namespacebreast_hetero_guest/experiment表名与命名空间供后续 Reader 组件引用roleguest_0/host_0数据归属角色注意hetero_nn_testsuite.yaml中的namespace为experiment而测试脚本中 Reader 组件读取时使用namespacefexperiment{namespace}两者通过脚本的--namespace参数保持一致默认空字符串时即为experiment。1.3 参与方配置两个脚本默认读取 examples/pipeline/config.yaml其参与方声明如下parties: guest: - 9999 host: - 10000 - 9999 arbiter: - 10000 data_base_dir: # path to project base where data is located在示例脚本中仅使用第一个 guest9999和第一个 host10000FedPass 脚本额外配置了 arbiter10000。data_base_dir用于指定数据所在的项目根目录为空时表示数据路径直接使用相对仓库根目录的路径。二、FedPass 任务test_nn_binary_fedpass.py 深度解析2.1 FedPass 策略原理FedPass 是一种不依赖同态加密与安全共享的隐私保护策略其核心思想是把私人护照private passports嵌入神经网络实现自适应混淆adaptive obfuscation。具体做法是在网络中插入 passport layer该层利用模型参数与私人护照动态调整 scale 因子与 bias 项再经过自编码器与平均化处理从而混淆前向的隐藏特征与反向传播的梯度。其特性在 doc/2.0/fate/components/hetero_nn.md 中被归纳为三点隐私保护攻击者在没有护照的情况下极难从输出反推输入保持模型性能混淆参数通过反向传播随模型一起优化相比固定混淆方式性能更优速度接近明文训练无需同态加密或安全共享训练速度几乎与明文训练相当。在 FATE 2.0 中FedPass 策略可同时作用于guest 的 top model与host 的 bottom modelhost 通过agglayer_arg配置guest 通过top_arg配置。2.2 脚本结构与任务编排test_nn_binary_fedpass.py的完整 Pipeline 由 5 个任务组成编排顺序如下reader_0Reader 读取双方数据 → psi_0PSI 样本对齐 → hetero_nn_0训练 → hetero_nn_1用训练好的模型预测 → evaluation_0AUC 评估pipeline.add_tasks([reader_0, psi_0, hetero_nn_0, hetero_nn_1, evaluation_0]) pipeline.compile() pipeline.fit()其中reader_0Reader组件分别读取 guest 的breast_hetero_guest表与 host 的breast_hetero_host表命名空间experiment{namespace}psi_0PSI组件对双方数据做隐私求交产出共同样本集合output_datahetero_nn_0以train_data为输入执行训练输出output_modelhetero_nn_1以test_data为输入、input_modelhetero_nn_0.outputs[output_model]加载训练好的模型执行预测输出test_output_dataevaluation_0Evaluation组件在 guest 侧以auc为指标同时评估训练输出与测试输出的效果evaluation_0 Evaluation( eval_0, runtime_partiesdict(guestguest), metrics[auc], input_datas[hetero_nn_1.outputs[test_output_data], hetero_nn_0.outputs[train_output_data]] )作业结束后通过pipeline.get_task_info(eval_0).get_output_metric()[0][data]获取并打印评估结果。2.3 训练超参与优化器配置两个脚本都通过TrainingArguments源自 HuggingFace transformers 的训练参数体系配置训练过程training_args TrainingArguments( num_train_epochs1, per_device_train_batch_size16, logging_strategyepoch )num_train_epochs训练轮数FedPass 示例为 1SSHE 示例也为 1per_device_train_batch_size单设备批大小FedPass 为 16SSHE 为 256logging_strategy日志输出策略epoch表示每轮输出一次SSHE 示例还额外设置了log_leveldebug。从 hetero_default_runner.py 的实现看training_args最终会传入transformers.TrainingArguments且output_dir由 runner 自动接管为组件输出目录同时支持 checkpoint 断点续训resume_from_checkpoint。2.4 Guest 与 Host 的模型配置FedPass 示例通过get_config_of_default_runner分别为 guest 与 host 构造 runner 配置。Guest 侧持有标签与 10 个特征guest_conf get_config_of_default_runner( bottom_modelnn.Linear(10, 10), top_modelSequential( nn.Linear(10, 1), nn.Sigmoid() ), training_argstraining_args, optimizeroptim.Adam(lr0.01), lossnn.BCELoss() )guest 同时拥有 bottom modelLinear(10, 10)负责处理自身 10 维特征与 top modelLinear(10, 1) Sigmoid负责输出二分类概率损失函数采用二分类交叉熵BCELoss。Host 侧无标签持有 20 个特征聚合层启用 FedPasshost_conf get_config_of_default_runner( bottom_modelnn.Linear(20, 20), optimizeroptim.Adam(lr0.01), training_argstraining_args, agglayer_argFedPassArgument( layer_typelinear, in_channels_or_features20, hidden_features20, out_channels_or_features10, passport_modesingle, passport_distributegaussian ) )host 只有 bottom modelLinear(20, 20)其输出经过 FedPass 聚合层后再与 guest 侧特征融合。FedPassArgument的参数说明默认值见 hetero_nn_model.py 中的FedPassArgumentdataclass参数示例值默认值含义layer_typelinearconv护照层类型conv卷积或linear全连接in_channels_or_features208输入通道数或特征维度out_channels_or_features108输出通道数或特征维度kernel_size—3卷积核大小conv 类型时使用stride/padding/bias—1/0/True卷积步长、填充与偏置hidden_features20128自编码器隐藏层维度activation—relu激活函数可选relu、tanh、sigmoidpassport_distributegaussiangaussian护照采样分布可选gaussian、uniformpassport_modesinglesingle护照模式single或multimulti用于图像等多护照场景loc/scale—-1.0/1.0高斯分布的位置与尺度参数low/high—-1.0/1.0均匀分布的下限与上限num_passport—1护照数量ae_in/ae_out—None自编码器输入/输出维度两个侧别配置完成后通过HeteroNN组件绑定数据并下发各自的 runner 配置hetero_nn_0 HeteroNN(hetero_nn_0, train_datapsi_0.outputs[output_data]) hetero_nn_0.guest.task_parameters(runner_confguest_conf) hetero_nn_0.hosts[0].task_parameters(runner_confhost_conf)get_config_of_default_runner生成的就是 runner 的runner_conf字典其中模型bottom/top、聚合层、优化器、损失函数、训练参数均以可序列化配置形式表达从而可在 guest/host 间分别下发。三、SSHE 任务test_nn_binary_sshe.py 深度解析3.1 SSHE 策略原理SSHESecure Sharing Homomorphic Encryption策略同时使用同态加密与安全共享来保护模型与数据的隐私guest 与 host 聚合层的权重被拆分为两部分分别与协作方共享使得任何一方都无法单独获知对方聚合层权重的完整信息。其设计思想来源于论文When Homomorphic Encryption Marries Secret Sharing: Secure Large-Scale Sparse Logistic Regression and Applications in Risk Control。从源码实现看agg_layer.pySSHE 聚合层在set_context时通过SSHENeuralNetworkAggregatorLayer初始化聚合模型权重wahost 侧与wbguest 侧以**共享形式share**在双方之间分布并使用独立的SSHENeuralNetworkOptimizerSGD优化器学习率即layer_lr更新聚合层参数。训练时guest 侧调用self._agg_layer.step()推进聚合层自己的优化器host 侧同理聚合层参数不会以明文暴露给任何一方。3.2 与 FedPass 示例的差异test_nn_binary_sshe.py的 Pipeline 编排与 FedPass 版本基本一致Reader → PSI → HeteroNN 训练/预测 → Evaluation核心差异集中在聚合层的配置上Guest 侧bottom modelLinear(10, 10)top modelLinear(10, 1) Sigmoid聚合层使用 SSHEguest_conf get_config_of_default_runner( bottom_modelnn.Linear(10, 10), top_modelSequential(nn.Linear(10, 1), nn.Sigmoid()), training_argstraining_args, optimizeroptim.Adam(lr0.01), lossnn.BCELoss(), agglayer_argSSHEArgument( guest_in_features10, host_in_features10, out_features10 ) )Host 侧bottom modelLinear(20, 10)聚合层使用 SSHEhost_conf get_config_of_default_runner( bottom_modelnn.Linear(20, 10), optimizeroptim.Adam(lr0.01), training_argstraining_args, agglayer_argSSHEArgument( guest_in_features10, host_in_features10, out_features10 ) )SSHEArgument的参数说明默认值同样来自 hetero_nn_model.py参数示例值默认值含义guest_in_features108guest 侧输入特征维度host_in_features108host 侧输入特征维度out_features108SSHE 聚合层输出特征维度layer_lr—0.01聚合层独立优化器的学习率precision_bits—None定点数精度位数同态加密相关需要特别指出的是SSHE 示例的 guest 与 host 都配置了 bottom model 与聚合层即双方底层特征都先经过各自 bottom model 提取再由 SSHE 聚合层融合而 FedPass 示例中只有 host 的聚合层采用 FedPassguest 的 top model 直接基于自身特征输出。两种策略对模型结构的约束不同配置时需注意匹配。3.3 验证数据的使用差异SSHE 示例在训练时额外提供了验证集hetero_nn_0 HeteroNN( hetero_nn_0, train_datapsi_0.outputs[output_data], validate_datapsi_0.outputs[output_data] )而 FedPass 示例的hetero_nn_0只传入train_data。验证集的语义对应HeteroNN组件的validate_data参数见下文组件签名可在训练过程中进行验证评估。四、Hetero NN 组件与底层调用链4.1 HeteroNN 组件的接口定义Pipeline 中的HeteroNN组件最终对应 python/fate/components/components/hetero_nn.py 中由cpn.component(roles[GUEST, HOST])注册的组件它暴露两类算子train输入train_dataguest/host、可选validate_data参数包括runner_module默认hetero_default_runner、runner_class默认DefaultRunner、runner_confrunner 参数字典、source自定义 runner 脚本目录路径输出train_output_data与output_model并支持warm_start_model热启动predict输入test_data与input_model输出test_output_data。hetero_nn.train() def train( ctx: Context, role: Role, train_data: cpn.dataframe_input(roles[GUEST, HOST]) | cpn.data_directory_input(), validate_data: cpn.dataframe_input(roles[GUEST, HOST], optionalTrue) | cpn.data_directory_input(optionalTrue), runner_module: cpn.parameter(typestr, defaulthetero_default_runner, ...), runner_class: cpn.parameter(typestr, defaultDefaultRunner, ...), runner_conf: cpn.parameter(typedict, default{}, descthe parameter dict of the NN runner class), source: cpn.parameter(typestr, defaultNone, descpath to your runner script folder), ... ): train_procedure(...)这里runner_conf正是get_config_of_default_runner生成的配置字典source参数则允许用户传入自定义 runner 脚本目录实现完全自定义的训练逻辑。4.2 组件执行流程component_utils.py 中的train_procedure与predict_procedure是组件的实际执行引擎其关键步骤为加载 runner若source为None从默认位置fate.components.components.nn.runner.{runner_module}加载runner_class否则从source目录加载自定义 runner并要求加载的类必须是NNRunner的子类准备上下文通过ctx.sub_ctx创建子上下文并注入 runner解析数据将DataframeReader/DataDirectoryReader统一解析为训练/验证数据执行训练runner.train(...)并在训练后自动对训练集及验证集执行预测输出带数据集类型标记TRAIN_SET/VALIDATE_SET/TEST_SET的结果 DataFrame保存模型元数据将runner_module、runner_class、runner_conf、source序列化写入模型输出目录。预测阶段则从模型元数据中恢复 runner 配置加载保存的模型状态后对新数据预测。这解释了为何hetero_nn_1能以input_modelhetero_nn_0.outputs[output_model]无缝完成加载与预测——模型目录中不仅保存了权重还保存了可完整重建训练环境的 runner 配置。4.3 DefaultRunner 的分侧装配逻辑hetero_default_runner.py 中的DefaultRunner是上述两个示例默认使用的 runner它在train()中根据当前角色走不同的装配分支guest 侧guest_setup加载 bottom/top 模型解析agglayer_arg_conf经parse_agglayer_conf还原为StdAggLayerArgument/FedPassArgument/SSHEArgument构造HeteroNNModelGuest再创建HeteroNNTrainerGuest训练前通过_check_label强制校验 guest 数据集必须包含标签host 侧host_setup只加载 bottom 模型且有两个强约束明文聚合层StdAggLayerArgument在 host 侧不被允许Plaintext agglayer is not supported in Hetero-NN Pipeline Host party必须显式配置隐私保护聚合层否则直接抛错A aggregate layer for privacy preserving is needed in the Hetero-NN pipeline Host party, please set the agglayer config: use fedpass alone in host, or configure sshe layers for guesthost。这两个校验意味着在 Pipeline 模式下纵向联邦神经网络的 host 侧强制要求启用 FedPass 或 SSHE 中的一种隐私保护策略这是保证纵向联邦安全性的底线约束。4.4 模型与聚合层的运行时行为HeteroNNModelGuest与HeteroNNModelHosthetero_nn_model.py是封装 top/bottom 模型与聚合层的容器前向guest 侧若存在 bottom model先计算自身 bottom 输出b_out经聚合层融合 host 特征后送入 top modelhost 侧仅计算 bottom 输出并送入聚合层。聚合层支持sum与concat两种合并方式merge_type见 agg_layer.py 的AggLayerGuest._forward反向guest 侧的backward(loss)将误差经聚合层回传至各 hosthost 侧的backward()接收聚合层误差以backward_losssum(z * error)构造代理损失完成 bottom model 的梯度回传隐私策略分发FedPassArgument在序列化时标记agg_typefed_passSSHEArgument标记agg_typehessStdAggLayerArgument标记agg_typestdparse_agglayer_conf据此还原对应的聚合层实现GPU 约束SSHE 聚合层在非 CPU 设备上会直接抛出SSHEAggLayerGuest is not supported on GPUguest 与 host 侧均有此检查因此SSHE 策略只能运行于 CPUFedPass 策略则支持单 GPU 训练见 doc/2.0/fate/components/hetero_nn.md 中 Support single GPU training 的说明以及 hetero_nn_tutorial.md 中 SSHE layer is incompatible with GPU training 的明确提示。4.5 Trainer 层基于 HuggingFace Trainer 的联邦训练HeteroNNTrainerGuest/HeteroNNTrainerHosthetero_nn.py继承自HeteroTrainerBasetrainer_base.py而HeteroTrainerBase本身构建于 HuggingFaceTrainer之上因此TrainingArguments的字段语义与 transformers 完全一致。Trainer 的关键覆写包括compute_loss兼容(features, labels)与纯(labels,)两种输入格式后者对应 guest 只有标签、特征全部来自 host 的场景training_step计算 loss 后调用model.backward(loss)将梯度经联邦通道回传实现独立前向与独立反向这是 FATE 2.0 Hetero NN 框架的标志性能力初始化时若检测到模型需要 MPCmodel.need_mpc_init()即聚合层为SSHEAggLayer*会自动执行ctx.mpc.init()完成 MPC 协议环境初始化。五、运行结果与验证作业完成后评估组件在 guest 侧计算 AUC示例脚本将其打印到控制台result_summary pipeline.get_task_info(eval_0).get_output_metric()[0][data] print(fresult_summary: {result_summary})Evaluation组件的metrics[auc]指定评估指标input_datas同时传入训练集与测试集的预测结果便于对比模型在两类数据上的判别能力。此外HeteroNN的训练输出train_output_data与测试输出test_output_data本身都是带有数据集类型标记的 FATE DataFrame可被下游组件继续消费。六、FAQ 与实战注意事项Host 侧必须配置隐私保护聚合层Pipeline 模式下DefaultRunner.host_setup会强制校验未配置或误用明文聚合层StdAggLayerArgument都会抛错。推荐在 host 单独使用FedPassArgument或在 guest 与 host 两侧对称配置SSHEArgument。SSHE 与 GPU 不兼容若训练环境包含 GPUSSHE 聚合层会在前向时抛出异常FedPass 支持单 GPU 训练。选择策略前应先确认运行环境。Guest 必须有标签runner 在训练前会检查 guest 数据集has_label纵向联邦中标签只允许出现在 guest 侧。数据命名空间一致性测试套件上传数据使用namespace: experiment脚本读取时使用experiment{namespace}运行时通过--namespace对齐避免表不存在的错误。SSHE 需要双方维度对齐SSHEArgument中的guest_in_features/host_in_features/out_features必须在 guest 与 host 两侧配置一致否则聚合层无法正确融合双方特征。自定义模型/数据集HeteroNN组件的source参数支持指定自定义 runner 脚本目录runner 的dataset_conf、optimizer_conf、loss_conf等均支持按配置装载可参照 hetero_nn_tutorial.md 中本地实验不经 FATE-Pipeline、使用fate.arch.launchers.multiprocess_launcher.launch直接运行的方式快速验证模型与算法改动。七、进一步阅读组件文档doc/2.0/fate/components/hetero_nn.mdSSHE 与 FedPass 策略的原理、特性与架构图本地实验教程doc/2.0/fate/ml/hetero_nn_tutorial.md不依赖 FATE-Flow 的本地 Hetero NN 开发与调试方法含表格数据 SSHE 示例与图像数据 FedPass 示例的完整代码测试用例python/fate/ml/nn/testtest_hetero_nn_sshe.py、test_fedpass_tabular.py、test_fedpass_lenet.py、test_fedpass_alexnet.py等覆盖了 SSHE 与 FedPass 的算法级验证组件实现python/fate/components/components/hetero_nn.py、hetero_default_runner.py模型与聚合层实现hetero_nn_model.py、fedpass/agg_layer.py、sshe/agg_layer.py赞分享人工智能机器学习联邦学习深度学习分布式训练隐私计算密码学【免费下载链接】FATEAn Industrial Grade Federated Learning Framework项目地址https://gitcode.com/gh_mirrors/fa/FATE点击查看免费下载相关推荐FATE 2.0 Homo NN 横向联邦神经网络实战指南从环境搭建、FedAVG 训练到部署预测FATE 2.0 Homo NN 横向联邦神经网络实战指南从环境搭建、FedAVG 训练到部署预测 导读 本文基于 FATE 开源仓库 doc/2.0/fat人工智能机器学习联邦学习深度学习分布式训练隐私计算密码学FATE Union 组件实战指南基于 Pipeline 将多份联邦学习数据集纵向拼接合并FATE Union 组件实战指南基于 Pipeline 将多份联邦学习数据集纵向拼接合并 导读 本文围绕 FATE 开源仓库中的 Union Pipelin人工智能机器学习联邦学习深度学习分布式训练隐私计算密码学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/12 6:25:07

Go中invalid receiver type报错详解与修复

上午编译项目时,被一行报错拦住了:dao/streamer_business.go:75:10: invalid receiver type StreamerRequest (pointer or interface type)。第一反应有点懵:StreamerRequest 明明是我在这个文件里自己定义的类型,字段都写好了&am…

2026/10/12 6:25:07

PyQt5+YOLOv5桌面检测工具开发:从能跑到能交付的实战指南

简介:这是一份面向刚接触PyQt5与YOLO算法的初学者的PyQt5YOLOv5多目标检测GUI项目包,解决从算法到界面落地的困惑,适合希望用现成项目练手、快速体验完整开发流程的人。压缩包共112个文件、约83.46MB,主要包含Python源码、YAML模型…

2026/10/12 6:25:07

dnSpy 6.1.3 + .NET Framework 4.7.2 逆向调试实战指南

简介:dnSpy-6.1.3-net472.zip 是一款面向.NET开发者与逆向分析人员的开源集成调试与反编译工具包,专为Windows平台设计,解决.NET程序动态调试、IL代码逆向还原及二进制级修改等核心需求。资源包大小22.37MB,含x64/x86双架构可执行…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑