参考链接:https://www.secretflow.org.cn/zh-CN/docs/secretflow/v1.3.0b0/getting_started/installation
目前隐语不直接支持Windows,需要通过WSL(Windows Subsystem for Linux)
需要在Windows上先安装WSL2,不建议使用WSL1,WSL安装参考:https://learn.microsoft.com/zh-cn/windows/wsl/install,需要全程开着docker desktop,不然子系统里的docker会异常退出。
GNU/Linux我跟着课程使用的Ubuntu-22.04
1、环境确认
需要python:3.8
查看子系统
wsl -l -v
如果没有得话,可通过wsl --list --online
查看在线可安装得子系统,我这里按照课程安装的相同子系统Ubuntu-22.04,然后通过wsl.exe --install Ubuntu-22.04
,(过程中需要设置用户名和口令)等待安装完成即可,如果链接error的话,需要科学上网~,如果没有的话,从Microsoft Store下载
安装后的查看列表(2代表是wsl2的版本,符合要求)
PS C:\Users\95762> wsl -l -v
NAME STATE VERSION
Ubuntu-22.04 Running 2
2、安装SecretFlow
在1中第一次安装Ubuntu子系统后会自动进入Ubuntu,接下来就可以按照Linux的方式去安装Secretflow了
确认下Ubuntu的WSL2版本
安装anaconda环境,分别执行
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
过程中一路回车略过相关信息,直到需要输入yes或者按确认键
然后执行source .bashrc
使得环境变量生效
创建隐语虚拟环境,这里命名为sf
conda create -n sf python=3.8
创建sf环境后,激活进入,就可以安装隐语了,安装的文件有点多,所以需要一段时间,我网速不稳定,前后一共下了仅两个小时才下完。。建议白天安装,不要在睡觉前才想起去安装~
conda activate sf #激活
pip install -U secretflow -i https://mirrors.aliyun.com/pypi/simple/ #可以通过-i指定下载源,我这里没有使用
安装完后测试官方给的代码
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))
发现报错,缺少依赖
安装该依赖即可
sudo apt-get update
sudo apt-get install libgomp1
安装好后再运行测试文件,出现hello world就说明测试成功了
### 3、安装SecretNote
1、因为docker会和默认的子系统连接,所以首先设置默认子系统为之前安装的Ubuntu,
wsl --set-default Ubuntu-22.04
在Ubuntu的sf环境下,当前目录创建一个note文件夹mkdir note
进入note文件夹,创建docker=compose.yml
文件
cd note
vim docker-compose.yml
从GitHub的secretnote项目中复制docker=compose.yml文件的配置内容到你创建的yml文件中,保存退出
services:
alice:
image: 'secretflow/secretnote:1.3.0-amd64'
platform: linux/amd64
environment:
- SELF_PARTY=alice
- ALL_PARTIES=alice,bob
ports:
- 8090:8888
entrypoint: /root/scripts/start.sh
volumes:
- /root/scripts
bob:
image: 'secretflow/secretnote:1.3.0-amd64'
platform: linux/amd64
environment:
- SELF_PARTY=bob
- ALL_PARTIES=alice,bob
ports:
- 8092:8888
entrypoint: /root/scripts/start.sh
volumes:
- /root/scripts
这个配置文件其实就是定义和运行两个docker容器,分别模拟两个参与方:Alice 和 Bob。这里使用了 Docker Compose 来管理多容器的部署。
alice和bob使用的是相同的docker镜像secretflow/secretnote:1.3.0-amd64,但创建了两个容器,就好像一个ios系统镜像文件安装了两个Windows系统一样。同时每个容器下分别设置了不同的环境
image: 定义了要使用的 Docker 镜像。这里使用的是 secretflow/secretnote:1.3.0-amd64,指定了特定的版本和架构。
platform: 指定容器运行的平台,这里是 linux/amd64。
environment: 设置环境变量,用于容器内部的配置。例如,SELF_PARTY 设置为 alice 或 bob 来标识容器代表的参与方。ALL_PARTIES 定义了网络中所有参与方的名称,这里是 alice,bob。
ports: 映射容器内的端口到宿主机的端口。例如,Alice 的 8888 端口映射到宿主机的 8090 端口,Bob 的 8888 端口映射到宿主机的 8092 端口。这允许外部访问容器提供的服务。
entrypoint: 容器启动时执行的脚本,这里是 /root/scripts/start.sh。这个脚本负责初始化和启动容器中的应用。
volumes: 将宿主机的文件或目录挂载到容器中。
然后启动docker,第一次需要拉取镜像,时间有些长
docker compose up
拉取后会自动进去容器
这里显示了网址http://127.0.0.1:8888/secretnote/,其实是Ubuntu里访问这个容器的地址,但我们是在Windows环境下,需要从Windows主机中访问secretnote,可另开一个Ubuntu终端,使用ifconfig
查看Ubuntu的地址,通过浏览器访问secretnote
到这里能访问就表明secretnote搭建成功了,下面做个小测试。
右上角添加节点,分别为Alice和Bob,注意IP要写Ubuntu的IP,端口写docker-compose配置文件的端口
从secretnote项目里(https://github.com/secretflow/secretnote/blob/main/docs/guide/secretnote-sf.md)下载示例数据iris_alice.csv和iris_bob.csv,示例代码psi.ipynb。分别上传到两个节点和notebook中。示例代码无需改动,直接运行即可
左边alice和bob能出来结果就说明成功了