SecretFlow安装
环境要求:
-
Python >=3.8
-
OS
-
CentOS 7
-
Anolis8
-
Ubuntu 18.04/20.04
-
MacOS 11.1+
-
WSL2
-
-
资源:>=8核16GB
SecretFlow
-
包含secretflow所有的requirements
-
体积较大
SecretFlow-lite
-
仅包含基础功能(不包含深度学习等依赖库)
-
体积较小
三种安装方式
-
Docker镜像
#完全版
docker run -it secretflow/secretflow-anolis8:latest
#lite版
docker run -it secretflow/secretflow-lite-anolis8:latest
-
pypi
pip install -U secretflow
pip install -U secretflow-lite
-
pip>=19.3
-
建议使用conda管理python环境
-
源码
#下载源码建立Python虚拟环境
git clone https://github.com/secretflow/secretflow.git
cd secretflow
conda create -n secretflow python=3.8
conda activate secretflow
#安装SecretFlow
#完整版
python setup.py bdist_wheel
pip install dist/*.whl
#lite版
python setup.py bdist_wheel --lite
pip install dist/*.whl
SecretFlow部署-仿真模式
-
适合仿真实验,验证代码效果
-
既支持单机仿真,也支持多机仿真
-
只需要执行一次代码
单机仿真
单个节点模拟alice,bob两个参与方
import secret flow as sf
#address='local' 表示启动一个本地Ray节点
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
ray start --head\ #ip、port对应于主机的ip与port --node-ip-address="{ip}" --port="port"\ --resources='{"alice":16}'\ --include-dashboard=False\ --disable-usage-stats
-
在第二台机器上部署Ray从节点,模拟参与方bob
ray start\ --address="{Ray主节点的通信地址}"\ --resources='{"bob":16}'\ --include-dashboard=False\ --disable-usage-stats
-
执行Python代码
任意一方执行即可
import secretflow as sf #address填写实际Ray主节点ip和port sf.init(parties=['alice','bob'],address='ip:port') alice=sf.PYU('alice') bob=sf.PYU('bob') alice(lambda x:x)(2) bob(lambda x:x)(2)
-
(可选)创建密态设备SPU
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.SIGMOD_REAL } } spu=sf.SPU(cluster_def=cluster_def)
SecretFlow部署-生产模式
与仿真模式相比:
-
每一个参与方都是独立的Ray集群
-
所有参与方都需要执行代码
部署两个节点,分别模拟alice,bob两个参与方
-
在第一台机器上部署Ray主节点,模拟参与方alice
ray start --head\ #ip、port对应于主机的ip与port --node-ip-address="{ip}" --port="port"\ --resources='{"alice":16}'\ --include-dashboard=False\ --disable-usage-stats
-
在第二台机器上部署Ray从节点,模拟参与方bob
ray start\ --address="{Ray主节点的通信地址}"\ --resources='{"bob":16}'\ --include-dashboard=False\ --disable-usage-stats
-
alice执行python代码
import secretflow as sf cluster_config={ 'parties':{ 'alice':{'address':'ip:port of alice'}, 'bob':{'address':'ip:port of bob'} }, 'self_party':'alice' } sf.init( #填写Alice的ray主节点ip和port address='{Ray head node address of bob}', cluster_config=cluster_config )
-
bob执行Python代码
import secretflow as sf cluster_config={ 'parties':{ 'alice':{'address':'ip:port of alice'}, 'bob':{'address':'ip:port of bob'} }, 'self_party':'bob' } sf.init( #填写bob的ray主节点ip和port address='{Ray head node address of alice}', cluster_config=cluster_config )
-
(可选)创建密态设备SPU
aliceh和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.SIGMOD_REAL } } spu=sf.SPU(cluster_def=cluster_def)
使用KUSCIA解决多端口问题
屏蔽不同机构间基础设施的差异,为跨机构协作提供丰富且可靠的资源管理和任务调度能力。
SecretNote使用
GitHub - secretflow/secretnote
下载到本地
在secretnote-main/docker/sim
下使用docker启动secretnote服务
docker compose up
在浏览器使用公网ip连接secretflow
查看公网ip:
ifconfig
找到对应于docker的公网ip
添加alice节点(使用自己主机的公网ip地址)
添加bob节点
我们需要一个数据集来构建垂直分区的场景。可以点击下面的两个链接下载数据集。
对应参与方上传文件
我们继
继续点击下面的链接下载一份示例代码,然后导入到 Notebook 列表中。
逐个运行实例程序,得到psi结果