一、SecretFlow安装
1. 运行要求
- Python >= 3.8
- 操作系统:
- CentOS 7
- Anolis8
- Ubuntu 18.04/20.04
- macOS 11.1+ (支持M1和M2芯片)
- WSL2
- 资源:≥ 8核16GB
2. SecretFlow安装包类型
SecretFlow
- 包含secretflow所有的requirements
- 体积较大
SecretFlow-lite
- 仅包含基础功能(不包含深度学习等依赖库)
- 体积较小
3. 多种安装方式
(1) 方式一:docker镜像
Docker hub
docker run -it secretflow/secretflow-anolis8:latest
docker run –it secretflow/secretflow-lite-anolis8:latest
阿里云
docker run -it secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow-anolis8:latest
docker run –it secretflow-registry.cn-hangzhou.cr.aliyuncs.com /secretflow-lite-anolis8:latest
(2) 方式二:pypi
pip install -U secretflow
pip install -U secretflow-lite
-
要求pip >= 19.3
-
建议使用conda管理python环境
(3) 方式三:源码
-
下载源码并建立Python虚拟环境
git clone https://github.com/secretflow/secretflow.git
cd secretflow
conda create -n secretflow python==3.8
conda activate secretflow
2.安装secretflow
python setup.py
bdist_wheel
pip install dist/*.whl
- 要求pip >= 19.3
- 建议使用conda管理python环境
二、SecretFlow部署—仿真模式
- 适合仿真实验,验证代码效果
- 既支持单机仿真,也支持多机仿真
- 只需要执行一次代码
1.单机仿真
单个节点模拟alice、bob两个参与方。
>>> 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)
<secretflow.device.device.pyu.PYUObject object at 0x7fe932a1a640>
>>> bob(lambda x : x - 1)(2)
<secretflow.device.device.pyu.PYUObject object at 0x7fe6fef03250>
parties表示参与方是alice和bob
address='local':表示启动一个本地的Ray节点
PYU为明文设备
2.集群仿真
部署两个节点,分别模拟alice、bob两个参与方。
a. 在第一台机器上部署Ray主节点,模拟参与方alice
ray start --head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
b. 在第二台机器上部署Ray从节点,模拟参与方bob
address填写Ray主节点ip和port,形如ip:prot
ray start \
--address="{Ray主节点的通信地址}" \
--resources=' {"bob": 16} ' \
--include-dashboard=False \
--disable-usage-stats
c. 执行python代码
在alice或者bob其中一台机器上执行即可,address填写实际Ray主节点ip和port。
>>> import secretflow as sf
>>> sf.init(parties=['alice', 'bob'], address=' {ip:port}')
>>> 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>
d.(可选) 创建密态设备SPU
对于SPU,每个参与方都有对应的SPU进程,它需要相应的监听地址。
-
填写实际的alice和bob的通信地址
-
注意不能和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部署—生产模式
对仿真模式的极少量修改,安全增强
- 每一个参与方都是独立的Ray集群
- 所有参与方都执行代码
节点部署
部署两个节点,分别模拟Alice、Bob两个参与方。
Alice节点
在第一台机器上部署Ray主节点,模拟参与方Alice。
填写真的ip与port
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
Bob节点
在第二台机器上部署Ray主节点,模拟参与方Bob。
填写真的ip与port
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"bob": 16} ' \
--include-dashboard=False \
--disable-usage-stats
Alice执行Python代码
-
cluster_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)
Bob执行Python代码
-
cluster_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': 'bob'}
sf.init(address='{Ray head node address of bob}',
cluster_config=cluster_config)
创建密态设备SPU(可选)
- 填写实际的alice和bob的通信地址,用于SPU通信
- alice和bob都需要执行这段代码
- 注意不要和Ray通信端口、SecretFlow通信端口冲突
Alice和Bob都需要加入以下内容:
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
屏蔽不同机构间基础设施的差异,为跨机构协作提供丰富且可靠的资源管理和任务调度能力。
五、SecretNote
-
和jupyter notebook操作类似的使用方法
-
单操作界面,多节点代码自动执行
-
多节点代码运行跟踪
部署
(1)使用pypi方式下载安装
pip install secretnote
(2)启动
secretnote --ServerApp.port 8889
(3)在界面中添加节点