【隐私计算实训营——004上手隐语SecretFlow和SecretNote安装部署】

本文详细介绍了SecretFlow的安装、部署模式,包括单机和集群仿真,以及从仿真到生产模式的安全增强过程。重点讲解了如何使用Docker和Ray构建分布式系统,以及高级工具SecretNote和SCQL的安装与使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. SecretFlow安装

1.1 环境要求

  • Python>=3.8
  • 操作系统
    • Ubuntu18+
  • 资源:>=8核16GB
  • 安装包
    • secretflow-lite

安装方式

  • docker(推荐)

2. SecretFlow部署模式

在这里插入图片描述
SecretFlow使用Ray作为分布式计算调度框架。
Ray集群由一个主节点和零或若干个从节点组成。

3 仿真模式

在这里插入图片描述

3.1单机仿真

我们通过docker来启动secretflow,这里我安装的是secretflow/secretflow-lite-anolis8

# 运行secretflow
docker run secretflow/secretflow-lite-anolis8
# 查看containerId
docker ps
# 进入容器
docker exec -it [containerId] /bin/bash
# 进入python环境
python

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

import secretflow as sf
sf.init(parties=['alice','bob'],address='local')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
# 将明文值2通过密文计算加一的操作,得到一个密文结果
alice(lambda x:x+1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75208880>
# 将明文值2通过密文计算减一的操作,得到一个密文结果
alice(lambda x:x-1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75131f30>

3.2 集群仿真

这里我是用docker来进行集群模式的仿真,所以我需要了解一下docker网络的概念。
在这里我采用的是Host网络模式,该模式下容器和docker主机共享网络IP和端口。

3.2.1 启动主alice节点

#启动docker
docker run --rm -d -it --network host --name alice secretflow/secretflow-lite-anolis8:latest
# 查看containerId
docker ps
# 进入容器
docker exec -it [containerId] /bin/bash
#启动ray主节点
ray start --head --node-ip-address=127.0.0.1 --port=9001 --resources='{"alice": 16}' --include-dashboard=False --disable-usage-stats

注意:

  1. 请使用真实的ip地址和端口。
  2. {“alice”: 16} 意味着alice最多可以同时运行16个worker。 您可以按需要自行调整。
  3. 当屏幕中输出 “Ray runtime started.” 意味着主节点成功启动。

3.2.2 启动bob从节点

#启动docker
docker run --rm -d -it --network host --name bob secretflow/secretflow-lite-anolis8:latest
# 查看containerId
docker ps
# 进入容器
docker exec -it [containerId] /bin/bash
#启动ray从节点
ray start --address=127.0.0.1:9001 --resources='{"bob": 16}' --disable-usage-stats
  1. 请使用主节点的ip地址和端口。
  2. {“bob”: 16} 意味着alice最多可以同时运行16个worker。 您可以按需要自行调整。
  3. 当屏幕中输出 “Ray runtime started.” 意味着主节点成功启动。

3.2.3 运行代码

在任一台机器上运行代码,最后会发送到主节点进行计算。

import secretflow as sf
sf.init(parties=['alice','bob'],address='127.0.0.1:9001')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
# 将明文值2通过密文计算加一的操作,得到一个密文结果
alice(lambda x:x+1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75208880>
# 将明文值2通过密文计算减一的操作,得到一个密文结果
alice(lambda x:x-1)(2)
# <secretflow.device.device.pyu.PYUObject object at 0x7f7e75131f30>

3.2.4 创建密态设备SPU

我们设置通信地址如下:(注意不能和Ray的通信地址端口冲突)

  • alice的通信地址:127.0.0.1:9101
  • bob的通信地址:127.0.0.1:9102
    同时设置SPU的端口:
  • alice的SPU监听端口地址:9101
  • bob的SPU监听端口地址:9102

执行以下代码

import spu
import secretflow as sf
# Use ray head adress please.
sf.init(parties=['alice', 'bob'], address='127.0.0.1:9001')
cluster_def={
    'nodes': [
        {
            'party': 'alice',
            # Please choose an unused port.
            'address': '127.0.0.1:9101',
            'listen_addr': '0.0.0.0:9101'
        },
        {
            'party': 'bob',
            # Please choose an unused port.
            'address': '127.0.0.1:9102',
            'listen_addr': '0.0.0.0:9102'
        },
    ],
    '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)
# 利用SPU来进行运算
spu(lambda x:x+1)(2)

4. 生产模式

相比仿真模式,生产模式主要是进行了安全增强:

  • 每个参与方都是独立的Ray集群
  • 所有参与方都需要执行代码
    注意:请牢记alice和bob需要同时运行代码。
    在这里插入图片描述
    通过了解:
    我们发现存在三套地址
  • Ray头节点的监听地址
    • alice 127.0.0.1:9001
    • bob 127.0.0.1:9002
  • Proxy的通信地址
    • alice 127.0.0.1:9101
    • bob 127.0.0.1:9102
  • SPU的通信端口
    • alice 9201
    • bob 9202

4.1 部署步骤

在alice节点中运行如下python代码

import secretflow as sf
cluster_config ={
    'parties': {
        'alice': {
            # replace with alice's real address.
            'address': '127.0.0.1:9101',
            'listen_addr': '0.0.0.0:9201'
        },
        'bob': {
            # replace with bob's real address.
            'address': '127.0.0.1:9102',
            'listen_addr': '0.0.0.0:9202'
        },
    },
    'self_party': 'alice'
}
sf.init(address='127.0.0.1:9001', cluster_config=cluster_config)
# your code to run.

之前我们的bob节点为从节点,所以需要关闭后重启为主节点。

# 关闭集群 
ray stop
# 启动bob为主节点
ray start --head --node-ip-address=127.0.0.1 --port=9002 --resources='{"bob": 16}' --include-dashboard=False --disable-usage-stats

在alice节点中运行如下python代码

import secretflow as sf
cluster_config ={
    'parties': {
        'alice': {
            # replace with alice's real address.
            'address': '127.0.0.1:9101',
            'listen_addr': '0.0.0.0:9201'
        },
        'bob': {
            # replace with bob's real address.
            'address': '127.0.0.1:9102',
            'listen_addr': '0.0.0.0:9202'
        },
    },
    'self_party': 'bob'
}
sf.init(address='127.0.0.1:9002', cluster_config=cluster_config)
# your code to run.

4.2 生产模式——KUSCIA解决多端口问题

在这里插入图片描述

5. SecretNote和SCQL安装与使用

SecretNote是专为隐语开发者打造的高级工具套件。以notebook的形式呈现,支持多节点代码执行和文件管理,同时执行运行状态追踪功能,极大地提升开发者的效率和工作体验。
https://github.com/secretflow/secretnote?spm=a2c6h.12873639.article-detail.8.20d665253mLsK9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值