文章目录
- 一、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两个参与方。
- 在第一台机器上部署Ray主节点,模拟参与方alice(填写真的主节点ip和port),resources{“标记名”,计算资源数}。
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
- 在第二台机器上部署Ray从节点,模拟参与方bob(address填写Ray主节点ip和port)。
ray start \
--address="{Ray主节点的通信地址}" \
--resources=' {"bob": 16} ' \
--include-dashboard=False \
--disable-usage-stats
- 执行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>
- 创建密态设备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两个参与方。
通信网络:
- 在第一台机器上部署Ray主节点,模拟参与方alice(填写真的主节点ip和port)。
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
- 在第二台机器上部署Ray主节点,模拟参与方bob(填写真的主节点ip和port)。
ray start –-head \
--node-ip-address="{ip}" --port="{port} " \
--resources='{"bob": 16} ' \
--include-dashboard=False \
--disable-usage-stats
- 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)
- 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)
- 创建密态设备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
- 与Notebook一致的使用体验,可以在代码单元写代码,所见即所得去执行;
- 单操作界面,多节点代码自动执行;
- 多节点代码运行状况跟踪;