隐私计算-7

作者:王树森(信息安全硕士、CKA&CKS讲师、DevOps master、...)

1.2.2 简单实践

这一节,我们从 实践解读、仿真实践、小结 三个方面来学习。

实践解读

SecretFlow提供了仿真和生产两种部署模式,两者的对比如下表所示。

部署模式场景如何部署Ray如何运行代码代码差异
仿真模式单机构内部局域网环境下的仿真实验。由多个仿真节点组成的单个Ray集群。选择任一节点执行一遍代码。sf.init 中填写 parties 参数。
生产模式正式生产环境,比如多个机构协作。每个机构都需要独立部署各自的Ray集群。每个机构都需要同时执行代码sf.init 中填写 cluster_config 参数,剩余代码与仿真模式完全一样。
仿真模式 
    - 用于快速验证代码效果,可以仅在一台机器上部署代码即可;
生产模式 
    - 针对安全生产设计,主要作了安全增强,必须由多个参与方组成。
    - 每一个参与方都是独立的Ray集群,所有参与方都需要执行代码,才能完成任务的协作。
    
    仿真模式和生产模式在核心层面基本上没有太大的差别,甚至,我们只需要通过对仿真模式进行些许的补丁修改,就可以切换到生产模式。

SecretFlow & Ray

    Ray集群由一个主节点和零或若干个从节点组成的分布式计算框架。隐语SecretFlow使用Ray作为分布式计算调度框架。
Ray更多介绍:https://docs.ray.io/en/latest/
​
    SecretFlow被设计为可以快速仿真,既可以单机运行,也可以在多个节点上运行。也就是说,仿真模式下,我们可以只使用一个Ray集群即可,但是在生产模式下,必须采用多个Ray集群同时作业。

仿真实践

定制两个环境

docker命令方式:
docker run --name=alice --hostname=alice -it secretflow/secretflow-anolis8 
docker run --name=bob --hostname=bob -it secretflow/secretflow-anolis8 
docker-compose方式:
services:
  alice:
    image: 'secretflow/secretflow-anolis8'
    hostname: alice
  bob:
    image: 'secretflow/secretflow-anolis8'
    hostname: bob
  • 单机仿真实践

命令行方式实践

在任意一个容器终端中,
[root@alice ~]# python
Python 3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
# 导入模块
>>> import secretflow as sf
# 使用 secretflow.init 在单机模式下运行SecretFlow
# 该模式会直接启动只有一个节点的ray集群,并且当程序退出时会自动关闭。
# 使用parties来设定多个参与方
>>> sf.init(parties=['alice', 'bob'], address='local')
# 定制两个对象
>>> alice = sf.PYU('alice')
>>> bob = sf.PYU('bob')
>>> print(alice(lambda x : x + 1)(2))
<secretflow.device.device.pyu.PYUObject object at 0x7f99320165f0>
>>> print(bob(lambda x : x + 1)(2))
<secretflow.device.device.pyu.PYUObject object at 0x7f9984f3b490>
>>>

文件方式实践

在任意一个容器终端中,
创建一个python文件 test.py文件,来实现单个节点模拟alice、bob两个参与方,内容如下
import secretflow as sf
 
sf.init(parties=['alice', 'bob'], address='local')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
print(alice(lambda x : x + 1)(2))
print(bob(lambda x : x + 1)(2))
​
代码解析:
    address='local':表示启动一个本地的Ray节点
执行文件效果
[root@alice ~]# python test.py
...
2024-03-28 12:51:16,262 INFO worker.py:1724 -- Started a local Ray instance.
<secretflow.device.device.pyu.PYUObject object at 0x7f155a410a60>
<secretflow.device.device.pyu.PYUObject object at 0x7f15ad31f460>
  • 集群仿真实践

    在隐语的集群仿真模式下,每个Ray节点模拟一个机构,具体做法是通过给每个Ray节点添加机构名称标记,从而保证机构的计算被调度到相应的Ray节点上。

执行如下命令来模拟alice参与方,内容如下
[root@alice ~]# ray start --head \
--node-ip-address="127.0.0.1" --port="8080" \
--resources='{"alice": 16} ' \
--include-dashboard=False \
--disable-usage-stats
# 注意: {"alice": 16} 意味着alice最多可以同时运行16个worker
...
Usage stats collection is disabled.
​
Local node IP: 172.17.0.2
...
--------------------
Ray runtime started.  # 输出 “Ray runtime started.” 意味着主节点成功启动
--------------------
​
Next steps
  To add another node to this Ray cluster, run
    ray start --address='172.17.0.2:8080'
​
  To connect to this Ray cluster:
    import ray
    ray.init(_node_ip_address='172.17.0.2')
​
  To terminate the Ray runtime, run
    ray stop
​
  To view the status of the cluster, use
    ray status
在另一台机器上启动带有 “bob” 标志的节点。 这个节点将会连接主节点并加入集群。请将 ip:port 更换为主节点的 node-ip-address 和 port。内容如下
[root@bob ~]# ray start \
--address="172.17.0.2:8080" \
--resources=' {"bob": 16} ' \
--disable-usage-stats
...
--------------------
Ray runtime started.  # 出现 “Ray runtime started.” 意味着节点启动成功。
--------------------
​
To terminate the Ray runtime, run
  ray stop
  
结果解析:
    现在由两个Ray节点构成的Ray集群已经搭建完毕。其中,头节点模拟机构alice,从节点模拟机构bob。
    我还可以继续重复上述步骤以启动带有其他参与方标识的节点。
alice节点查看ray集群状态
[root@alice ~]# ray status
======== Autoscaler status: 2024-03-29 02:02:05.625674 ========
Node status
---------------------------------------------------------------
Active:
 1 node_d8475a8b0143d335c500795eb94d9e4afeb00a62128d7ee848f0f72c
 1 node_c887c85d7359f2ea427aa2919b171934d612bd26d6b0a2272679b742
...
bob节点查看ray集群状态
[root@job ~]# ray status
======== Autoscaler status: 2024-03-29 02:02:00.615200 ========
Node status
---------------------------------------------------------------
Active:
 1 node_d8475a8b0143d335c500795eb94d9e4afeb00a62128d7ee848f0f72c
 1 node_c887c85d7359f2ea427aa2919b171934d612bd26d6b0a2272679b742
...

启动SecretFlow

在alice或者bob其中一台机器上执行Test2.py文件,文件内容如下:
[root@bob ~]# cat test2.py
import secretflow as sf
​
sf.init(parties=['alice', 'bob'], address='172.17.0.2:8080')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
print(alice(lambda x: x + 1)(2))
print(bob(lambda x: x + 1)(2))
代码解析:
    address 指的是 实际Ray主节点ip和port
    如果启动了更多的节点,记得在parties=['alice', 'bob']参数中添加新的参与方名称
    
执行效果
[root@bob ~]# python test2.py
2024-03-28 13:00:10,059 INFO worker.py:1540 -- Connecting to existing Ray cluster at address: 172.17.0.2:8080...
2024-03-28 13:00:10,079 INFO worker.py:1724 -- Connected to Ray cluster.
<secretflow.device.device.pyu.PYUObject object at 0x7fc2fc773be0>
<secretflow.device.device.pyu.PYUObject object at 0x7fc2f0756fe0>

关闭集群

关闭集群时,在所有机器上执行关闭命令。
​
关闭bob节点,并查看效果
[root@bob ~]# ray stop
Stopped all 2 Ray processes.
[root@alice ~]# ray status
======== Autoscaler status: 2024-03-29 02:21:43.102713 ========
Node status
---------------------------------------------------------------
Active:
 1 node_c887c85d7359f2ea427aa2919b171934d612bd26d6b0a2272679b742
Pending:
 ...
 
关闭alice节点,并查看效果
[root@alice ~]# ray stop
Stopped all 6 Ray processes.
注意:
    因为主节点关闭了,所以就无法查看 ray status了

小结

   

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值