当前位置: 首页 > news >正文

隐私计算实训营学习四: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. 多节点代码运行状况跟踪;

相关文章:

  • 【Linux基础】dash和bash简介
  • 实现实时查询并带有查询结果列表的输入框
  • 数字化转型核心 数据治理神器Hadoop 生态介绍HDFS、Yarn以及HBase/Hive
  • jvm底层
  • 设计一个简单的Qt界面
  • nodejs安装使用React
  • SQLiteC/C++接口详细介绍sqlite3_stmt类(十三)
  • C#多态性
  • 2024/3/24 蓝桥杯
  • 酒店智能水电表管理解决方案:提升效率、节约成本与环保并重
  • go面向对象
  • 软件杯 深度学习 机器视觉 人脸识别系统 - opencv python
  • Leetcode的使用方法
  • 深入解析代理模式:使用场景、实现及应用实例
  • Nextcloud激活被锁用户
  • 2017年终总结、随想
  • C学习-枚举(九)
  • Druid 在有赞的实践
  • JS+CSS实现数字滚动
  • python 装饰器(一)
  • Python实现BT种子转化为磁力链接【实战】
  • Theano - 导数
  • Vue组件定义
  • web标准化(下)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 第十八天-企业应用架构模式-基本模式
  • 基于axios的vue插件,让http请求更简单
  • 如何进阶一名有竞争力的程序员?
  • 入口文件开始,分析Vue源码实现
  • 使用 @font-face
  • 我的zsh配置, 2019最新方案
  • 小程序测试方案初探
  • ​520就是要宠粉,你的心头书我买单
  • ​iOS实时查看App运行日志
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #vue3 实现前端下载excel文件模板功能
  • (003)SlickEdit Unity的补全
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言)fread与fwrite详解
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .form文件_SSM框架文件上传篇
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net CHARTING图表控件下载地址
  • .net web项目 调用webService
  • .NET 材料检测系统崩溃分析
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NetCore部署微服务(二)
  • .net打印*三角形
  • @取消转义
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [Android]通过PhoneLookup读取所有电话号码
  • [AX]AX2012 AIF(四):文档服务应用实例