隐私计算开源如何助力数据要素流通

黎大陈泽坤 2024-04-03 20:25:13

1.SecretFlow的安装
SecretFlow运行要求
python>=3.8
操作系统
CentOS 7
anolis8
Ubuntu 18.04/20.04
macOS 11.1+
WSL2
资源:≥8核16GB
SecretFlow安装包
Secretflow:1.包含SecretFlow所有的requirements    2.体积较大
SecretFlow—lite:1.仅包含基础功能(不包含深度学习等依赖库)   2.体积较小  
SecretFlow的安装方式
1.docker镜像:docker hub:1.docker run-it secretflow-anolis8:latest
                                            2.docker run-it secretflow-lite-anolis8:latest
                         阿里云:docrer run-it secretflow-registy.cn-
                                       hanzhou.cr.aliyuncs.com/ secretflow-anolis8:latest
                                       docrer run-it secretflow-registy.cn-
                                        hanzhou.cr.aliyuncs.com/ secretflow-lite-anolis8:latest
2.pypi:pip install-U secretfiow
              pip install-U secretfiow-lite
注意:1.要求pip≥19.3   2.建议使用conda管理python环境
3.源码:1.下载源码并建立python虚拟环境
                 git cione https://github.com/secrertflow,git
                 cd secertfiow
                 conda create-n secertflow python==3.8
                 conda activate secertflow 
              2.安装secertflow
                  #涉及C++编译,建议使用镜像secretflow/release-ci:latest
                  python sertup.py bdist_wheel
                  pip install dist/✳.wht
  注意:1.要求pip≥19.3  2.建议使用conda管理python环境
2.secertflow 部署—仿真模式

快速验证
仿真模式
适合仿真实验,验证代码效果
既支持单机仿真,也支持多机仿真
只需要执行一次代码

极少量修改

安全生产
生产模式
适合生产使用
安全增强
需要每一个参与方都执行代码
SecretFlow和Ray
SecretFlow
SecretFlow使用Ray作为分布式计算调度架,

RAY
Ray集群由一个主节点和零或若干个从节点组成
仿真模式-单机仿真
单个的个节点模拟alice、bob两个参与方
addross=locul':表示启动一个本地的Ray节点
>>>lmport secretflow as sf
>>>sf.init(parties=[ alice', bob'], address-local)
>>>alice = sf pyu('bob') 
>>>bob=sf PYU('bob')
>>>alice(lambda x : x + 1)(2)
<secretow,device.device.pyu.pyuObject object at 0x7fe932a1a640>
>>>bob(lambda k:x-1)(2)
<secretow,device,device,pyu.pyuobject object at 0x7feofaf03250>
仿真模式-集群仿真
部署两个节点,分别模拟alice、bob两个参与方
1.在第一台机器上部署Ray主节点,模拟参与方alice
填写真的主节点ip和port
ray start --head \
--node-ip-address="{ip}" --port="{port) "\
--resources='{"alice": 16}'\
-include-dashboard=False
--disable-usage-stats
2.在第二台机器上部署Ray从节点,模拟参与方bob
address填写Ray主节点ip和port
ray start \
-address="{Ray主节点的通信地址}"
-resources=' {"bob": 16}'\
-include-dashboard=False
--disable-usage-stats
3.执行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>
)4.创建密态设备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': spuspu pb2.FM128,
           'sigmoid mode':spu.spu pb2.RuntimeConfig.SIGMOID REAL,
    )
)
spu = sf.S\PU(cluster_def=cluster_def)
3.secertflow 部署-生产模式

vs仿真模式
相比仿真模式,生产模式主要不同:安全增强
每一个参与方都是独立的Ray集群
所有参与方都需要执行代码
生产模式
部署两个节点,分别模拟alice、bob两个参与方
1.在第一台机器上部署Ray主节点,模拟参与方alice
填写真的主节点ip和port
ray start --head \
--node-ip-address="{ip}" --port="{port} "\
--resources='{"alice": 16}'\
--include-dashboard=False \
--disable-usage-stats
2.在第二台机器上部署Ray主节点,模拟参与方bob
填写真的主节点ip和port
ray start --head \
-node-ip-address="{ip}" --port="{port} "\
--resources='{"alice": 16}'\
-include-dashboard=False\
--disable-usage-stats
3.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 bob)'
cluster config=cluster config)
4.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 alice)',
cluster config=cluster config)
)5 创建密态设备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解决多端口问题
KUSCIA定位:屏蔽不同机构间基础设施的差异,为跨机构协作提供丰富且可靠的资源管理和任务调度能力。
SPU、Ray通信多端口

统一网络基础设施

KUSCIA
F&Q

Q:镜像下载很慢或者失败
    可以使用隐语阿里云的镜像。(前文有介绍)
Q:python包下载很慢
   建议使用国内的pypi源。
Q:网络报错,比如服务启动失败等
   可能原因一:端口被占用
   可能原因二:端口存在冲突、
Q:发送失败或者连接失败(生产模式更常见)。
 可能原因一: 服务没启动   口检查端口是否占用
                                          口 检查端口是否存在冲突
可能原因二:多方服务启动不同步
                  调整连接参数(比如超时、重试次数)
                   https://www.secretflow.org.cn/docs/secretflow/latest/zh-Hans/source/secretflow#secretflow.init
                  https://www,secretfow.org.cn/docs/secretflow/lates/zh- Hans/source/secretflow#secretflow.SPU
Q:我使用docker模式运行SecretFlow集群,需要注意什么?
  1.非常建议使用host网络模式
  2.(如果不能使用host网络)那么请在一台机器上运行多个docker容器使用同一个docker network连

...全文
28 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

480

社区成员

发帖
与我相关
我的任务
社区描述
隐语开源社区,隐私计算开发者交流和讨论的平台。
密码学可信计算技术安全 企业社区
社区管理员
  • 隐语SecretFlow
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【最新活动】

3月18日:隐私计算实训营第一期

试试用AI创作助手写篇文章吧