Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spu通信部分能否替换为python #404

Closed
xiaoqing928 opened this issue Nov 16, 2023 · 16 comments
Closed

spu通信部分能否替换为python #404

xiaoqing928 opened this issue Nov 16, 2023 · 16 comments

Comments

@xiaoqing928
Copy link

Issue Type

Build/Install

Modules Involved

PSI

Have you reproduced the bug with SPU HEAD?

Yes

Have you searched existing issues?

Yes

SPU Version

0.5

OS Platform and Distribution

centos7

Python Version

3.8

Compiler Version

No response

Current Behavior?

rt,spu模块的通信是通过yacl实现的,请教一下yacl能否替换为其他语言的,如python/java

Standalone code to reproduce the issue

现有的方式对每一个batch的数据进行发送/接收SendBatch(masked_items, batch_count, tag);
RecvBatch(&peer_items, batch_count, tag);
想要将其替换掉例如使用python的传输模块对c++了解不够请问下是否能够进行替换呢

Relevant log output

No response

@6fj
Copy link
Member

6fj commented Nov 16, 2023

目前不能,请问你要解决什么问题呢

@xiaoqing928
Copy link
Author

你好,有一些特定的需求,想要计算和传输两块分开,其中计算使用spu本身,而传输使用当前已有的python模块,在已有的架构下避免新增端口。
在网上有看到c++调用python这种混合编程的模式,这种方式是否可行呢?

@tpppppub
Copy link
Collaborator

MPC 里计算和通信是强耦合的,因此计算用 C++,通信用 python 是很难的,这里计算和传输两块分开是指什么呢?

@xiaoqing928
Copy link
Author

以求交为例,涉及加密计算的仍沿用spuc++代码,涉及通信传输的调用python(如:SendBatch(masked_items, batch_count, tag);RecvBatch(&peer_items, batch_count, tag);

@deadlywing
Copy link
Contributor

我理解您的场景可能是通信需要走自己的网络传输模块,,
如果只是求交(如ECDH-PSI)这种交互次数少的,maybe是可行的,但可能需要一些额外的工作,比如整体framework用python实现(此时通信就直接用python的通信模块即可),c++的加密模块需要自己实现一个python层的bingding。

drawback:

  1. 需要自定义binding
  2. 数据需要在c++对象和python对象之间相互转化,性能更低

@xiaoqing928
Copy link
Author

@deadlywing 好的,感谢

@deadlywing
Copy link
Contributor

@deadlywing 好的,感谢

方便的话可以讲下具体的场景和原因,可以给更针对性的意见,上面提到的这种方式我之前实现过,确实会有一定性能的drop~

@xiaoqing928
Copy link
Author

我的问题就如您上面理解的完全一样。
我们目前的平台是基于fate开发的,fate的求交效率和spu相比明显不在一个量级,因此想要在复用fate生产架构的前提下,逐步引入spusecretflow
现在的想法也和您提到的类似:
方案1:整体的框架仿照spu-psi,使用python重写一遍;
方案2:计算部分使用spu,通信部分使用python相关模块;
方案3:完全使用spu,在fate计算节点上额外添加一个监听服务。

@deadlywing
Copy link
Contributor

方案1的性能应该会非常低;
方案2如我上面描述的;
方案3理论上是最佳的,但似乎也额外需要增加一个端口?(fate的监听端口应该不能复用)如果还是要额外增加端口的话,不如spu直连?

@xiaoqing928
Copy link
Author

是的,方案3是要新增端口,本质其实就是spu直连,只是内部会考虑到高可用的问题,在spu上层会做适当的修改

@deadlywing
Copy link
Contributor

是的,方案3是要新增端口,本质其实就是spu直连,只是内部会考虑到高可用的问题,在spu上层会做适当的修改

BTW,我们后面马上会开源EzPSI,到时候可以考虑直接使用这个,可用性也很高~

@xiaoqing928
Copy link
Author

EzPSI和spu的区别是什么,从字面上是不是可以理解EzPSI是只用作求交的一个库呢?另外计划什么时候会开源呢?

@6fj
Copy link
Member

6fj commented Nov 16, 2023

hi @xiaoqing928

ezpsi是隐语推出的一款psi独立产品(包含平台/调度/引擎),本身也可以当作lib使用。将会在11月下旬开源。

@xiaoqing928
Copy link
Author

@deadlywing 嗨你好,接着上次的问题,想请教下“c++的加密模块需要自己实现一个python层的bingding”,这块具体是怎么实现的,有没有指引手册呢?

@deadlywing
Copy link
Contributor

@deadlywing 嗨你好,接着上次的问题,想请教下“c++的加密模块需要自己实现一个python层的bingding”,这块具体是怎么实现的,有没有指引手册呢?

这个就是常规的python,c++混合编程了,我们没有指引手册,但是网上应该有成熟的方案。(spu使用的是pybind11)

@xiaoqing928
Copy link
Author

好的,谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants