收录于合集#社区问答6个
上个月,隐语开源社区上共收到30+issue,35+社群提问,小伙伴们对spu使用问题以及隐语目前所支持的算法功能较为关心,本次精选20条社区问答,供大家参考阅读。查看更多内容,请访问👏github隐语主页,欢迎提问交流!https://github.com/secretflow
易用性
问题1:是否PYU属于参与各方?可以直接用明文数据计算?而中心则用SPU进行安全计算?解答:
- PYU是明文设备,目前是依托于python作为载体,主要提供参与方本地的明文计算。
- SPU是MPC密态设备。这里密态设备是虚拟的概念。SPU本质上是由多个计算方组成,并提供了密态设备这个视角,好处是帮助用户屏蔽MPC底层多个计算方协同计算的细节。
- SPU并不是你理解的在中心进行安全计算,计算还是发生在各个计算方的,你说的中心更多的可以理解为是驱动者(driver),driver负责把计算任务分发给SPU,而SPU提供了虚拟设备的视角,让你看起来是在driver这个视角操纵了它。
问题2:SchemaType.FPaillier和SchemaType.ZPaillier分别代表什么含义?提供这两个选择是否存在什么需要trade-off的东西?解答:在C++ Api 层面,FPaillier 与 ZPaillier有一些不同,FPaillier 对标 Python-Paillier, 相当于把 Python-Paillier 的逻辑用C++翻译了一遍,其特点是算法层面支持浮点数加密,原理是把 scale 比特数作为明文打包在密文中,密态运算阶段算法会自行对齐、更新 scale 值,其它未做过多优化。而zPaillier 是我们实现的一个高度优化的Paillier 版本,只支持整数加密,性能比 FPaillier 高很多。fpaillier 不推荐使用,任何情况下都应该选择 ZPaillier。
问题3:如果想执行浮点数加解密,有什么推荐的方式么?解答:加密浮点数需要外挂的 encoder,参考“快速入门”和“矩阵运算”关于 Encoder 的介绍。https://heu.readthedocs.io/zh_CN/latest/getting_started/quick_start.htmlhttps://heu.readthedocs.io/zh_CN/latest/getting_started/numpy.html
问题4:官网教程demo中“混合联邦——逻辑回归”部分卡死报错。报错提示为:WARNING worker.py:1416-WARNING: 24 PYTHON worker processes have been started on node:解答:看起来是因为设备的问题,8C16G 是sf最低的配置要求。
问题5:1)初始化spu时,选择cheetah协议,这个协议是基于OT、SS还是什么?2)从哪儿能找到这些协议(cheetah、aby3等)的相关资料?3)用spu计算时,密文的计算是同态的吗?解答:1)cheetah协议是阿里巴巴双子座实验室原创的协议,详见 paperhttps://eprint.iacr.org/2022/207
2)spu的计算是基于mpc协议(即aby3等协议)。请参阅相关论文和资料了解mpc是如何计算的,以及不同协议的secret sharing schema和明密文转化流程。请查阅我们的文档:https://spu.readthedocs.io/en/beta/reference/mpc_status.html
3)spu 是个虚拟设备,相当于一个 spu 是有多个独立的半诚实参与方组成(一般为2到3个),各参与方之间执行秘密分享算法执行计算。spu 主要基于秘密分享算法,而不是同态。另外,如果你想进行同态计算,请使用secretflow的另一个子项目-heu:https://secretflow.readthedocs.io/zh_CN/latest/developer/design/heu.html
问题6:secretflow文档Component下的Feature Engineering demo无法运行。from secretflow.utils.simulation.datasets import load_linearTraceback (most recent call last):File "<stdin>", line 1, in <module>ModuleNotFoundError: No module named 'secretflow.utils.simulation.datasets'解答:dataset 的缓存路径应该是~/.secretflow/datasets/linear.csv,你看下这个文件是否是一个空文件,如果是的话把缓存目录~/.secretflow/datasets 删掉重新跑一下 demo,第一次运行会触发下载。目前,新版本已经支持检查本地缓存文件哈希,若不正确则会重新下载。
问题7:使用psi_df时,返回类型是PYUObject,如果要指定bob回写数据库,在driver要怎么写这个函数?以及,如果是PYUObject的话,py函数的参数类型可以直接是DataFrame吗?
解答:
- 可以再写个py函数把内存的 df 存储到 db 里,让driver安排在bob侧调用一下。
- 是的,PYUObject会被自动拆箱成de-reference
问题8:部署两台服务器各自docker部署,在启动任务报brpc 异常,配置监听的端口9998另外一台服务器可以正常连接,但几秒后会断掉,之后就brpc报错。
解答:可以先试试在本机多docker的情况, 有的网络会存在夸机器的docker,rpc不通。可以尝试把docker的网络设置为host模式。
问题9:docker部署import secretflow 出错,未找到模块'libcudart.so.11.0'报错:import secretflow as sf 2022-09-29 07:24:43.572390:W tensorflow/stream_executor/platform/default/dso_loader.cc:64]Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0:cannot open shared object file: No such file or directory解答:这是一个 warning,不影响任何功能,不影响使用,可以忽略。
问题10:是否可以在docker中内置jupyter客户端解答:你可以手动安装jupyter,或者可以自行修改dockerfile以满足你的需求。
考虑到镜像需要尽量小,以及jupyter并不是运行secreflow的必须依赖,我们目前不考虑内置jupyter。
问题11:python3.8 m1芯片 编译grpcio的时候一直报错报错信息:distutils.errors.CompileError: command '/usr/bin/qcc' failed with exit code 1解答:执行命令前先 conda install grpcio
问题12:使用多方安全计算或者联邦模型等后,如何查看参与方之间的通信消耗?解答:对于多方安全计算,SPU使用内部的通信信道来传输(MPC协议)数据,之后会逐步开放统计接口(目前还没有python接口可以查看)对于联邦学习,多方之间数据使用Ray 来通信,可以通过 /tmp/ray/session_{date}/logs 日志查看。我们即将发布的调度框架,会提供这个能力。
功能性
问题1:
secretflow后面有计划支持windows吗?
解答:
短期内没有windows支持计划,Windows可以通过 wsl 来跑。后续会补充wsl相关的文档。
问题2:
隐语提供隐匿查询功能吗?就是PIR技术
解答:
目前secretflow还不支持python直接调用的pir接口,可以直接调用spu的c++接口,示例可以参考seal_pir的单测代码
https://github.com/secretflow/spu/blob/main/spu/pir/seal_pir_test.cc
问题3:
使用ABY3协议训练SS-XGB时,集群出现错误。
解答:
我们仍在优化以支持大型数据集,建议您将数据集缩小到[10000,450]
问题4:
两个密文矩阵相乘,目前是不支持么?
解答:
受限于算法原因,目前不支持两个密文矩阵相乘,后续 HEU 支持 FHE 算法后可以开放此接口。
问题5:
集群里面有个节点挂了,其他节点能感知到么?有没有办法获取各个节点的健康状态
解答:
调度框架这部分能力开源后组建集群就可以发现。
问题6:
secretflow联邦学习能否对接更复杂的深度学习任务,比如目标检测?
解答:
理论上是可以的,欢迎使用FL Model进行尝试。
其他
问题1:
请问隐语的学习需要什么基础,AI、ML 零基础可以么?
解答:
推荐我们「隐语开源社区」隐私计算线上慕课,本课程联合20位顶尖高校学者与产业代表联合出品,划分为7为大模块:课程前瞻、隐私计算全局概览、概念基础、技术应用、案例介绍、框架基础、动手实践,融合了基础理论与实践应用,将由浅入深为大家呈现100+专业细分知识点。适合所有对隐私计算感兴趣的同学。
视频首页:https://space.bilibili.com/2073575923/video
也可以看下文档推荐的论文:https://secretflow.readthedocs.io/zh_CN/latest/
问题2:
纵向联邦模型中数据是否出域?如何进行信息交互?
解答:
纵向联邦学习主打是数据不出域,交互的是梯度信息。另外,目前隐语还没有发布纵向FL的算法,当前发布的纵向算法中,对于传统模型用的MPC,对于NN用的拆分学习。