[隐私计算学习笔记]4——SecretFlow与SecretNote的安装部署

目录

1. SecretFlow介绍

2. 安装(亲测)

2.1 运行要求

2.2 安装方式

2.2.1 方式一:docker镜像

2.2.2 方式二:pypi

2.2.3 方式三:源码安装

3. 部署

3.1 前置知识——SecretFlow和Ray

3.2 仿真模式——实现快速验证

3.2.1单机仿真

3.2.2 集群仿真

3.3 生产模式——实现安全生产

4.关于SecretNote

5. 小结


1. SecretFlow介绍

SecretFlow是一个隐私保护数据分析和机器学习的统一框架,提供:

  • 设备抽象,将多方安全计算(MPC)、同态加密(HE)、可信执行环境(TEE)等隐私计算技术抽象为密文设备,将明文计算抽象为明文设备。
  • 基于抽象设备的计算图,使数据分析和机器学习工作流程能够表示为计算图。
  • 基于计算图的机器学习/数据分析能力,支持数据水平/垂直/混合分割等场景。

2. 安装(亲测)

        详细信息移步 SecretFlow开发者文档

2.1 运行要求

  • Python >= 3.8
  • 操作系统:CentOS 7 / Anolis8 / Ubuntu (18.04、20.04)/ macOS 11.1+ / WSL2
  • 资源:≥ 8核16GB

    本人配置:Python 3.8Ubuntu 18.0412处理器内核内存20GB

2.2 安装方式

    推荐使用Anaconda进行环境管理,创建虚拟环境过程本文不赘述。

2.2.1 方式一:docker镜像

  • 完全版本
docker run -it secretflow/secretflow-anolis8:latest

阿里云:

docker run -it secretflow-registry.cnhangzhou.cr.aliyuncs.com/secretflow-anolis8:latest

  • Lite版本
docker run -it secretflow/secretflow-lite-anolis8:latest

阿里云:

docker run –it secretflow-registry.cnhangzhou.cr.aliyuncs.com /secretflow-lite-anolis8:latest

2.2.2 方式二:pypi

  • 完全版本
pip install -U secretflow
  • Lite版本
pip install -U secretflow-lite

2.2.3 方式三:源码安装

Step1:下载源码

git clone https://github.com/secretflow/secretflow.git
cd secretflow

Step2:安装

  • 完全版本
python setup.py bdist_wheel

pip install dist/*.whl
  • Lite版本 
python setup.py bdist_wheel --lite

pip install dist/*.whl

测试SecretFlow是否安装成功,如下图安装成功显示:

3. 部署

3.1 前置知识——SecretFlow和Ray

  • Ray集群由一个主节点和零或若干个从节点组成。

“Ray is an open-source unified framework for scaling AI and Python applications like machine learning. It provides the compute layer for parallel processing so that you don’t need to be a distributed systems expert." 

        详细信息移步  Ray开发者文档

  • SecretFlow使用Ray作为分布式计算调度框架。

3.2 仿真模式——实现快速验证

特性:

  • 适合仿真实验,验证代码效果
  • 支持单机仿真、多机仿真
  • 只需执行一次代码

3.2.1单机仿真

        使用 secretflow.init 在单机模式下运行SecretFlow。该模式会直接启动只有一个节点的ray集群,并且当程序退出时会自动关闭。

示例:单个节点模拟alice、bob两个参与方

>>> import secretflow as sf
>>> sf.init(parties=['alice', 'bob'], address='local')
>>> alice = sf.PYU('alice')
>>> bob = sf.PYU('bob')
>>> alice(lambda x : x + 1)(2)
<secretflow.device.device.pyu.PYUObject object at 0x7fe932a1a640>
>>> bob(lambda x : x - 1)(2)
<secretflow.device.device.pyu.PYUObject object at 0x7fe6fef03250>

3.2.2 集群仿真

        每个Ray节点模拟一个机构,具体做法是通过给每个Ray节点添加机构名称标记,从而保证机构的计算被调度到相应的Ray节点上。 整体通信网络如下。

示例:部署两个节点,分别模拟alice、bob两个参与方 

        Step1:在第一台机器上部署Ray主节点,模拟参与方alice(自行填写主节点ip和port)

ray start –-head --node-ip-address="{ip}" --port="{port} "  --resources='{"alice": 16} ' --include-dashboard=False --disable-usage-stats

        Step2: 在第二台机器上部署Ray从节点,模拟参与方bob

ray start --address="{Ray主节点的通信地址}" --resources=' {"bob": 16} '  --disable-usage-stats

        Step3:执行Python代码

>>> import secretflow as sf
>>> sf.init(parties=['alice', 'bob'], address='{Ray主节点的通信地址}')
>>> 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>

3.3 生产模式——实现安全生产

特性:

  • 从仿真模式到生产模式只需极少量代码修改
  • 适合生产使用
  • 安全性增强
  • 每一个参与方都是独立的Ray集群
  • 需要每个参与方都执行代码

示例:部署两个节点,分别模拟alice、bob两个参与方

        Step1: 在第一台机器上部署Ray主节点,模拟参与方alice

ray start –-head --node-ip-address="{ip}" --port="{port} "  --resources='{"alice": 16} ' --include-dashboard=False --disable-usage-stats

         Step2: 在第二台机器上部署Ray主节点,模拟参与方bob

ray start –-head --node-ip-address="{ip}" --port="{port} "  --resources='{"bob": 16} ' --include-dashboard=False --disable-usage-stats

        Step3: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)

        Step4: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)

注:生产模式中可以使用KUSCIA解决多端口问题,KUSCIA屏蔽不同机构间基础设施的差异,为跨机构协作提供丰富且可靠的资源管理和任务调度能力。

4.关于SecretNote

        生产模式中需要各参与方独立执行代码,SecretNote提供同一页面执行多方代码功能,实现“单操作界面,多节点执行”,同时还可以进行多节点代码运行跟踪,提升用户体验。

        SecretNote作为工具,其安装部署及使用请参考如下资源:

5. 小结

        本篇文章详细介绍了SecretFlow的安装部署方式,并实际应用使读者可以快速上手,熟悉操作流程。同时针对SecretFlow高级工具套件SecretNote进行简要介绍,但为了文章可读性,该工具的详细安装部署流程未在本文体现,请读者按需移步相关开发文档。

(PS:感谢您读完,坚持不易,谢谢大家支持!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值