• [隐私计算学习笔记]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:下载源码

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

    Step2:安装

    • 完全版本
    1. python setup.py bdist_wheel
    2. pip install dist/*.whl
    • Lite版本 
    1. python setup.py bdist_wheel --lite
    2. 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两个参与方

    1. >>> import secretflow as sf
    2. >>> sf.init(parties=['alice', 'bob'], address='local')
    3. >>> alice = sf.PYU('alice')
    4. >>> bob = sf.PYU('bob')
    5. >>> alice(lambda x : x + 1)(2)
    6. object at 0x7fe932a1a640>
    7. >>> bob(lambda x : x - 1)(2)
    8. 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代码

    1. >>> import secretflow as sf
    2. >>> sf.init(parties=['alice', 'bob'], address='{Ray主节点的通信地址}')
    3. >>> alice = sf.PYU('alice')
    4. >>> bob = sf.PYU('bob')
    5. >>> alice(lambda x : x)(2)
    6. object at 0x7fe932a1a640>
    7. >>> bob(lambda x : x)(2)
    8. 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
    1. import secretflow as sf
    2. cluster_config ={
    3. 'parties': {
    4. 'alice’: {'address': 'ip:port of alice'},
    5. 'bob': {'address': 'ip:port of bob'},
    6. },
    7. 'self_party': 'alice',
    8. }
    9. 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
    1. import secretflow as sf
    2. cluster_config ={
    3. 'parties': {
    4. 'alice’: {'address': 'ip:port of alice'},
    5. 'bob': {'address': 'ip:port of bob'},
    6. },
    7. 'self_party': 'bob',
    8. }
    9. sf.init(address='{Ray head node address of bob}',cluster_config=cluster_config)

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

    4.关于SecretNote

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

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

    5. 小结

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

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

  • 相关阅读:
    《模拟联合国2.9—团队协作》
    java-net-php-python-jsp宠物寄养系统计算机毕业设计程序
    2023年05月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
    Jenkins CI/CD 流程
    windows的批量解锁
    如何搭建一个好看的github主页
    【Vue】V-if成立时,元素出现;不成立时,元素不显示。
    引流、变现、留存解决方案—“消费”+“分享”的聚合生态-分享购
    1.浏览器架构
    什么是多维数组?怎样定义多维数组?
  • 原文地址:https://blog.csdn.net/weixin_42551843/article/details/139703984