Facebook CrypTen多方计算环境搭建

这里主要参考了crypten/scripts/aws_launcher.py代码以及pytorch文档,使用两台虚拟机搭建了多机器参与的多方计算环境.(当然单台机器可以不用任何配置,直接跑CrypTen中的代码.CrypTen会利用单机器的多个内核去模拟多方环境进行计算).

CrypTen 简单介绍

CrypTen是Facebook在2019年10月开源的,用于多方安全计算(MPC)的框架.官网说明见https://ai.facebook.com/blog/crypten-a-new-research-tool-for-secure-machine-learning-with-pytorch/.
在这里插入图片描述

虚拟机安装

  • 虚拟机工具: VirtualBox
  • 虚拟机系统: ubuntu (server版. 版本:18.04.4)

CrypTen环境

参考官网文档进行配置即可(https://github.com/facebookresearch/CrypTen).
两台机器上要有同样的环境和代码.

pip install crypten
git clone https://github.com/facebookresearch/CrypTen.git
cd CrypTen
pip install -r requirements.examples.txt

老版本CrypTen文档需要安装anaconda,然后自行安装pytorch.部分虚拟机安装anaconda失败,主要是安装卡在0%不动了.可以下载其他版本进行安装(https://repo.anaconda.com/archive/)

Pytorch 环境变量

由于CrypTen分布式计算(DistributedCommunicator类)底层通信依赖pytorch的distributed,所以需要设置pytorch分布式计算相关环境变量. 具体使用方式参考官网(https://pytorch.org/tutorials/intermediate/dist_tuto.html).

如下是我使用CrypTen时的配置方法.

export WORLD_SIZE=2
export RENDEZVOUS=env://
export MASTER_ADDR=192.168.1.114
export MASTER_PORT=29500
export RANK=0
export GLOO_SOCKET_IFNAME=enp0s3

说明:

  • MASTER_PORT: A free port on the machine that will host the process with rank 0.
  • MASTER_ADDR: IP address of the machine that will host the process with rank 0.
  • WORLD_SIZE: The total number of processes, so that the master knows how many workers to wait for.
  • RANK: Rank of each process, so they will know whether it is the master of a worker. master节点配置rank为0.副节点rank为1.
  • GLOO_SOCKET_IFNAME: 因为默认pytorch使用的bankend是gloo.我的网卡名是enp0s3。 如果没有设置网卡名称,会报错pytpair.cc:761] connect [127.0.1.1]:40363: Connection refused
    解决方法参考(https://github.com/pytorch/pytorch/issues/15592)
    export GLOO_SOCKET_IFNAME=WHATEVER IN IFCONFIG (like eth0 or something)
  • RENDEZVOUS: 看源码似乎没必要设置,有默认值,这个我这边是加上的.

多方计算

2台机器的环境设置好以后,分别在主节点副节点运行代码.

python examples/mpc_linear_svm/launcher.py
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐