第4课,SecretFlow与Secretnote的安装部署
SecretFlow安装
环境要求
- Python >= 3.8
- 操作系统
- CentOS 7
- Anolis8
- Ubuntu 18.04/20.04
- macOS 11.1+
- WSL2
- 资源:≥ 8核16GB
这里我使用的环境是 Ubuntu 20,Python == 3.10.11
安装方式
- 方式一:docker镜像
- 方式二:pypi
- 方式三:源码
这里我使用pypi安装,因为比较方便,其他安装方式 见隐语 · 实训社区 (secret-flow.com)
使用pip直接安装即可
pip install secretflow
SecretFlow部署模式
一个由快速验证到安全生产的过程
SecretFlow使用Ray作为分布式计算调度框架。Ray集群由一个主节点和零或若干个从节点组成
仿真模式 – 单机仿真
单个节点模拟alice、bob两个参与方
address=‘local’:表示启动一个本地的Ray节点
import secretflow as sf
sf.init(parties=['alice', 'bob'], address='local')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
alice(lambda x : x + 1)(2)
bob(lambda x : x - 1)(2)
实机执行结果
仿真模式 – 集群仿真
部署两个节点,分别模拟alice、bob两个参与方
- 在第一台机器上部署Ray主节点,模拟参与方alice
填写真的主节点ip和port, 因为只有一台服务器,所以填本地的
ray start --head \
--node-ip-address="127.0.0.1" --port="65534" \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
运行结果
- 在第二台机器上部署Ray从节点,模拟参与方bob
address填写Ray主节点ip和port
ray start \
--address="127.0.0.1:65534" \
--resources=' {"bob": 16} ' \
--disable-usage-stats
运行结果
- 执行python代码
在alice或者bob其中一台机器上执行即可。
import secretflow as sf
sf.init(parties=['alice', 'bob'], address='127.0.0.1:65534')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
alice(lambda x : x)(2)
bob(lambda x : x)(2)
运行结果
- 创建密态设备SPU
填写实际的alice和bob的通信地址
import spu
cluster_def = {
'nodes': [{
'party': 'alice',
'address': '127.0.0.1:65534',
}, {
'party': 'bob',
'address': '127.0.0.1:65534',
},
],
'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部署 – 生产模式
相比仿真模式,生产模式主要不同:安全增强
- 每一个参与方都是独立的Ray集群
- 所有参与方都需要执行代码
部署两个节点,分别模拟alice、bob两个参与方,此步骤与集群仿真相同,然后需要Alice 和Bob 分别执行代码
alice执行python代码
- cliuster_config中的address分别填写alice/bob的通信地址
- 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)
bob执行python代码
- cliuster_config中的address分别填写alice/bob的通信地址
- 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)
创建密态设备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解决多端口问题
KUSCIA定位 屏蔽不同机构间基础设施的差异,为跨机构协作提供丰富且可靠的资源管理和任务调度能力。
使用SecretNote提升体验
所有参与方都需要执行代码, 能否像Jupyter Notebook一样在 一个页面上执行多方代码?
使用SecretNote