[隐私计算学习笔记]9——SML入门/基于SPU迁移机器学习算法实践

目录

1. PPML(Privacy-Preserving Machine Learning)in SPU

2. 浮点数和定点数

2.1 浮点数表示

2.2 定点数表示

2.3 浮点数和定点数比较

3.明文算法迁移流程

4.常见问题

5.小结


1. PPML(Privacy-Preserving Machine Learning)in SPU

2. 浮点数和定点数

2.1 浮点数表示

以FP32为例:

  • S:符号位,0表示正数,1表示负数
  • E:biased指数,8位,以2为底
  • f:尾数,23位,决定精度

 以IEEE 754标准定义的:

  • 规格数: 1\leq E\leq 254      ,F=(-1)^{S} \cdot 1.f \cdot 2^{E-127}
  • 非规格数:E = 0 ,F=(-1)^{S}\cdot 0.f \cdot 2^{1-127}

(注:对每个给定的E,都有2^{23}个数,对不同的E,两个数间距不同)

  • 特殊值:

2.2 定点数表示

以 8bit 环,定点bit数 fxp=4 为例:

        两个数之间的间距恒定为2^{-F}

2.3 浮点数和定点数比较

浮点数定点数
0点处密集分布均匀分布
取值范围较大(-2*2^{127},2*2^{127}取值范围较小
计算相对复杂(高次多项式、Lookup Table)计算简单(整数运算、低次多项式)
计算精度高,所有算子有严格的误差证明(<3bit)计算精度低,乘法依赖truncation,数学函数通常使用近似解(不同算子误差范围不同)

3.明文算法迁移流程

  • Step1: 将算法用jax的api重新实现,如Jax.numpy替换numpy、Jax.scipy替换scipy;
  • Step2:测试密态下的数据精度(模拟在定点数上运行的所有操作、可以提供真实的数值计算精度环境,运行速度更快)

  • Step3:测试密态下的实际性能(在真实的MPC协议上通过多进程/Docker进行仿真、提供算法有效的性能结果) 

4.常见问题

        Q1:如何知道SPU支持的算子类型?

        A1:

  • 通过Simulation/emulation查询
  • 参考文档查询:

https://www.secretflow.org.cn/docs/spu/latest/en-US/reference/np_op_status

https://secretflow.org.cn/zh-CN/docs/spu/main/reference/xla_status

        Q2:如何知道非线性算子大致的误差范围?

        A2:误差来源于:1.系统设定误差(如环大小、fxp大小、truncation协议等)2.非线性算子拟合误差。故较难给出浮点数的误差估计,参考相关数学算子的大致误差:

https://www.secretflow.org.cn/zh-CN/docs/spu/main/development/fxp

        Q3:为什么明文下正常运行,密态下出现运行错误?

        A3:

  • 若运行报错: 1. 实现的算法是否jitable(即使用@jax.jit是否能运行)   2. 是否使用了SPU不支持的算子
  • 若能运行,但误差极大,可以自查是否有以下情况: 1. 是否可能发生溢出:输入数据或参数是否太大或太小 2. SPU内部是否使用了浮点随机数生成器 3. 是否调用了线形代数算子(如矩阵分解,奇异值分解等)
  • 误差适中:可以考虑增大环的大小,提高fxp精度

        Q4:为什么Emulation的速度比simulation快很多?

        A4:数据没有seal(即load到PYU),SPU将其视为Public数据,所有计算在明文下进行。

        
        Q5:如何对密态算法进行优化?
        A5:有以下几个思路可以参考:
        1. 减少耗时算子的调用(计算公式重写,多项式近似等)
        2. 避免重复计算(空间换效率)
        3. 并行化。实际上,SPU内部已经做了大量的并行操作,若希望进一步优化,可以尝试:
(1)算法层:for循环很多时候可以通过高阶tensor运算来代替,也可以考虑使用jax.vmap进行自动向量化;
(2). Runtime:尝试开启更多并行( experimental feature ),experimental_enable_inter_op_par(即DAG并行)。

5.小结

        本篇介绍了浮点数和定点数的结构及性质,说明了明文算法迁移流,并针对过程中的常见问题给出相应的排查思路和解决方案。

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值