隐私计算实训营第二期第9讲SML入门/基于SPU迁移机器学习算法实践

推荐一个博客,对我很有启发:隐语课程学习笔记9-SML入门/基于SPU实现明文算法迁移密文模型的实践-CSDN博客

01 PPML in SPU

      对于PPML(隐私保护机器学习),涉及两个方面,机器学习领域和隐私计算领域。这两者间存在着很大差距。

机器学习领域一般比较关注模型的训练、不同优化器的使用、不同的模型结构等,而隐私计算一般关注底层的基础密文算子(加减乘除+比较+逻辑运算等)、恶意/诚实模型、隐私计算协议、模运

算。

如何去跨越这两种不同技术之间的差异? SPU是一种可行的方案。

关于SPU,我的上一篇博文里也有详细的介绍。隐私计算实训营第二期第8讲密态引擎SPU框架介绍-CSDN博客

02 浮点数和定点数

安全多方计算中,一般是基于定点数来执行计算的,首先会将浮点型数值转换成定点数后再进行MPC算子计算。

另外,需要注意,以8bit环来举例,虽然正常来说定点数的取值范围为(-2^{L-1-F}, 2^{L-1-F}),但在SPU中,为了基于MSB的比较能正常工作,定点数取值范围设置为了(-2^{L-2-F}, 2^{L-2-F})

03 明文算法迁移流程

1. 将明文算法用JAX的api重新实现

2. SPU下验证精度(simulation test)

不经过修改,在密态下直接运行可能会出现精度问题。

可以从两个角度出发分析:

(1)算法本身问题分析(参数设置、学习问题等);(2)从MPC角度分析(比如数值溢出)

3. SPU下验证性能(emulation)

Note:当前只支持多进程模式,且需要从spu源码编译运行!

emulation性能不够好时,需要对算法进行调优,需要一些MPC的知识。

04 SPU使用常见问题

05 实践部分

配套代码见课程链接:隐语 · 实训社区

1.先配置下secretnote环境

为了方便设置网络参数,我们在docker-compose.yml增加cap add: NET_ADMIN。

使用docker compose up启动alice和bob两个docker节点。

2. 首先使用jax实现新的digitize函数

digitize函数是一个常见的数值处理函数,用于将连续的数值数据转换为离散的分箱或分类索引值。

       虽然jax有自带的digitize函数,但实现上不一定适合直接在mpc下使用。

(1)首先定义明文算子

(2)使用simulation test验证spu下的任务执行

可以看到最后的整体的通信量75536bytes, 发送次数为2563次,非常夸张,直接用自带的digitize,对于mpc非常不友好。

这是因为其采用二分查找的方式进行,在mpc下会涉及大量的比较判断、乘法计算等。

(3)重写该函数

执行的结果仍是正确的[1 1 4 3 2 5]

(4)对优化后的明文digitize算子进行simulation test

使用aby3协议测试

整体的通信量1472bytes, 发送次数为14次

使用semi2k协议测试

整体的通信量1920bytes, 发送次数为10次

使用cheetah协议测试

整体的通信量1062423bytes, 发送次数为2545次

对比下来,发现semi2k在通信次数上是最优,aby3则是在通信量上最优。出乎意料的是,cheetah反而是最低效的,接下来需要进一步对照论文原理来查找原因。

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值