Отправить модель Keras с gRPC - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь внедрить систему федеративного обучения с gRP C. В настоящее время Tensorflow Federated поддерживает дистанционное обучение на нескольких машинах, но мне кажется странным, что он подготавливает набор данных клиента на стороне сервера. Я ожидал, что набор данных для клиента только находится и готовится только на устройстве клиента, а не в памяти сервера.

Тензоры, такие как весовые векторы, хорошо переносятся, если я использую tensor_shape.proto, tensor.proto, types.proto, resource_handle.proto и tensor_util.make_tensor_proto(), какой Tensorflow был уже использую

hist = model.fit(...)
vector = model.trainable_variables
sending_tensors = []
for v in vector:
    tensor = tensor_util.make_tensor_proto(v.numpy(), shape=v.numpy().shape)
    sending_tensors.append(tensor)
#Some sending logic
...

Но я не смог найти какие-либо "model.proto". Я хочу реализовать, как показано ниже, так же, как и выше.

#server
model = tf.keras.models.Sequential([ ... ])
model.compile(...)
model_proto = some_package.make_model_proto()

req = my_proto_pb2.Request(model=model_proto)
client_stub.some_grpc_service(req)

#client
class SomeServicer(...):
  def some_grpc_service(self, request, context):
    model_proto = request.model
    model = some_package.model_from_proto(model_proto)

    model.compile(...)
    model.fit(...)
    ...

с протобуфом, определенным как

message Request {
    ModelProto model = 1;
}

Это не о Serving, а о передача модели keras через gRP C с сервера на клиенты. Есть ли способы сделать это?

Если это невозможно, я должен отправить его просто как поток байтов, прочитанных из файла .h5, созданного model.save()?

...