【隐私计算实训营】是蚂蚁集团隐语开源社区出品的线上课程,自实训营上线以来,获得行业内外广泛关注,吸引上千余名开发者报名参与。本次暑期夏令营课程中,除了最新上线的「联邦学习系列」,还包含了「隐私保护数据分析」和「隐私保护机器学习」,主题,小伙伴们可以根据需求自由选择报名期待和大家共同探索隐私计算的前沿技术!
隐私计算实训营「机器学习」:隐私计算实训营「机器学习」
隐私计算实训营「联邦学习」:隐私计算实训营「联邦学习」
隐私计算实训营「数据分析」:隐私计算实训营「数据分析」
1. SecretFlow简介
SecretFlow是一个隐私计算框架,用于安全地进行多方数据分析和机器学习。它支持多种部署模式,可以满足从快速验证到安全生产的不同需求。
2. 安装要求和方式
2.1 运行要求
- Python >= 3.8
- 操作系统支持:
- CentOS 7
- Anolis 8
- Ubuntu 18.04/20.04
- macOS 11.1+
- WSL2
- 硬件资源: ≥ 8核16GB
2.2 安装包类型
SecretFlow提供两种安装包:
- secretflow: 完整版,包含所有功能和依赖
- secretflow-lite: 轻量版,仅包含基础功能,不含深度学习等依赖库
2.3 安装方式
SecretFlow支持三种安装方式:
- Docker镜像
- PyPI安装
- 源码安装
2.3.1 Docker镜像安装
使用Docker Hub或阿里云镜像:
# Docker Hub
docker run -it secretflow/secretflow-anolis8:latest
# 或轻量版
docker run -it secretflow/secretflow-lite-anolis8:latest
# 阿里云镜像
docker run -it secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow-anolis8:latest
# 或轻量版
docker run -it secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow-lite-anolis8:latest
2.3.2 PyPI安装
要求pip版本 >= 19.3,建议使用conda管理Python环境:
pip install -U secretflow
# 或轻量版
pip install -U secretflow-lite
2.3.3 源码安装
- 克隆代码并创建Python环境:
git clone https://github.com/secretflow/secretflow.git
cd secretflow
conda create -n secretflow python==3.8
conda activate secretflow
- 编译并安装:
# 建议使用镜像secretflow/release-ci:latest
python setup.py bdist_wheel
pip install dist/*.whl
3. SecretFlow部署模式
SecretFlow支持两种主要部署模式:仿真模式和生产模式。
3.1 仿真模式
- 适合快速验证和实验
- 支持单机和多机仿真
- 只需执行一次代码
- 安全性较低,不适合生产环境
仿真模式分为单机仿真和集群仿真两种:
3.1.1 单机仿真
在一台机器上模拟多方:
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)
bob(lambda x: x - 1)(2)
3.1.2 集群仿真
在多台机器上部署,每台机器模拟一方:
- 在第一台机器上部署Ray主节点(alice):
ray start --head \
--node-ip-address="{ip}" --port="{port}" \
--resources='{"alice": 16}' \
--include-dashboard=False \
--disable-usage-stats
- 在第二台机器上部署Ray从节点(bob):
ray start \
--address="{Ray主节点的通信地址}" \
--resources='{"bob": 16}' \
--include-dashboard=False \
--disable-usage-stats
- 在任一机器上执行Python代码:
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)
bob(lambda x: x)(2)
- (可选) 创建SPU(安全处理单元):
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)
3.2 生产模式
- 适合生产环境使用
- 安全性更高
- 每个参与方都需要执行代码
- 每个参与方都是独立的Ray集群
生产模式部署步骤:
- 在alice机器上部署Ray主节点:
ray start --head \
--node-ip-address="{ip}" --port="{port}" \
--resources='{"alice": 16}' \
--include-dashboard=False \
--disable-usage-stats
- 在bob机器上部署Ray主节点:
ray start --head \
--node-ip-address="{ip}" --port="{port}" \
--resources='{"bob": 16}' \
--include-dashboard=False \
--disable-usage-stats
- alice执行Python代码:
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)
- bob执行Python代码:
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)
- (可选) 创建SPU,alice和bob都需要执行:
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)
4. 使用KUSCIA解决多端口问题
KUSCIA(Kubernetes-based Secure Collaborative Infrastructure Architecture)是一个用于解决多端口问题的工具。它可以:
- 屏蔽不同机构间基础设施的差异
- 为跨机构协作提供资源管理和任务调度能力
- 统一网络基础设施,解决SPU、Ray通信等多端口问题
5. 使用SecretNote提升体验
SecretNote是一个类似Jupyter Notebook的工具,专为SecretFlow设计:
- 提供与Notebook一致的使用体验
- 可在一个页面上执行多方代码
- 支持单操作界面,多节点代码自动执行
- 提供多节点代码运行跟踪
你的第一个SecretFlow程序。
导入secretflow包。
import secretflow as sf
sf.init(parties=['alice', 'bob', 'carol'], address='local')
alice_device = sf.PYU('alice')
message_from_alice = alice_device(lambda x:x)("Hello World!")
print(sf.reveal(message_from_alice))