隐私计算实训营第二期第11讲组件介绍与自定义开发

首先给大家推荐一个博主的笔记:隐语课程学习笔记11- 组件介绍与自定义开发-CSDN博客

官方文档:隐语开放标准介绍 | 开放标准 v1.0.dev240328 | 隐语 SecretFlow

01 隐语开放标准

隐语开放标准是为隐私保护应用设计的协议栈。

目前,隐语开放标准包括数据组件节点评估协议,将很快引入工作流程协议

隐语开放标准被隐语生态系统使用,包括:

  • SecretFlow:用于隐私保护数据分析和机器学习的统一框架。
  • Kuscia:基于 K8s 的隐私保护计算任务编排框架。
  • SecretPad:基于 Kuscia 框架的隐私保护计算 Web 平台,旨在为隐私保护数据智能和机器学习功能提供便捷访问。
  • SCQL TEE 引擎将来也将使用隐语开放标准。

数据

隐语对数据制定了面向隐私计算场景的标准定义,采用DistData,其中包含两种子类数据:

(1)PublicData(可以公开的数据),包含name、type、meta、system_info等信息,不同的type对应不同的meta;

(2)DataRef(远程数据的句柄引用,会指定对应的所有者(所有权)以及对应的URI),比如分散在各计算节点中的碎片数据就是一种远程的密态数据。

 数据调用过程:

指令需要根据所有者以及对应的URI找到对应的数据RemoteObject,然后在所有者本地做处理操作。

组件

组件(Component)是隐语开放标准中最复杂的协议,组件表示可以集成到工作流中的一份应用程序。

你可以使用ComponentDef来定义一个组件:

domain: 组件的命名空间。可以使用此字段对组件进行分组。例如,在SecretFlow中,我们有 ‘ml.train’,’feature’等。

name: 在命名空间中必须是唯一的。但是,在不同的命名空间中,可以具有相同名称的组件。

version: 组件的版本。

attributes: 组件的属性。

inputs :组件的输入要求 

outputs: 组件的输出要求 

通过domain, name和version,用户可以在系统中定位到一个唯一的组件。

我们将组件的所有属性组织成属性树。

  • 树的叶子节点称为原子属性,表示用户需要填写的固定字段,例如桶大小或学习率,在图中表示为”a/b”,“a/c/e/i”,“a/c/f/j”。
  • 树的非叶子节点称为属性组。有两种类型的属性组:
    • Struct Attribute Group :组内的所有子节点都需要一起填写。例如,在图中”a/c/f”,“a/d”,“a/d/g”。
    • Union Attribute Group :用户必须选择组内的一个子节点进行填写。例如,在图中”a/c”和”a/d/h”。

Struct Attribute Group 有点类似问卷调查中的某一类问题,比如个人信息(包括姓名、年龄等);

Union Attribute Group 有点类似问卷调查中设计的分支。(比如不同职业,对应需要回答的问题不同)

IoDef用于指定组件的输入或输出要求。

节点执行

组件的运行时实例称为节点。

要评估一个应用程序的组件,您必须提供以下内容:

  • StorageConfig,您必须提供它以让应用程序获取由DataRef指定的远程数据。
  • NodeEvalParam,ComponentDef所需的所有字段。

结果由应用程序的NodeEvalResult表示。

运行报告

包含以下内容:

02 隐语组件列表

隐语提供了很多组件,可以参考SecretFlow 组件列表 | SecretFlow v1.6.1b0 | 隐语 SecretFlow。并且提供了可视化的编程界面,方便调用执行。

03 调用隐语组件

有三种不同的方式调用PSI隐私求交组件

SecretFlow 组件指南 | SecretFlow v1.7.0b0 | 隐语 SecretFlow

连接中可以找到完整代码

运行指令时报错:

解决如下:来自shell - bash 中的字符串比较。[[: 未找到 - 堆栈溢出 --- shell - String comparison in bash. [[: not found - Stack Overflow

04 新增隐语组件

构建一个 SecretFlow 组件的简要步骤如下:

1.在 secretflow/component/ 目录下创建一个新的文件。

2.使用 secretflow.component.component.Component 创建一个组件类:

from secretflow.component.component import IoType
from secretflow.component.data_utils import DistDataTypetrain_test_split_comp.float_attr(name="train_size",desc="Proportion of the dataset to include in the train subset.",is_list=False,is_optional=True,default_value=0.75,allowed_values=None,lower_bound=0.0,upper_bound=1.0,lower_bound_inclusive=True,upper_bound_inclusive=True,
)
train_test_split_comp.float_attr(name="test_size",desc="Proportion of the dataset to include in the test subset.",is_list=False,is_optional=True,default_value=0.25,allowed_values=None,lower_bound=0.0,upper_bound=1.0,lower_bound_inclusive=True,upper_bound_inclusive=True,
)
train_test_split_comp.int_attr(name="random_state",desc="Specify the random seed of the shuffling.",is_list=False,is_optional=True,default_value=1234,
)
train_test_split_comp.bool_attr(name="shuffle",desc="Whether to shuffle the data before splitting.",is_list=False,is_optional=True,default_value=True,
)
train_test_split_comp.io(io_type=IoType.INPUT,name="input_data",desc="Input dataset.",types=[DistDataType.VERTICAL_TABLE],col_params=None,
)
train_test_split_comp.io(io_type=IoType.OUTPUT,name="train",desc="Output train dataset.",types=[DistDataType.VERTICAL_TABLE],col_params=None,
)
train_test_split_comp.io(io_type=IoType.OUTPUT,name="test",desc="Output test dataset.",types=[DistDataType.VERTICAL_TABLE],col_params=None,
)

3.定义属性和输入输出。

from secretflow.component.component import IoType
from secretflow.component.data_utils import DistDataTypetrain_test_split_comp.float_attr(name="train_size",desc="Proportion of the dataset to include in the train subset.",is_list=False,is_optional=True,default_value=0.75,allowed_values=None,lower_bound=0.0,upper_bound=1.0,lower_bound_inclusive=True,upper_bound_inclusive=True,
)
train_test_split_comp.float_attr(name="test_size",desc="Proportion of the dataset to include in the test subset.",is_list=False,is_optional=True,default_value=0.25,allowed_values=None,lower_bound=0.0,upper_bound=1.0,lower_bound_inclusive=True,upper_bound_inclusive=True,
)
train_test_split_comp.int_attr(name="random_state",desc="Specify the random seed of the shuffling.",is_list=False,is_optional=True,default_value=1234,
)
train_test_split_comp.bool_attr(name="shuffle",desc="Whether to shuffle the data before splitting.",is_list=False,is_optional=True,default_value=True,
)
train_test_split_comp.io(io_type=IoType.INPUT,name="input_data",desc="Input dataset.",types=[DistDataType.VERTICAL_TABLE],col_params=None,
)
train_test_split_comp.io(io_type=IoType.OUTPUT,name="train",desc="Output train dataset.",types=[DistDataType.VERTICAL_TABLE],col_params=None,
)
train_test_split_comp.io(io_type=IoType.OUTPUT,name="test",desc="Output test dataset.",types=[DistDataType.VERTICAL_TABLE],col_params=None,
)

4.定义执行函数

from secretflow.spec.v1.data_pb2 import DistData# Signature of eval_fn must be
#  func(*, ctx, attr_0, attr_1, ..., input_0, input_1, ..., output_0, output_1, ...) -> typing.Dict[str, DistData]
# All the arguments are keyword-only, so orders don't matter.
@train_test_split_comp.eval_fn
def train_test_split_eval_fn(*, ctx, train_size, test_size, random_state, shuffle, input_data, train, test
):# Please check more examples to learn component utils.# ctx includes some parsed cluster def and other useful meta.# The output of eval_fn is a map of DistDatas of which keys are output names.return {"train": DistData(), "test": DistData()}

5.将你的新组件加入到 secretflow.component.entry 的 ALL_COMPONENTS 中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql8.0-学习

文章目录 mysql8.0基础知识-学习安装mysql_8.0登录mysql8.0的体系结构与管理体系结构图连接mysqlmysql8.0的 “新姿势” mysql的日常管理用户安全权限练习查看用户的权限回收:revoke角色 mysql的多种连接方式socket显示系统中当前运行的所有线程 tcp/ip客户端工具基于SSL的安全…

Wp-scan一键扫描wordpress网页(KALI工具系列三十二)

目录 1、KALI LINUX 简介 2、Wp-scan工具简介 3、信息收集 3.1 目标IP(服务器) 3.2kali的IP 4、操作实例 4.1 基本扫描 4.2 扫描已知漏洞 4.3 扫描目标主题 4.4 列出用户 4.5 输出扫描文件 4.6 输出详细结果 5、总结 1、KALI LINUX 简介 Kali Linux 是一…

STM32CubeIDE使用标准库

以STM32F030为例使用标准库文件。 1、新建工程,选择需要使用配置的型号。 2、在工程选型中,选择新建空工程。 3、新建空工程 新建完成,系统只有main函数和启动文件.s有用。 4、启动文件 启动文件,同样是一个汇编文件&#xf…

【Matlab函数分析】imread从图形文件读取图像

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

如何利用AI生成可视化图表(统计图、流程图、思维导图……)免代码一键绘制图表

由于目前的AI生成图表工具存在以下几个方面的问题: 大多AI图表平台是纯英文,对国内用户来说不够友好;部分平台在生成图表前仍需选择图表类型、配置项,操作繁琐;他们仍需一份规整的数据表格,需要人为对数据…

软件框架(Framework)是什么?

可实例化的、部分完成的软件系统或子系统,它为一组系统或子系统定义了统一的体系结构(architecture),并提供了构造系统的基本构造块(building blocks),还为实现具体功能定义了扩展点(extending points)。 框架实现了体系结构级别的复用。 其…

系统工程与信息系统基础(上)

目录 系统工程 霍尔三维结构的三维: 切克兰德方法: 并行工程方法: 综合集成法: WSR系统方法: 系统工程生命周期阶段 探索性阶段 概念阶段 开发阶段 生产阶段 使用阶段 保障阶段 退役阶段 系统工程生命周…

初识HTML

HTML语法规范 1、HTML标签是由尖括号包围的关键字&#xff0c;例如<html>。 2、HTML标签通常成对出现&#xff0c;例如<html></html>&#xff0c;此为双标签&#xff0c;标签对的第一个标签是开始标签&#xff0c;第二个标签是结束标签。 3、有些特殊标签…

详解flink sql, calcite logical转flink logical

文章目录 背景示例FlinkLogicalCalcConverterBatchPhysicalCalcRuleStreamPhysicalCalcRule其它算子FlinkLogicalAggregateFlinkLogicalCorrelateFlinkLogicalDataStreamTableScanFlinkLogicalDistributionFlinkLogicalExpandFlinkLogicalIntermediateTableScanFlinkLogicalInt…

语音唤醒入门(基于ESP-skainet)

主要参考资料&#xff1a; ESP-SR 用户指南: https://docs.espressif.com/projects/esp-sr/zh_CN/latest/esp32s3/index.html 目录 ESP提供的模型直接初始化和使用模型AFE声学前端算法 使用模型 自定义模型 ESP提供的模型 乐鑫提供了经过训练的 WakeNet 和 MultiNet 模型&…

45.分解质因数

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/711 题目描述 给定一个整数 𝑛n,请将它…

HDFS详细介绍以及HDFS集群环境部署【hadoop组件HDFS笔记】(图片均为学习时截取的)

HDFS详细介绍 HDFS是什么 HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一 全称是&#xff1a;Hadoop Distributed File System&#xff08;Hadoop分布式文件系统&#xff09;&#xff1b;是Hadoop技术栈内提供的分布式数据存储解决方案 可以在多台服务器上构建存储集群&…

云计算【第一阶段(21)】Linux引导过程与服务控制

目录 一、linux操作系统引导过程 1.1、开机自检 1.2、MBR引导 1.3、GRUB菜单 1.4、加载 Linux 内核 1.5、init进程初始化 1.6、简述总结 1.7、初始化进程centos 6和7的区别 二、排除启动类故障 2.1、修复MBR扇区故障 2.1.1、 实验 2.2、修复grub引导故障 2.2.1、实…

敏捷开发笔记(第9章节)--开放-封闭原则(OCP)

目录 1&#xff1a;PDF上传链接 9.1 开放-封闭原则&#xff08;OCP&#xff09; 9.2 描述 9.3 关键是抽象 9.3.1 shape应用程序 9.3.2 违反OCP 糟糕的设计 9.3.3 遵循OCP 9.3.4 是的&#xff0c;我说谎了 9.3.5 预测变化和“贴切的”结构 9.3.6 放置吊钩 1.只受一次…

团队任务管理跟踪软件有哪些?分享2024年值得关注的10款

本文将分享2024年值得关注的10款团队任务管理跟踪软件&#xff1a;Worktile、PingCode、Zoho Projects、Wrike、ProofHub、Connecteam、MeisterTask、Nifty、BIGContacts、Hive。 无论是小型初创企业还是庞大的跨国公司&#xff0c;高效的任务管理都能显著提升工作效率&#xf…

面试框架一些小结

springcloud的⼯作原理 springcloud由以下⼏个核⼼组件构成&#xff1a; Eureka&#xff1a;各个服务启动时&#xff0c;Eureka Client都会将服务注册到Eureka Server&#xff0c;并且Eureka Client还可以反过来从Eureka Server拉取注册表&#xff0c; 从⽽知道其他服务在哪⾥ …

新能源行业知识体系-------主目录-----持续更新

本文相当于目录方便快速检索内容&#xff0c;没有实际内容&#xff0c;只做索引 文章目录 一、电力市场概论二、蒙西电网需求侧响应三、蒙西电网市场结算V2.0 一、电力市场概论 是学习清华大学电力市场概论(2024年春)的学习笔记&#xff0c;详细了解电力市场是如何利用经济学知…

48 - 按日期分组销售产品(高频 SQL 50 题基础版)

48 - 按日期分组销售产品 -- group_concat 分组拼接selectsell_date,count(distinct product) num_sold,group_concat(distinct product order by product separator ,) products fromActivities group bysell_date;

grpc教程——proto文件转go

【1】编写一个proto文件 syntax "proto3"; package myproto;service NC{rpc SayStatus (NCRequest) returns (NCResponse){} }message NCRequest{ string name 1; } message NCResponse{string status 1; } 【2】转换&#xff1a;protoc --go_out. myservice.pro…

mmdetection2.28修改backbone不使用预训练参数、从头训练

背景 最近需要测试一下在backbone部分如果不使用预训练参数的话&#xff0c;模型需要多少轮才能收敛所使用的backbone是mmcls.ConvNeXtmmdetection版本为2.28.2&#xff0c;mmcls版本为0.25.0 修改流程 最简单的方法&#xff0c;直接去mmcls的model zoo里找到对应backbone的…