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

[Feature]: 对于使用SPU进行研究性PPML开发的困惑 #923

Open
TY-cc opened this issue Nov 28, 2024 · 3 comments
Open

[Feature]: 对于使用SPU进行研究性PPML开发的困惑 #923

TY-cc opened this issue Nov 28, 2024 · 3 comments

Comments

@TY-cc
Copy link

TY-cc commented Nov 28, 2024

Feature Request Type

Build/Install

Have you searched existing issues?

Yes

Is your feature request related to a problem?

目的:打算使用SPU做研究性的隐私保护机器学习算法的开发

问题:由于方案流程限制,无法使用“中心化ml代码交给spu”的方式实现

具体描述:我们想实现浙大的一篇论文《towards secure and practical ml via seceret sharing and random permutaiton》,激活函数是在第三方服务器做的,因此如果在SPU中有激活函数的封装,只需要针对修改即可。出于这样的目的,我们把example里面的mlp编译的pphlo过程,打开看了看, 发现调用的基础函数如multiply,add,reshape,broadcast,negate,transpose等,好像没有按照ml的构成成分进行高级的封装,比如矩阵乘法,激活函数,bn,maxpool这样高层的封装。这样的话,如果要基于secretflow开发该论文,可能需要利用pphlo基础函数在pphlo文件里开发,感觉完全不可能啊

Describe features you want to add to SPU

情况展示:PPHLO中调用的都是基础函数,具体例子如下:
image
在其中未发现针对ML构成部件的高级封装,无法进行针对性修改。

Describe features you want to add to SPU

需求:希望您确认我们提出的情况是否属实?

PS:针对该问题我们也思考了解决办法,比较简单的解决办法是,将过程进行分割。
例如,论文中激活函数是在第三方服务器做的,那么将激活函数单独分割出来
1、x1 = spu(Dense)(x) //在spu进行Dense
2、x2 = cpu(Relu)(x1)   //在本地cpu进行Relu
3、x3 = spu(Dense)(x2) //在spu内进行Dense
如果采用这样的办法,我们担心的是这样的多次编译,对整体效率是否有严重的影响?
@tpppppub
Copy link
Collaborator

PPML 研究涉及的层次很广,从最上层 ML 结构的改进到最底层密码学源语的创新都有很多工作。PPHLO 算子是基于 HLO 来的,HLO 之前的翻译是 spu 本身干预不了的。像 HLO 里已有的算子(比如你所说的矩阵乘就是 dot),你可以在 spu 运行时里实现你需要的改进。像 HLO 里没有的算子,比如上层更复杂的 ML 结构,有两类情况,比如 SecureNN 里的 Relu/DRelu,论文核心的优化其实是 msb 协议,所以本质上你需要做的是在 spu 里实现新的 msb 协议,另一类情况是具体的优化确实需要知道上层 ML 的结构,这时可以在 spu 里通过 intrinsic call 的方式,将 python 里的某个 ML 算子实现为一个 intrinsic call,然后派发到 spu 运行时里,对相应 intrinsic call 实现优化的 kernel。把 spu 用于科研可以参考一下这个文档

@TY-cc
Copy link
Author

TY-cc commented Nov 29, 2024

您说在spu里实现新的msb协议,那么在调用该协议时,是否还会需要编译为PPHLO算子?
如果需要,以Relu为例,那么还是变成分布式计算,而无法做到在第三方服务器上进行计算。
如果不需要,那么新的msb协议内部基础算子要我们自己编写么?

您说的intrinsic call,是指我们自己封装一个ML的组件作为一个 intrinsic call?其“派发到 spu 运行时里,对相应 intrinsic call 实现优化的 kernel”这一过程是需要我们完成,还是在spu内就自动完成了?

Copy link

Stale issue message. Please comment to remove stale tag. Otherwise this issue will be closed soon.

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

No branches or pull requests

2 participants