¿Cómo eliminar los detalles del modelo desde el archivo de configuración de modelos personalizados, que se utiliza para cargar múltiples modelos en TensorFlow Sirviendo?

Me he impulsado el código para agregar los modelos de TensorFlow en tiempo de ejecución al archivo de configuración de servir de Tensorflow utilizando el hilo anterior: TensorFlow Sirviendo: Actualizar model_config (agregar modelos adicionales) en Runtime

No tengo ni idea de cómo eliminar ningún modelo de este archivo de configuración con Python, ya que este archivo de configuración tiene una extensión .conf y su formato de cadena.

Este archivo de configuración parece esto:

model_config_list: {
  config: {
    name:  "first",
    base_path:  "/models/first",
    model_platform: "tensorflow",
    }
  },
  config: {
    name:  "second",
    base_path:  "/models/second",
    model_platform: "tensorflow",
  }
}

Ahora, ¿cómo eliminar el modelo llamado "Primero" en el archivo anterior durante el tiempo de ejecución utilizando el código Python?

entrada:

model_config_list: {
  config: {
    name:  "first",
    base_path:  "/models/first",
    model_platform: "tensorflow",
    }
  }
  config: {
    name:  "second",
    base_path:  "/models/second",
    model_platform: "tensorflow",
  }
}

Algún código Python usando GRPC o Google.Protobuf, TensorFlow_Serving.apis, TensorFlow_Serving.Config, para eliminar el modelo llamado "Primero"

salida:

model_config_list: {
  config: {
    name:  "second",
    base_path:  "/models/second",
    model_platform: "tensorflow",
  }
}
1
swapnil gaikwad 27 jun. 2019 a las 14:45

1 respuesta

La mejor respuesta

He descubierto la respuesta para mi pregunta. El archivo models.conf está en formato de datos de ProtoBUF, pero su tipo es una cadena. Para editarla, use el paquete de Google Python. Primero, convirté este archivo en formato JSON y luego se eliminó los detalles del modelo en particular y luego se convirtió nuevamente en formato de ProtoBuf.

1. Lea modelos.conf archivo

with open('models.conf', 'r+') as f:
    config_ini = f.read()

2.conviarlo al formato JSON

from tensorflow_serving.config import model_server_config_pb2
from google.protobuf import text_format, json_format
import json
name='first'

model_server_config = model_server_config_pb2.ModelServerConfig()
model_server_config = text_format.Parse(text=config_ini, message=model_server_config)
proto_to_json = json_format.MessageToJson(model_server_config)
proto_to_json = json.loads(proto_to_json)

3.delete el modelo requerido:

proto_to_json['modelConfigList']['config'] = [dic for dic in proto_to_json['modelConfigList']['config'] if name!= dic['name']]

4.convert json Volver a la cadena de ProtoBuf:

json_to_proto = json_format.Parse(json.dumps(proto_to_json), message=model_server_config ,ignore_unknown_fields=False)

Consulte esta documentación: https://developers.google.com/protocol- Buffers / Docs / Referencia / Python /

2
swapnil gaikwad 17 jul. 2019 a las 09:22