hmiao
hmiao
If you want to use a new port, you should change the port field in config.yaml first.
这个应该不是pycryptodome的问题,问题应该出在socket的数据传输上。 我本地没法复现这个问题,如果你可以复现的话,可以在psi/base/sender.py的第17行插入一行代码 `print(f"key {bk_bytes.hex()}")` 观察程序的输出。 正常的key应该是以30开头的,长度为59的bytes(hex长度为118)。 如果不是,说明是socket数据传输的问题。 修改了代码之后,你需要`pip install -e .`来重新安装一下才能让修改的代码生效。
 今天跑了一下,并没有复现你的问题。 我猜测是因为CrypTen的版本问题。CrypTen版本一直是0.1.0,一年多没有发过新版本,可以尝试从源码安装CrypTen,看看能不能解决问题。
真输入来自持有这个数据的参与方。 ``` if rank == i: # 加密本机的数据,分享给其他参与方 assert local_tensor.shape[1] == feature_size, \ f"{name} feature size should be {feature_size}, but get {local_tensor.shape[1]}" tensor = crypten.cryptensor(local_tensor, src=i) # src标识数据的持有方 ``` 在这里,持有数据的参与方,也就是`rank=i`的参与方,会通过`crypten.cryptensor`把数据秘密分享给网络中其他的参与方。而其他的参与方虽然没有数据,但是也需要一个`cryptensor`来接收别人分享来的数据,所以有了`dummy_tensor`那一段。
启动命令改一下,去掉`&&`,改成: `RENDEZVOUS=tcp://192.168.1.100:2345 WORLD_SIZE=3 RANK=0 python train_multi.py` `RENDEZVOUS=tcp://192.168.1.100:2345 WORLD_SIZE=3 RANK=1 python train_multi.py` `RENDEZVOUS=tcp://192.168.1.100:2345 WORLD_SIZE=3 RANK=2 python train_multi.py` 的确是README里写错了,抱歉 @qingqbaby
关于问题一,是crypten版本的问题,通过pip安装的crypten 0.1版本的确没有`MPCTensor.rand`这个方法,通过源码安装crypten(master分支)的话是有的。如果不想通过源码安装crypten,可以使用`crypten.mpc.rand`来代替。generator是有manual_seed方法的,这个也许是IDE的提示问题? 关于问题二,这个只是IDE的提示,应该不是报错? 关于问题三,也是crypten版本的问题,通过pip安装的crypten 0.1版本的确没有`BCEWithLogitsLoss`这个方法,通过源码安装crypten(master分支)的话是有的。如果不想通过源码安装crypten,可以修改这一行为`mpc_loss = crypten.nn.BCELoss()`,同时修改`MLP`模型,在最后添加一个`Sigmoid`层,达到同样的效果。
你这个问题,有点奇怪,true_ys的差距太大了,不太可能是解密时候的精度问题 你可以看一下make_mpc_dataloader这个函数,在这里label默认是输入的最后一列,不知道你的数据集是这样的格式吗? 可能你需要根据自己的数据集,修改下代码试试
> > 你这个问题,有点奇怪,true_ys的差距太大了,不太可能是解密时候的精度问题 > > 你可以看一下make_mpc_dataloader这个函数,在这里label默认是输入的最后一列,不知道你的数据集是这样的格式吗? > > 可能你需要根据自己的数据集,修改下代码试试 > > 谢谢您的解答,我考虑了这点,并做了以下处理: > > 1. feature, label = mpc_tensor[:,1:], mpc_tensor[:, 0:1] > 2. label=label.squeeze() > 还是无果,无奈之下我进一步操作: > validate_mpc函数中添加true_ys = torch.where(true_ys...
我的确没遇到这个问题。 你可以把具体的报错贴出来?看一下是哪个文件的问题