对于所有他的专家:
我想用非常大的矩阵(600000 x 55)实现矩阵向量乘法。目前,我可以用少量输入执行加法,乘法,InnerProduct等操作。当我尝试在较大的输入上应用这些操作时,出现类似的错误,Invalid next size (normal)
或者我耗尽了主内存,直到操作系统终止了该进程(退出代码9)。
您有任何建议/示例如何归档实现矩阵矢量乘法或类似方法的有效方法吗?(使用BFV和CKKS)。
PS:我正在使用PALISADE库,但是如果您有SEAL或Helib之类的更好建议,我也会很乐意使用它们。
CKKS(在PALISADE中也可用)将是一个更好的选择,因为它支持近似(类似于浮点)算法,并且不需要高精度(大明文模量)。BFV完全执行所有操作(mod明文模数)。您将必须使用非常大的明文模数,以确保您的结果不会环绕明文模数。随着深度的增加(例如,两个链式乘法),情况会变得更加糟糕。
对于矩阵向量乘法,你可以用描述的技术https://eprint.iacr.org/2019/223,https://eprint.iacr.org/2018/254和补充信息https://开头eprint.iacr.org/2020/563。主要思想是选择正确的编码并利用SIMD打包。您将使用2的幂次方向量大小,并且可以将矩阵打包为每个密文64xY(多行)或每个密文每行的一部分,具体取决于哪一个效率更高。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句