【发布时间】:2020-07-18 02:51:35
【问题描述】:
我正在尝试使用 gRPC 实现联邦学习系统。 Tensorflow Federated 目前支持多机远程学习,但在我看来有些奇怪,它在服务器端准备客户端数据集。我希望客户端的数据集只驻留在客户端的设备中,而不是在服务器的内存中准备。
如果我使用 Tensorflow 已经在使用的 tensor_shape.proto, tensor.proto, types.proto, resource_handle.proto 和 tensor_util.make_tensor_proto(),则可以很好地传输诸如权重向量之类的张量
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(...)
...
将 protobuf 定义为
message Request {
ModelProto model = 1;
}
这不是关于Serving,只是关于通过 gRPC 将 keras 模型从服务器传输到客户端。有什么办法吗?
如果不可能,我是否应该将其简单地作为从.h5 由model.save() 创建的文件读取的字节流发送?
【问题讨论】:
标签: python tensorflow keras protocol-buffers grpc