SecretFlow 环境安装与部署
SecretFlow环境的安装和部署指南,包括仿真模式和生产模式的配置方法。
1. 环境安装
要安装SecretFlow环境,请按照以下步骤操作:
1.1 创建并激活Conda环境
-
创建名为
sf
的新Conda环境,并指定Python版本为3.8:conda create -n sf python==3.8
-
激活新创建的
sf
环境:conda activate sf
1.2 安装SecretFlow库
在激活的Conda环境中,使用pip安装SecretFlow库:
pip install -U secretflow
2. 部署模式
SecretFlow支持两种部署模式:仿真模式和生产模式。两者的对比如下表所示。
部署模式 | 场景 | 如何部署Ray | 如何运行代码 | 代码差异 |
---|---|---|---|---|
仿真模式 | 单机构内部局域网环境下的仿真实验。 | 由多个仿真节点组成的单个Ray集群。 | 选择任一节点执行一遍代码。 | 在 sf.init 中填写 parties 参数。 |
生产模式 | 正式生产环境,比如多个机构协作。 | 每个机构都需要独立部署各自的Ray集群。 | 每个机构都需要同时执行代码。 | 在 sf.init 中填写 cluster_config 参数,剩余代码与仿真模式完全一样。 |
2.1 仿真模式
仿真模式适用于单机构内部局域网环境下进行仿真实验,包括单机仿真和集群模式仿真。
2.1.1 单机仿真
单机仿真模式下,使用以下代码在本地环境启动SecretFlow仿真:
2.1.2 集群模式仿真
在隐语的集群仿真模式下,每个Ray节点模拟一个机构,具体做法是通过给每个Ray节点添加机构名称标记,从而保证机构的计算被调度到相应的Ray节点上。 整体通信网络如下。
集群模式仿真允许在多个节点上进行仿真,模拟多机构环境。首先,在一台机器上启动主节点,然后在其他机器上启动更多节点并加入主节点构成的集群。
启动主节点
在第一台机器上,执行以下命令启动带有“alice”标识的主节点:
ray start --head --node-ip-address="127.0.0.1" --port="9001" --resources='{"alice": 16}' --include-dashboard=False --disable-usage-stats
启动其他节点
在另一台机器上,执行以下命令启动带有“bob”标识的节点,该节点会自动连接到主节点并加入集群:
ray start --address="127.0.0.1:9001" --resources='{"bob": 16}' --disable-usage-stats
当屏幕输出中出现 “Ray runtime started.” 意味着节点启动成功。现在由两个Ray节点构成的Ray集群已经搭建完毕。其中,头节点模拟机构alice,从节点模拟机构bob。你也可以继续重复上述步骤以启动带有其他参与方标识的节点
启动SecretFlow
现在你可以启动SecretFlow。下面这段代码表示alice和bob分别执行了一个返回输入值的函数。
提示
- 请使用主节点的
node-ip-address
和port
填充sf.init
的address
参数。 - 如果你启动了更多的节点(比如carol、davy等),记得在
parties=['alice', 'bob']
参数中添加新的参与方名称。
2.2 生产模式
生产模式适用于正式的生产环境,尤其是多个机构需要协作的场景。在生产模式下,每个参与方都需要独立部署自己的Ray集群,并且所有参与方需要同时运行代码。 与此同时,每一个参与方都要同时执行代码,才能完成任务的协作 。生产模式的架构如下图所示。
2.2.1 创建跨机构的SecretFlow集群
提示
- 请使用主节点的
node-ip-address
和port
填充sf.init
的address
参数。 alice
的address
请填写可以被bob访通的地址,并且选择一个 未被占用的端口 ,注意不要和Ray和SPU的端口冲突。bob
的address
请填写可以被alice访通的地址,并且选择一个 未被占用的端口 ,注意不要和Ray和SPU的端口冲突。- 注意
self_party
为 自己 。 - 请注意sf.init不需要提供
parties
参数,而是需要提供cluster_config
来描述两个机构之间的通信地址和端口。 - 为了确保alice和bob的端口能够被对方访问同时系统的防火墙不被关闭,您应该把alice和bob的IP地址加入到对方的IP白名单
- telnet 命令通常用于测试端口的可访问性。
在alice节点上启动SecretFlow
- Alice首先启动自己的Ray集群。
- 使用集群配置初始化SecretFlow,
self_party
字段修改为alice
并运行代码。确保cluster_config
参数正确配置,包括各参与方的通信地址和端口。
cluster_config = {
'parties': {
'alice': {'address': 'ip:port of alice', 'listen_addr': '0.0.0.0:port'},
'bob': {'address': 'ip:port of bob', 'listen_addr': '0.0.0.0:port'}
},
'self_party': 'alice'
}
sf.init(address='alice ray head node address', cluster_config=cluster_config)
# 在这里运行你的代码
在bob节点上启动SecretFlow
- Bob首先启动自己的Ray集群,使用类似于alice节点的命令。
- Bob使用和Alice类似的集群配置初始化SecretFlow,
self_party
字段修改为bob
,然后运行代码。
cluster_config = {
'parties': {
'alice': {'address': 'ip:port of alice', 'listen_addr': '0.0.0.0:port'},
'bob': {'address': 'ip:port of bob', 'listen_addr': '0.0.0.0:port'}
},
'self_party': 'bob'
}
sf.init(address='bob ray head node address', cluster_config=cluster_config)