Я пытаюсь внедрить систему федеративного обучения с 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()
?