1. SecretFlow安装
1.1 环境要求
- Python>=3.8
- 操作系统
- Ubuntu18+
- 资源:>=8核16GB
- 安装包
- secretflow-lite
安装方式
- docker(推荐)
2. SecretFlow部署模式
SecretFlow使用Ray作为分布式计算调度框架。
Ray集群由一个主节点和零或若干个从节点组成。
3 仿真模式
3.1单机仿真
我们通过docker来启动secretflow,这里我安装的是secretflow/secretflow-lite-anolis8
# 运行secretflow
docker run secretflow/secretflow-lite-anolis8
# 查看containerId
docker ps
# 进入容器
docker exec -it [containerId] /bin/bash
# 进入python环境
python
单个节点模拟alice、bob两个参与方
import secretflow as sf
sf.init(parties=['alice','bob'],address='local')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
# 将明文值2通过密文计算加一的操作,得到一个密文结果
alice(lambda x:x+1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75208880>
# 将明文值2通过密文计算减一的操作,得到一个密文结果
alice(lambda x:x-1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75131f30>
3.2 集群仿真
这里我是用docker来进行集群模式的仿真,所以我需要了解一下docker网络的概念。
在这里我采用的是Host网络模式,该模式下容器和docker主机共享网络IP和端口。
3.2.1 启动主alice节点
#启动docker
docker run --rm -d -it --network host --name alice secretflow/secretflow-lite-anolis8:latest
# 查看containerId
docker ps
# 进入容器
docker exec -it [containerId] /bin/bash
#启动ray主节点
ray start --head --node-ip-address=127.0.0.1 --port=9001 --resources='{"alice": 16}' --include-dashboard=False --disable-usage-stats
注意:
- 请使用真实的ip地址和端口。
- {“alice”: 16} 意味着alice最多可以同时运行16个worker。 您可以按需要自行调整。
- 当屏幕中输出 “Ray runtime started.” 意味着主节点成功启动。
3.2.2 启动bob从节点
#启动docker
docker run --rm -d -it --network host --name bob secretflow/secretflow-lite-anolis8:latest
# 查看containerId
docker ps
# 进入容器
docker exec -it [containerId] /bin/bash
#启动ray从节点
ray start --address=127.0.0.1:9001 --resources='{"bob": 16}' --disable-usage-stats
- 请使用主节点的ip地址和端口。
- {“bob”: 16} 意味着alice最多可以同时运行16个worker。 您可以按需要自行调整。
- 当屏幕中输出 “Ray runtime started.” 意味着主节点成功启动。
3.2.3 运行代码
在任一台机器上运行代码,最后会发送到主节点进行计算。
import secretflow as sf
sf.init(parties=['alice','bob'],address='127.0.0.1:9001')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
# 将明文值2通过密文计算加一的操作,得到一个密文结果
alice(lambda x:x+1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75208880>
# 将明文值2通过密文计算减一的操作,得到一个密文结果
alice(lambda x:x-1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75131f30>
3.2.4 创建密态设备SPU
我们设置通信地址如下:(注意不能和Ray的通信地址端口冲突)
- alice的通信地址:127.0.0.1:9101
- bob的通信地址:127.0.0.1:9102
同时设置SPU的端口: - alice的SPU监听端口地址:9101
- bob的SPU监听端口地址:9102
执行以下代码
import spu
import secretflow as sf
# Use ray head adress please.
sf.init(parties=['alice', 'bob'], address='127.0.0.1:9001')
cluster_def={
'nodes': [
{
'party': 'alice',
# Please choose an unused port.
'address': '127.0.0.1:9101',
'listen_addr': '0.0.0.0:9101'
},
{
'party': 'bob',
# Please choose an unused port.
'address': '127.0.0.1:9102',
'listen_addr': '0.0.0.0:9102'
},
],
'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)
# 利用SPU来进行运算
spu(lambda x:x+1)(2)
4. 生产模式
相比仿真模式,生产模式主要是进行了安全增强:
- 每个参与方都是独立的Ray集群
- 所有参与方都需要执行代码
注意:请牢记alice和bob需要同时运行代码。
通过了解:
我们发现存在三套地址 - Ray头节点的监听地址
- alice 127.0.0.1:9001
- bob 127.0.0.1:9002
- Proxy的通信地址
- alice 127.0.0.1:9101
- bob 127.0.0.1:9102
- SPU的通信端口
- alice 9201
- bob 9202
4.1 部署步骤
在alice节点中运行如下python代码
import secretflow as sf
cluster_config ={
'parties': {
'alice': {
# replace with alice's real address.
'address': '127.0.0.1:9101',
'listen_addr': '0.0.0.0:9201'
},
'bob': {
# replace with bob's real address.
'address': '127.0.0.1:9102',
'listen_addr': '0.0.0.0:9202'
},
},
'self_party': 'alice'
}
sf.init(address='127.0.0.1:9001', cluster_config=cluster_config)
# your code to run.
之前我们的bob节点为从节点,所以需要关闭后重启为主节点。
# 关闭集群
ray stop
# 启动bob为主节点
ray start --head --node-ip-address=127.0.0.1 --port=9002 --resources='{"bob": 16}' --include-dashboard=False --disable-usage-stats
在alice节点中运行如下python代码
import secretflow as sf
cluster_config ={
'parties': {
'alice': {
# replace with alice's real address.
'address': '127.0.0.1:9101',
'listen_addr': '0.0.0.0:9201'
},
'bob': {
# replace with bob's real address.
'address': '127.0.0.1:9102',
'listen_addr': '0.0.0.0:9202'
},
},
'self_party': 'bob'
}
sf.init(address='127.0.0.1:9002', cluster_config=cluster_config)
# your code to run.
4.2 生产模式——KUSCIA解决多端口问题
5. SecretNote和SCQL安装与使用
SecretNote是专为隐语开发者打造的高级工具套件。以notebook的形式呈现,支持多节点代码执行和文件管理,同时执行运行状态追踪功能,极大地提升开发者的效率和工作体验。
https://github.com/secretflow/secretnote?spm=a2c6h.12873639.article-detail.8.20d665253mLsK9