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

news2024/11/18 11:27:07

文章目录

  • 一、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.coloradmin.cn/o/1541612.html

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

相关文章

前端框架前置课(1)---AJAX阶段

1. AJAX入门 1.1 AJAX概念和axios使用 1.1.1 什么是AJAX? 1.1.2 怎么用AJAX? 引入axios.js 获取省份列表数据 1.2 认识URL 1.3 URL查询参数 1.4 常用请求方和数据提交 1.5 HTTP协议-报文 1.5.1 HTTP响应状态码 1.5.1.1 状态码&#xff1a;1XX&#xff08;信息&#xff09…

论文阅读:UniFormer和UniFormerV2

文章目录 UNIFormer动机方法动态位置嵌入(DPE)多头关系聚合器(MHRA) 模型代码总结 UniFormerV2动机方法整体框架实现细节 总结 UNIFormer 本文主要介绍了UniFormer: Unified Transformer for Efficient Spatial-Temporal Representation Learning 代码&#xff1a;https://git…

购买腾讯云服务器需要多少钱?价格表查询

腾讯云服务器多少钱一年&#xff1f;61元一年起。2024年最新腾讯云服务器优惠价格表&#xff0c;腾讯云轻量2核2G3M服务器61元一年、2核2G4M服务器99元一年可买三年、2核4G5M服务器165元一年、3年756元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、312元一年、8核…

Python综合实战案例-数据清洗分析

写在前面&#xff1a; 本次是根据前文讲解的爬虫、数据清洗、分析进行的一个纵隔讲解案例&#xff0c;也是对自己这段时间python爬虫、数据分析方向的一个总结。 本例设计一个豆瓣读书数据⽂件&#xff0c;book.xlsx⽂件保存的是爬取豆瓣⽹站得到的图书数据&#xff0c;共 6067…

html网页制作-3D旋转卡片

网页制作-3D旋转卡片 两种旋转卡片的制作 旋转卡片&#xff08;1&#xff09; 代码 html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

Transformer的前世今生 day03(Word2Vec、如何使用在下游任务中)

前情回顾 由上一节&#xff0c;我们可以得到&#xff1a; 任何一个独热编码的词都可以通过Q矩阵得到一个词向量&#xff0c;而词向量有两个优点&#xff1a; 可以改变输入的维度&#xff08;原来是很大的独热编码&#xff0c;但是我们经过一个Q矩阵后&#xff0c;维度就可以控…

linux命令(八)

搜索 其实很多人使用linux的是因为服务器是linux系统&#xff0c;既然是服务器&#xff0c;那查找日志肯定是大家用的很多的了&#xff0c;这一节就来介绍一下搜索的命令 grep 先看一下我的文件中的内容是什么 查找不包含该字符串的行 -v v代表的invert-match(不匹配的行) …

基于Java中的SSM框架实现电能计量与客户服务管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现电能计量与客户服务管理系统演示 摘要 当前时代的两个突出特征是世界经济一体化和以计算机为代表的信息技术的迅速发展。为了使组织在激烈的竞争中保持实力和发展&#xff0c;它必须对迅速变化的环境做出有效而有效的响应。 管理信息系统的应用可以提供…

202446读书笔记|《夜风颂》——生命的内核是过往和希望 有情在朝暮 长聚长相思

202446读书笔记|《夜风颂》——生命的内核是过往和希望 有情在朝暮 长聚长相思 序现代诗古体诗 《夜风颂》作者王锴&#xff0c;前段时间加入书架的书&#xff0c;前边有几首现代诗挺惊艳&#xff0c;蛮喜欢的&#xff0c;后边古体诗稍逊色些。值得一读的一本小诗集。 序 海鸥之…

11.创建后台系统项目

后台系统项目 兼容性 vite官网&#xff1a;https://vitejs.dev/ vite中文网&#xff1a;https://cn.vitejs.dev/ vite需要node.js版本 >14.0.0&#xff0c;建议16 node -v 查看版本号 创建项目 进入存放目录 执行命令 npm create vitelatest 选择vue框架 选择typescript…

缓存穿透、缓存击穿、缓存雪崩及其解决方法

缓存穿透、缓存击穿、缓存雪崩是redis的三大问题。 在介绍这三大问题之前&#xff0c;我们需要先了解Redis作为一个缓存中间件&#xff0c;在项目中是如何工作的。首先看一下在没有缓存中间件的时候的系统数据访问的架构图&#xff1a; 客户端发起一个查询请求的时候&#xff…

一个软开关,长按开机,自动关机的实现。

连接说明&#xff1a; 1.ADP_PWR接适配器输入插座 当适配器插入的时候 ADP_PWR接入适配器7.4~8.4V电压 2.ON/OFF_KEY 接开关按键&#xff0c;当开关按下的时候&#xff0c;ON/OFF_KEY 接入电池电压 7.4V 3.ON/OFF_CTRL接单片机IO口 开机实现说明&#xff1a; 1.长按开…

存储随笔原创科普视频首播~

一周之前&#xff0c;存储随笔创建了B站账号。小编利用上个周末休息时间专门研究了B站视频录制的各种方案。发现并没有想象的很容易&#xff0c;先花了很长时间准备了一个PPT&#xff0c;再准备演讲大纲&#xff0c;最终磕磕绊绊完成了首期原创视频录制&#xff01; 可能不尽如…

Mybatis中显示插入数据成功,但在数据库中却没有显示插入的数据

1、在mybatis-config.xml中查看是否添加了JDBC&#xff0c;并引入了映射文件 2、在测试文件中&#xff0c;结尾是否添加提交事务&#xff1a;sqlSession.commit() 添加了这一步就能够将数据提交到数据库中&#xff0c;最后再关闭事务&#xff1a;sqlSession.close() * 如果运…

基于SpringBoot校园外卖服务系统设计与实现

点赞收藏关注 → 私信领取本源代码、数据库 一、项目概述 项目名称&#xff1a;基于SpringBoot校园外卖服务系统设计与实现 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 主要技术&#xff1a;SpringBootMybatisMySQL 运行环境&#xff1a;Windows7以上、J…

Windows Server 2016 配置NTP客户端

目录 1. 前提条件1.1 进入服务管理界面1.2 开启Windows Time服务 2. 情况1&#xff1a;可以直接设置NTP时钟2.1 Internet时间设置 3. 情况2&#xff1a;有的版本服务器上没有“Internet时间”3.1 运行gpedit.msc 打开本地策略组3.2 Windows 时间服务3.3 配置Windows NTP客户端3…

Replidec:使用朴素贝叶斯分类器从宏基因组数据中识别病毒生命周期

Replidec - Use naive Bayes classifier to identify virus lifecycle from metagenomics data | bioRxivReplidec - Use naive Bayes classifier to identify virus lifecycle from metagenomics data | bioRxiv 安装 docker pull denglab/replidec 使用 for i in *_vOT…

draw.io 去除箭头

问题 draw.io 去除箭头 详细问题 笔者使用draw.io绘制流程图&#xff0c;需要没有箭头的连接器&#xff0c;但是General所提供的连接器添加了尾部箭头&#xff0c;如何取消尾部箭头? 解决方案 1、点击选中选择连接器&#xff08;箭头1&#xff09;。在格式面板的“Style…

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

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

keepalived高可用方案

keepalived概念 keepalived是一个开源的虚拟路由冗余协议&#xff08;VRRP&#xff09;实现&#xff0c;它能够提供高可用性&#xff08;HA&#xff09;的解决方案。VRRP是一种网络协议&#xff0c;用于在多个路由器之间分配路由任务&#xff0c;以保证网络的可靠性。在服务器…