隐语容器部署指南

一、单机版本部署

docker 最新的版本请查看 secretflow tags

https://hub.docker.com/r/secretflow/secretflow-anolis8/tags

启动容器

docker run -itd secretflow/secretflow-anolis8:${version}

测试

  1. 进入容器
docker exec -it docker_hash bash
  1. 生成csv数据
import csv


def write_id_to_csv(count):
    with open("id_{}.csv".format(str(count)), "w") as f:
        writer = csv.writer(f)
        writer.writerow(["id"])
        for v in range(count):
            writer.writerow([str(v)])
  1. 初始化spu并测试 单机容器下没有启动ray集群服务,只是ray本地调用
# 单机版,sf.utils.testing.cluster_def 建立SPU。请注意它只能在单机模式下使用,因为它使用了 127.0.0.1 作为默认ip。
import secretflow as sf

sf.shutdown()
sf.init(['alice', 'bob', 'carol'], num_cpus=8, log_to_driver=False)

# 虚拟化三个逻辑设备
alice, bob = sf.PYU('alice'), sf.PYU('bob')
spu = sf.SPU(sf.utils.testing.cluster_def(['alice', 'bob']))

# 求交
input_path = {alice: 'id_count.csv', bob: 'id_count.csv'}
output_path = {alice: '.data/alice_psi.csv', bob: '.data/bob_psi.csv'}
spu.psi_csv('id', input_path, output_path, 'alice', protocol="ECDH_PSI_2PC")
#spu.psi_csv('id', input_path, output_path, 'alice', protocol="KKRT_PSI_2PC")
#spu.psi_csv('id', input_path, output_path, 'alice', protocol="BC22_PSI_2PC")

二、单机下多容器部署

使用容器隔离环境,启动多个ray 分布式计算节点,但都共用同一个宿主机的网络节点

以host模式启动容器,容器会和宿主机共用一个network namespace

# 启动两个容器
docker run  --net=host -itd secretflow/secretflow-anolis8:0.7.7b1
docker run  --net=host -itd secretflow/secretflow-anolis8:0.7.7b1

主节点启动ray 服务


RAY_DISABLE_REMOTE_CODE=true \
RAY_SECURITY_CONFIG_PATH=config.yml \
RAY_USE_TLS=0 \
ray start --head --node-ip-address="宿主机ip" --port="GCS server listening port" --resources='{"alice": 8}' --include-dashboard=False --disable-usage-stats
 
# RAY_USE_TLS 0 关闭tls验证
# {“alice”: 8} 意味着alice最多可以同时运行8个worker

子节点启动ray服务

RAY_DISABLE_REMOTE_CODE=true \
RAY_SECURITY_CONFIG_PATH=config.yml \
RAY_USE_TLS=0 \
ray start --address="主节点ip:主节点GCS_port" --resources='{"bob": 8}' --disable-usage-stats

查看节点启动状态,ray status ,两边同步的节点hash是否一致,服务是否正常

ray status

测试

import spu
import secretflow as sf

sf.init(address="主节点ip:GCS_port")
alice, bob = sf.PYU('alice'), sf.PYU('bob')

# 因为在同一服务器下面,以host模式启动,所以此处端口不要冲突
cluster_def = {
    'nodes': [
        {
            'party': 'alice',
            'id': '0',
            # Use the address and port of alice instead.
            # Please choose a unused port.
            'address': 'ip:9327',
        },
        {
            'party': 'bob',
            'id': '1',
            # Use the ip and port of bob instead.
            # Please choose a unused port.
            'address': 'ip:9328',
        },
    ],
    '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)
input_path = {alice: 'id_1000000.csv', bob: 'id_1000000.csv'}
output_path = {alice: './alice_psi.csv', bob: './bob_psi.csv'}
spu.psi_csv('id', input_path, output_path, 'alice')

三、集群模式,跨服务器容器部署

首先保证两台服务器网络是可以互相访问的

yum install telnet -y

telnet ip port 

两边分别以host模式启动容器

docker run  --net=host -itd secretflow/secretflow-anolis8:0.7.7b1

测试A服务器容器内的端口是否能被B服务器的容器访问

  1. 先在A服务器容器内启动主节点ray 集群服务, 再从B服务器容器内启动子节点ray 集群
  2. 如果能正常连接主节点,则网络正常,如果连接失败,检查端口时候正常,通信是否正常

在隐语框架中,SPU基于Brpc,这意味着SPU拥有一个独立于Ray网络之外的服务网格。换言之,你必须单独处理SPU的端口

在测试前先测试一下Brpc端口是否正常,在其中一方启动Brpc服务


import spu.binding._lib.link as spu_link

rank = 0
node = {
    'party': 'alice',
    'id': 'local:0',
    'address': '127.0.0.1:9001',
    # The listen address of this node
}
desc = spu_link.Desc()
desc.add_party(node['id'], node['address'])
link = spu_link.create_brpc(desc, rank)

另外一方容器内访问对方的端口状况, 如果正常则跳过

telnet ip port
测试

sf.init(address="主节点ip:GCS_port")
alice, bob = sf.PYU('alice'), sf.PYU('bob')
 
cluster_def={
    'nodes': [
        {
            'party': 'alice',
            'id': '0',
            # Use the address and port of alice instead.
            # Please choose a unused port.
            'address': 'ip:9327',
        },
        {
            'party': 'bob',
            'id': '1',
            # Use the ip and port of bob instead.
            # Please choose a unused port.
            'address': 'ip:9327',
        },
    ],
    '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)
input_path = {alice: 'id_1000000.csv', bob: 'id_1000000.csv'}
output_path = {alice: './alice_psi.csv', bob: './bob_psi.csv'}
spu.psi_csv('id', input_path, output_path, 'alice')
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
隐语框架与TEE(可信执行环境)的配合可以实现数据加密。隐语框架主要解决的是数据隐私保护和安全计算的问题,而TEE是一种安全的硬件或软件环境,可以提供可信的执行环境来保护数据和计算过程的安全性。通过将隐语框架与TEE结合,可以实现数据在计算过程中的加密和保护。 在隐语框架中,数据可以使用全密态计算或明密文混合计算的方式进行加密。全密态计算是一种在密文环境中进行计算的方式,数据在计算过程中一直保持加密状态,可以使用Secure Aggregation算法、MPC密态引擎、同态加密等技术来进行计算。而明密文混合计算则是将部分计算从密文环境搬到明文环境,在明文环境中进行计算可以提升计算的性能,同时通过安全退让来保证数据的安全性。 TEE提供了一个可信的执行环境,可以保护计算过程中的数据和代码安全。在隐语框架中,可以使用TEE来实现数据的加密和解密操作,以及进行安全计算。TEE可以提供硬件级的安全保护,例如Intel SGX和ARM TrustZone等,也可以通过软件模拟的方式提供安全执行环境。 通过隐语框架配合TEE实现数据加密,可以在保护数据隐私的前提下,进行安全的计算和数据交换。这种组合可以应用于各种场景,例如联邦学习、数据交易市场等,为数据安全和隐私保护提供了一种可行的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [隐私计算技术|深度解读可信隐私计算框架“隐语”](https://blog.csdn.net/m0_69580723/article/details/126662952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值