隐私计算实训营第二期第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 是一…

深入解析Tomcat:Java Web服务器(下)

深入解析Tomcat:Java Web服务器(下) 在上一篇文章中,我们介绍了Tomcat的基本概念、安装配置、以及基本使用方法。本文将继续探讨Tomcat的高级配置和性能调优。 5. 高级配置 5.1 配置文件详解 Tomcat的配置文件位于conf目录下&…

中北大学阿尔法编程之分治算法

整数划分问题 整数划分问题&#xff1a;将一个整数划分为若干个数相加 例子&#xff1a; 整数4 最大加数 4 44 134 1124 224 11114 一共五种划分方案 注意&#xff1a;134&#xff0c;314被认为是同一种划分方案 最后输出共几种划分方案 #include <stdio.h> …

Spring Boot中的模板引擎选择与配置

Spring Boot中的模板引擎选择与配置 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来聊聊Spring Boot中的模板引擎选择与配置。模板引擎是生成动态网页…

MySQL root密码丢失处理

没有记住MySQL数据库root用户默认密码(为初始化安装mysql时默认生成) 1)修改/etc/my.cnf文件,在[mysqld]的段中加上一句:skip-grant-tables 重启mysql服务 [root@localhost ~]# service mysqld restart 2)以无密码方式进入mysql: [root@localhost ~]# /usr/local/my…

STM32CubeIDE使用标准库

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

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

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

雅思词汇及发音积累 2024.6.30

交通 tavel agency /ˈeɪdʒənsi/ 旅行社 book the ticket 订票 motel 汽车旅店 hostel 青年旅社 passport 护照 visa 签证 make a reservation 预订 confirm a reservation 确认预订 book a room/table 预订房间/饭桌 fare 票价 cancel ones reservation 取消预订 toll 通行…

【Python】 数据分析中的常见统计量:众数

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 &#x1f3b5; 王心凌《那年夏天宁静的海》 众数&#xff08;Mode&#xff09;是统计学中另…

C++17中引入了什么新的重要特性

C17是C标准的一个重要版本&#xff0c;它在语言核心和标准库中引入了许多新特性和改进&#xff0c;使得C编程更加现代化和高效。以下是C17中引入的一些重要新特性&#xff1a; 语言核心新特性 结构化绑定&#xff08;Structured Bindings&#xff09;&#xff1a; 结构化绑定…

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

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

软件框架(Framework)是什么?

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

Hive 实操案例六:统计上传视频最多的用户 Top10 以及他们上传的视频观看次数在前 20 的视频

一、数据表结构 视频表 t_video 字段注释描述videoId视频唯一 id&#xff08;String&#xff09;11 位字符串uploader视频上传者&#xff08;String&#xff09;上传视频的用户名 Stringage视频年龄&#xff08;int&#xff09;视频在平台上的整数天category视频类别&#xff0…

源码编译安装PostgreSQL数据库

源码安装PostgreSQL数据库&#xff08;Linux 6&#xff09; 安装编译环境 yum -y install gcc make yum -y install libicu-devel pango pango-devel cairo cairo-devel readline-devel zlib-devel 安装PostgreSQL 解压 postgresql-16.0.tar.gz #tar -xzf postgresql-16.0.ta…

FastGPT本地手动部署(二)

本篇文章主要介绍如何在本地手动部署 FastGPT。 一、环境配置 本文是在 Ubuntu20.04 上安装,安装 fnm、node、pnpm,依次进行如下配置。 (1) 安装 fnm 首先,安装 fnm,fnm可以指定安装的 node 版本,执行如下命令。 curl -fsSL https://fnm.vercel.app/install | bash …

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

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

初识HTML

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

C++ 设计模式之状态模式

C 设计模式之状态模式 简介 1、状态模式 &#xff08;State&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态发生改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类。该模式主要用于实现一个对象在多种状态转换时能够自动切换到正确的行为。…

山东大学计算机组成原理-期末复习纲要

考试题型&#xff1a;单选题、简答题&#xff08;如原码一位乘法运算、屏蔽技术的程序执行流程等&#xff09;、设计题&#xff08;字位扩展、指令微操作流程、cache等&#xff09;&#xff0c;作业难度、题型 课本&#xff1a;《计算机组成原理&#xff08;第三版&#xff09…