Paddlefl相关问题
收藏
您好,我在使用paddlefl框架时遇到了如下问题:下面的乘法代码运行时会报如下错误,当我注释掉“ op_ge = pfl_mpc.layers.greater_equal(x=x, y=y)”这一行代码时,乘法可以正常运行。我的理解是pfl_mpc.layers某些算法不能放在一起使用,例如基于混淆电路的greater_equal和基于算数电路的mul。如果我想在一起使用这些算法的话,需要怎么做呢?
FAIL: test_ge (main.TestOptest)
Traceback (most recent call last):
File "test.py", line 51, in test_ge
self.assertEqual(ret[0], True)
AssertionError: EnforceNotMet('\n\n----------------------[5701 chars]or]') != True
import unittest
from multiprocessing import Manager
import numpy as np
import paddle.fluid as fluid
import paddle_fl.mpc as pfl_mpc
import test_op_base
from paddle_fl.mpc.data_utils.data_utils import get_datautils
aby3 = get_datautils('aby3')
class TestOptest(test_op_base.TestOpBase):
def ge(self, **kwargs):
role = kwargs['role']
d_1 = kwargs['data_1'][role]
d_2 = kwargs['data_2'][role]
d_3 = kwargs['data_3'][role]
expected_out = kwargs['expect_results'][role]
pfl_mpc.init("aby3", role, "localhost", self.server, int(self.port))
x = pfl_mpc.data(name='x', shape=[1], dtype='int64')
y = fluid.data(name='y', shape=[1], dtype='float32')
z = pfl_mpc.data(name='z', shape=[1], dtype='int64')
op_ge = pfl_mpc.layers.greater_equal(x=x, y=y)
exe = fluid.Executor(place=fluid.CPUPlace())
#results = exe.run(feed={'x': d_1, 'y': d_2}, fetch_list=[op_ge])
#print(results)
#self.assertEqual(results[0].shape, (1, ))
#self.assertTrue(np.allclose(results[0], expected_out))
print("here")
op_mul = pfl_mpc.layers.mul(x=x, y=z)
results2 = exe.run(feed={'x': d_1, 'z': d_1}, fetch_list=[op_mul])
print(results2)
def test_ge(self):
data_1 = np.full((1), fill_value=6553.6)
data_1_shares = aby3.make_shares(data_1)
data_1_all3shares = np.array([aby3.get_shares(data_1_shares, i) for i in range(3)])
data_2 = [np.array([65536]).astype('float32')] * self.party_num
data_3 = np.full((1), fill_value=655.36)
data_3_shares = aby3.make_shares(data_1)
data_3_all3shares = np.array([aby3.get_shares(data_1_shares, i) for i in range(3)])
expect_results = [np.array([0])] * self.party_num
ret = self.multi_party_run(target=self.ge,
data_1=data_1_all3shares,
data_2=data_2,
data_3=data_3_all3shares,
expect_results=expect_results)
self.assertEqual(ret[0], True)
if name == 'main':
unittest.main()
0
收藏
请登录后评论
该问题已解决,见https://github.com/PaddlePaddle/PaddleFL/issues/249