隐私计算实训营学习四:SecretFlow的安装和部署

文章目录

  • 一、SecretFlow安装
  • 二、SecretFolw部署模式简介
  • 三、SecretFlow部署-仿真模式
  • 四、SecretFlow部署-生产模式

一、SecretFlow安装

SecretFlow运行要求:

  • Python >= 3.8
  • 操作系统:CentOS7、Anolis8、Ubuntu 18.04/20.04、macOS 11.1+、WSL2
  • 资源:≥ 8核16GB

安装包:

  • secretflow:包含secretflow所有的requirements,体积较大
  • secretflow-lite:仅包含基础功能(不包含深度学习等依赖库),体积较小

安装方式:

1、docker镜像。

docker hub:
docker run -it secretflow/secretflow-anolis8:latest
docker run –it secretflow/secretflow-lite-anolis8:latest阿里云:
docker run -it secretflow-registry.cnhangzhou.cr.aliyuncs.com/secretflow-anolis8:latest
docker run –it secretflow-registry.cnhangzhou.cr.aliyuncs.com /secretflow-lite-anolis8:latest

2、pypi安装:要求pip >= 19.3,建议使用conda管理python环境。

pip install –U secretflow #全版本
pip install –U secretflow-lite #lite版本

3、源码安装:要求pip >= 19.3,建议使用conda管理python环境。

#1.下载源码并建立Python虚拟环境
git clone https://github.com/secretflow/secretflow.git
cd secretflow
conda create -n secretflow python==3.8
conda activate secretflow#2.安装secretflow
#涉及到C++编译,建议使用镜像secretflow/release-ci:latest
python setup.py bdist_wheel #生成python内容包
pip install dist/*.whl #安装

此处采用方式2利用conda构建虚拟环境安装(本想用源码编译安装,依赖环境太多,后续有空再尝试):

#conda构建一个虚拟环境
conda create -n sf python=3.8
conda activate sf#pip安装SecretFlow,此处参考其他博主更换pip源
pip install -U secretflow -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成如图:
在这里插入图片描述
测试仿真单机部署:
在这里插入图片描述

二、SecretFolw部署模式简介

SecretFlow提供了仿真模式与生产模式两种部署方案:仿真模式用于快速验证代码效果,仅需在一台机器上部署代码即可;生产模式针对安全生产设计,主要作了安全增强,每一个参与方都是独立的Ray集群,所有参与方都需要执行代码。
SecretFlow与Ray关系:Ray为分布式计算框架,SecretFlow使用Ray作为分布式计算调度框架,Ray集群由一个主节点和零或若干个从节点组成。
在这里插入图片描述

三、SecretFlow部署-仿真模式

通信网络:
在这里插入图片描述
1、单机仿真:单个节点模拟alice、bob两个参与方。

#address='local':表示启动一个本地的Ray节点
>>> import secretflow as sf
>>> sf.init(parties=['alice', 'bob'], address='local') #parties参与方、address在当前启动一个Ray的节点
>>> alice = sf.PYU('alice') #PYU为明文计算设备
>>> bob = sf.PYU('bob')
>>> alice(lambda x : x + 1)(2) #alice进行计算
<secretflow.device.device.pyu.PYUObject object at 0x7fe932a1a640>
>>> bob(lambda x : x - 1)(2) #bob进行计算
<secretflow.device.device.pyu.PYUObject object at 0x7fe6fef03250>

2、集群仿真:部署两个节点,分别模拟alice、bob两个参与方。

  1. 在第一台机器上部署Ray主节点,模拟参与方alice(填写真的主节点ip和port),resources{“标记名”,计算资源数}。
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
  1. 在第二台机器上部署Ray从节点,模拟参与方bob(address填写Ray主节点ip和port)。
ray start \
--address="{Ray主节点的通信地址}" \
--resources=' {"bob": 16} ' \
--include-dashboard=False \
--disable-usage-stats
  1. 执行python代码:在alice或者bob其中一台机器上执行即可,address填写实际Ray主节点ip和port。
>>> import secretflow as sf
>>> sf.init(parties=['alice', 'bob'], address=' {ip:port}') #主节点ip与端口
>>> alice = sf.PYU('alice')
>>> bob = sf.PYU('bob')
>>> alice(lambda x : x)(2)
<secretflow.device.device.pyu.PYUObject object at 0x7fe932a1a640>
>>> bob(lambda x : x)(2)
<secretflow.device.device.pyu.PYUObject object at 0x7fe6fef03250>
  1. 创建密态设备SPU(可选):通信是单独的,每一个参与方都有一个进程,需要先定义cluster_def结构包含nodes参与方地址,需要分配单独的监听地址与端口,此处地址与端口不能和Ray的通信地址端口冲突。
import spu
cluster_def = {
'nodes': [{
'party': 'alice',
'address': '{ip:port of alice}',}, {
'party': 'bob',
'address': '{ip:port of bob}',},
],
'runtime_config': {
'protocol': spu.spu_pb2.SEMI2K,
'field': spu.spu_pb2.FM128,
'sigmoid_mode': spu.spu_pb2.RuntimeConfig.SIGMOID_REAL,}
}
spu = sf.SPU(cluster_def=cluster_def)

四、SecretFlow部署-生产模式

生产模式: 部署两个节点,分别模拟alice、bob两个参与方。
通信网络:
在这里插入图片描述

  1. 在第一台机器上部署Ray主节点,模拟参与方alice(填写真的主节点ip和port)。
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
  1. 在第二台机器上部署Ray主节点,模拟参与方bob(填写真的主节点ip和port)。
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"bob": 16} ' \
--include-dashboard=False \
--disable-usage-stats
  1. alice执行python代码:cliuster_config中的address分别填写alice/bob的通信地址(注意不要和Ray的端口冲突)
    cluster_config中的self_party为alice。
    sf.init中的address填写第一台机器(alice)的Ray主节点ip和port。
import secretflow as sf
cluster_config ={
'parties': {
'alice’: {'address': 'ip:port of alice'},
'bob': {'address': 'ip:port of bob'},
},
'self_party': 'alice',
}
sf.init(address='{Ray head node address of alice}',
cluster_config=cluster_config)
  1. bob执行python代码:cliuster_config中的address分别填写alice/bob的通信地址(注意不要和Ray的端口冲突)。
    cluster_config中的self_party为bob。
    sf.init中的address填写第二台机器(bob)的Ray主节点ip和port。
import secretflow as sf
cluster_config ={
'parties': {
'alice’: {'address': 'ip:port of alice'},
'bob': {'address': 'ip:port of bob'},
},
'self_party': 'bob',
}
sf.init(address='{Ray head node address of bob}',
cluster_config=cluster_config)
  1. 创建密态设备SPU(可选):通信是单独的,填写实际的alice和bob的通信地址,用于SPU通信;alice和bob都需要执行这段代码,注意不要和Ray通信端口、SecretFlow通信端口冲突。
import spu
cluster_def = {
'nodes': [{
'party': 'alice',
'address': '{ip:port of alice}',
}, {
'party': 'bob',
'address': '{ip:port of bob}',
},
],
'runtime_config': {
'protocol': spu.spu_pb2.SEMI2K,
'field': spu.spu_pb2.FM128,
'sigmoid_mode': spu.spu_pb2.RuntimeConfig.SIGMOID_REAL,
}
}
spu = sf.SPU(cluster_def=cluster_def)

生产模式 - 使用KUSCIA(SecretFlow调度框架)解决多端口问题。 屏蔽不同机构间基础设施的差异,为跨机构协作提供丰富且可靠的资源管理和任务调度能力。 KUSCIA可以自动将SPU、Ray通信做到归一。
在这里插入图片描述
生产模式 - 使用SecretNote提升体验, 一个页面上执行多方代码。
https://github.com/secretflow/secretnote

  1. 与Notebook一致的使用体验,可以在代码单元写代码,所见即所得去执行;
  2. 单操作界面,多节点代码自动执行;
  3. 多节点代码运行状况跟踪;

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

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

相关文章

Camera入门基础知识

一、camera介绍 1.1 camera硬件组成 camera一般由Lens、VCM音圈马达、底座支架、Sensor、Driver IC、output interface组成。如下图: 这里面要注意的是有些摄像头模组有VCM,有些则没有,有些output interface输出的是CSI信号,有的输出的是串行信号,需要接解串器。…

Linux的一些基本指令

​​​​​​​ 目录 前言&#xff1a; 1.以指令的形式登录 2.ls指令 语法&#xff1a; 功能&#xff1a; 常用选项&#xff1a; 3.pwd指令 4.cd指令 4.1 绝对路径与相对路径 4.2 cd .与cd ..&#xff08;注意cd后先空格&#xff0c;然后两个点是连一起的&#xff0…

post请求

写代码&#xff0c;看官网 因post请求数据是2种情况&#xff0c;一种传参数&#xff0c;一种不传参数 所以先定义变量 写判断条件&#xff0c;逻辑是参数的长度和参数是否为空 0和不为空不好理解&#xff0c;可以使用参数长度不等于0&#xff0c;说明参数有值&#xff0c;在…

化工企业能源在线监测管理系统,智能节能助力生产

化工企业能源消耗量极大&#xff0c;其节能的空间也相对较大&#xff0c;所以需要控制能耗强度&#xff0c;保持更高的能源利用率。 化工企业能源消耗现状 1、能源管理方面 计量能源消耗时&#xff0c;计量器具存在问题&#xff0c;未能对能耗情况实施完全计量&#xff0c;有…

linux命令学习——sort

sort可以对文本文件进行“排序”&#xff0c;比如-n可以对文本&#xff0c;按照首行字母数字顺序排序 -r参数可以对排序结果进行反转 -u参数可以对查看结果去重

【C++】关联式容器——map和set

1 关联式容器 STL中我们常用的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 那什么是关联式容器呢&#xff1f;它与序…

DFS基础——迷宫

迷宫 配套视频讲解 关于dfs和bfs的区别讲解。 对于上图&#xff0c;假设我们要找从1到5的最短路&#xff0c;那么我们用dfs去找&#xff0c;并且按照编号从大到小的顺序去找&#xff0c;首先找到的路径如下&#xff0c; 从节点1出发&#xff0c;我们发现节点2可以走&#xff…

Automatic Prompt Engineering

让大模型自己生成prompt&#xff0c;生成提示&#xff08;prompt&#xff09;存在两种不同的操作方式。第一种方式是在文本空间中进行&#xff0c;这种提示以离散的文本形式存在。第二种方式是将提示抽象成一个向量&#xff0c;在特征空间中进行操作&#xff0c;这种提示是抽象…

Unity学习笔记 6.2D换帧动画

下载源码 UnityPackage 目录 1.导入图片 1.1. 图片的叠放顺序 2.图片切片 3.用动画控制器让马&#x1f40e;动起来 1.导入图片 直接拖拽进场景 检查 Texture Type&#xff08;纹理类型&#xff09;是否为 Sprite 创建2D精灵对象&#xff0c;拖拽图片到Sprite&#xff08…

java 实现发送邮件功能

今天分享一篇 java 发送 QQ 邮件的功能 环境&#xff1a; jdk 1.8 springboot 2.6.3 maven 3.9.6 邮件功能依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>&…

<商务世界>《第16课 餐桌礼仪之座次》

1 简要 我国自古以来就很重视座位礼仪&#xff0c;非讲究&#xff0c;分君臣、分宾主、分方位等等而今座位礼仪已经简化为&#xff1a; 以“中”为尊&#xff1a; 中心为尊&#xff0c;突出主位。 以“右”为尊&#xff1a; 从历史上到国际上都是以右为尊。 以“内”为尊&…

基于springboot+vue的反欺诈平台的建设

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…