示例#1
0
    def test_with_one_arg_tf_comp_in_no_arg_fed_comp(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())
        loop = asyncio.get_event_loop()

        @computations.tf_computation(tf.int32)
        def add_one(x):
            return x + 1

        @computations.federated_computation
        def comp():
            return add_one(10)

        v1 = loop.run_until_complete(ex.create_value(comp))
        v2 = loop.run_until_complete(ex.create_call(v1))
        result = loop.run_until_complete(v2.compute())
        self.assertEqual(result.numpy(), 11)
示例#2
0
    def test_with_tuples(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())
        loop = asyncio.get_event_loop()

        @computations.tf_computation(tf.int32, tf.int32)
        def add_numbers(x, y):
            return x + y

        @computations.federated_computation
        def comp():
            return add_numbers(10, 20)

        v1 = loop.run_until_complete(ex.create_value(comp))
        v2 = loop.run_until_complete(ex.create_call(v1))
        result = loop.run_until_complete(v2.compute())
        self.assertEqual(result.numpy(), 30)
示例#3
0
def test_context(rpc_mode='REQUEST_REPLY'):
    port = portpicker.pick_unused_port()
    server_pool = logging_pool.pool(max_workers=1)
    server = grpc.server(server_pool)
    server.add_insecure_port('[::]:{}'.format(port))
    target_factory = executor_stacks.local_executor_factory(num_clients=3)
    tracers = []

    def _tracer_fn(cardinalities):
        tracer = executor_test_utils.TracingExecutor(
            target_factory.create_executor(cardinalities))
        tracers.append(tracer)
        return tracer

    service = executor_service.ExecutorService(
        executor_stacks.ResourceManagingExecutorFactory(_tracer_fn))
    executor_pb2_grpc.add_ExecutorServicer_to_server(service, server)
    server.start()

    channel = grpc.insecure_channel('localhost:{}'.format(port))
    stub = executor_pb2_grpc.ExecutorStub(channel)
    serialized_cards = executor_service_utils.serialize_cardinalities(
        {placement_literals.CLIENTS: 3})
    stub.SetCardinalities(
        executor_pb2.SetCardinalitiesRequest(cardinalities=serialized_cards))

    remote_exec = remote_executor.RemoteExecutor(channel, rpc_mode)
    executor = reference_resolving_executor.ReferenceResolvingExecutor(
        remote_exec)
    try:
        yield collections.namedtuple('_', 'executor tracers')(executor,
                                                              tracers)
    finally:
        executor.close()
        for tracer in tracers:
            tracer.close()
        try:
            channel.close()
        except AttributeError:
            pass  # Public gRPC channel doesn't support close()
        finally:
            server.stop(None)
示例#4
0
    def test_with_nested_lambdas(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())

        @tensorflow_computation.tf_computation(tf.int32, tf.int32)
        def add_numbers(x, y):
            return x + y

        @federated_computation.federated_computation(tf.int32)
        def comp(x):
            @federated_computation.federated_computation(tf.int32)
            def nested_comp(y):
                return add_numbers(x, y)

            return nested_comp(1)

        v1 = asyncio.run(ex.create_value(comp))
        v2 = asyncio.run(ex.create_value(10, tf.int32))
        v3 = asyncio.run(ex.create_call(v1, v2))
        result = asyncio.run(v3.compute())
        self.assertEqual(result.numpy(), 11)
示例#5
0
    def test_with_functional_parameter(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())

        @tensorflow_computation.tf_computation(tf.int32)
        def add_one(x):
            return x + 1

        @federated_computation.federated_computation(
            computation_types.FunctionType(tf.int32, tf.int32), tf.int32)
        def comp(f, x):
            return f(f(x))

        v1 = asyncio.run(ex.create_value(comp))
        v2 = asyncio.run(ex.create_value(add_one))
        v3 = asyncio.run(ex.create_value(10, tf.int32))
        v4 = asyncio.run(
            ex.create_struct(structure.Struct([('f', v2), ('x', v3)])))
        v5 = asyncio.run(ex.create_call(v1, v4))
        result = asyncio.run(v5.compute())
        self.assertEqual(result.numpy(), 12)
def test_context():
    port = portpicker.pick_unused_port()
    server_pool = logging_pool.pool(max_workers=1)
    server = grpc.server(server_pool)
    server.add_insecure_port('[::]:{}'.format(port))
    target_factory = executor_test_utils.LocalTestExecutorFactory(
        default_num_clients=3)
    tracers = []

    def _tracer_fn(cardinalities):
        tracer = executor_test_utils.TracingExecutor(
            target_factory.create_executor(cardinalities))
        tracers.append(tracer)
        return tracer

    service = executor_service.ExecutorService(
        executor_test_utils.BasicTestExFactory(_tracer_fn))
    executor_pb2_grpc.add_ExecutorGroupServicer_to_server(service, server)
    server.start()

    channel = grpc.insecure_channel('localhost:{}'.format(port))

    stub = remote_executor_grpc_stub.RemoteExecutorGrpcStub(channel)
    remote_exec = remote_executor.RemoteExecutor(stub)
    remote_exec.set_cardinalities({placements.CLIENTS: 3})
    executor = reference_resolving_executor.ReferenceResolvingExecutor(
        remote_exec)
    try:
        yield collections.namedtuple('_', 'executor tracers')(executor,
                                                              tracers)
    finally:
        executor.close()
        for tracer in tracers:
            tracer.close()
        try:
            channel.close()
        except AttributeError:
            pass  # Public gRPC channel doesn't support close()
        finally:
            server.stop(None)
    def create_executor(self, cardinalities):
        device = tf.config.list_logical_devices(device_type='CPU')[0]
        num_requested_clients = cardinalities.get(placements.CLIENTS)
        if num_requested_clients is None:
            num_clients = self._default_num_clients
        else:
            num_clients = num_requested_clients
        client_stacks = [
            self._leaf_executor_fn(device=device) for _ in range(num_clients)
        ]

        federating_strategy_factory = federated_resolving_strategy.FederatedResolvingStrategy.factory(
            {
                placements.CLIENTS: client_stacks,
                placements.SERVER: self._leaf_executor_fn(device=device),
            },
            local_computation_factory=tensorflow_computation_factory.
            TensorFlowComputationFactory())
        executor = federating_executor.FederatingExecutor(
            federating_strategy_factory, self._leaf_executor_fn(device=device))
        return reference_resolving_executor.ReferenceResolvingExecutor(
            executor)
示例#8
0
    def test_with_one_arg_tf_comp_in_two_arg_fed_comp(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())

        @tensorflow_computation.tf_computation(tf.int32, tf.int32)
        def add_numbers(x, y):
            return x + y

        @federated_computation.federated_computation(tf.int32, tf.int32)
        def comp(x, y):
            return add_numbers(x, x), add_numbers(x, y), add_numbers(y, y)

        v1 = asyncio.run(ex.create_value(comp))
        v2 = asyncio.run(ex.create_value(10, tf.int32))
        v3 = asyncio.run(ex.create_value(20, tf.int32))
        v4 = asyncio.run(
            ex.create_struct(structure.Struct([('x', v2), ('y', v3)])))
        v5 = asyncio.run(ex.create_call(v1, v4))
        result = asyncio.run(v5.compute())
        self.assertEqual(
            str(structure.map_structure(lambda x: x.numpy(), result)),
            '<20,30,40>')
  def test_with_federated_map(self):
    eager_ex = eager_tf_executor.EagerTFExecutor()
    factory = federated_resolving_strategy.FederatedResolvingStrategy.factory(
        {placement_literals.SERVER: eager_ex})
    federated_ex = federating_executor.FederatingExecutor(factory, eager_ex)
    ex = reference_resolving_executor.ReferenceResolvingExecutor(federated_ex)
    loop = asyncio.get_event_loop()

    @computations.tf_computation(tf.int32)
    def add_one(x):
      return x + 1

    @computations.federated_computation(type_factory.at_server(tf.int32))
    def comp(x):
      return intrinsics.federated_map(add_one, x)

    v1 = loop.run_until_complete(ex.create_value(comp))
    v2 = loop.run_until_complete(
        ex.create_value(10, type_factory.at_server(tf.int32)))
    v3 = loop.run_until_complete(ex.create_call(v1, v2))
    result = loop.run_until_complete(v3.compute())
    self.assertEqual(result.numpy(), 11)
示例#10
0
    def test_with_functional_parameter(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())
        loop = asyncio.get_event_loop()

        @computations.tf_computation(tf.int32)
        def add_one(x):
            return x + 1

        @computations.federated_computation(
            computation_types.FunctionType(tf.int32, tf.int32), tf.int32)
        def comp(f, x):
            return f(f(x))

        v1 = loop.run_until_complete(ex.create_value(comp))
        v2 = loop.run_until_complete(ex.create_value(add_one))
        v3 = loop.run_until_complete(ex.create_value(10, tf.int32))
        v4 = loop.run_until_complete(
            ex.create_struct(structure.Struct([(None, v2), (None, v3)])))
        v5 = loop.run_until_complete(ex.create_call(v1, v4))
        result = loop.run_until_complete(v5.compute())
        self.assertEqual(result.numpy(), 12)
示例#11
0
    def test_with_one_arg_tf_comp_in_two_arg_fed_comp(self):
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            eager_tf_executor.EagerTFExecutor())
        loop = asyncio.get_event_loop()

        @computations.tf_computation(tf.int32, tf.int32)
        def add_numbers(x, y):
            return x + y

        @computations.federated_computation(tf.int32, tf.int32)
        def comp(x, y):
            return add_numbers(x, x), add_numbers(x, y), add_numbers(y, y)

        v1 = loop.run_until_complete(ex.create_value(comp))
        v2 = loop.run_until_complete(ex.create_value(10, tf.int32))
        v3 = loop.run_until_complete(ex.create_value(20, tf.int32))
        v4 = loop.run_until_complete(
            ex.create_struct(structure.Struct([(None, v2), (None, v3)])))
        v5 = loop.run_until_complete(ex.create_call(v1, v4))
        result = loop.run_until_complete(v5.compute())
        self.assertEqual(
            str(structure.map_structure(lambda x: x.numpy(), result)),
            '<20,30,40>')
示例#12
0
    def test_with_federated_map(self):
        eager_ex = eager_tf_executor.EagerTFExecutor()
        factory = federated_resolving_strategy.FederatedResolvingStrategy.factory(
            {placements.SERVER: eager_ex})
        federated_ex = federating_executor.FederatingExecutor(
            factory, eager_ex)
        ex = reference_resolving_executor.ReferenceResolvingExecutor(
            federated_ex)

        @tensorflow_computation.tf_computation(tf.int32)
        def add_one(x):
            return x + 1

        @federated_computation.federated_computation(
            computation_types.at_server(tf.int32))
        def comp(x):
            return intrinsics.federated_map(add_one, x)

        v1 = asyncio.run(ex.create_value(comp))
        v2 = asyncio.run(
            ex.create_value(10, computation_types.at_server(tf.int32)))
        v3 = asyncio.run(ex.create_call(v1, v2))
        result = asyncio.run(v3.compute())
        self.assertEqual(result.numpy(), 11)
示例#13
0
def create_test_executor_factory():
    executor = eager_tf_executor.EagerTFExecutor()
    executor = caching_executor.CachingExecutor(executor)
    executor = reference_resolving_executor.ReferenceResolvingExecutor(
        executor)
    return executor_factory.ExecutorFactoryImpl(lambda _: executor)
 def create_bottom_stack():
     executor = eager_tf_executor.EagerTFExecutor()
     return reference_resolving_executor.ReferenceResolvingExecutor(
         executor)
 def test_runs_tf(self):
     executor_test_utils.test_runs_tf(
         self,
         reference_resolving_executor.ReferenceResolvingExecutor(
             eager_tf_executor.EagerTFExecutor()))
示例#16
0
def create_test_executor_factory():
    executor = eager_tf_executor.EagerTFExecutor()
    executor = reference_resolving_executor.ReferenceResolvingExecutor(
        executor)
    return executor_test_utils.BasicTestExFactory(executor)
示例#17
0
def _create_bottom_stack():
  return reference_resolving_executor.ReferenceResolvingExecutor(
      caching_executor.CachingExecutor(
          thread_delegating_executor.ThreadDelegatingExecutor(
              eager_tf_executor.EagerTFExecutor())))
示例#18
0
def _create_middle_stack(children):
  return reference_resolving_executor.ReferenceResolvingExecutor(
      caching_executor.CachingExecutor(
          composing_executor.ComposingExecutor(_create_bottom_stack(),
                                               children)))
示例#19
0
def create_test_executor_factory():
    executor = eager_tf_executor.EagerTFExecutor()
    executor = reference_resolving_executor.ReferenceResolvingExecutor(
        executor)
    return executor_stacks.ResourceManagingExecutorFactory(lambda _: executor)
示例#20
0
def _complete_stack(ex):
    return reference_resolving_executor.ReferenceResolvingExecutor(
        caching_executor.CachingExecutor(
            thread_delegating_executor.ThreadDelegatingExecutor(ex)))
def _create_middle_stack(children):
    factory = federated_composing_strategy.FederatedComposingStrategy.factory(
        _create_bottom_stack(), children)
    executor = federating_executor.FederatingExecutor(factory,
                                                      _create_bottom_stack())
    return reference_resolving_executor.ReferenceResolvingExecutor(executor)