Как удалить детали модели из настраиваемого файла конфигурации модели, используемого для загрузки нескольких моделей при обслуживании тензорного потока?

Как удалить детали модели из настраиваемого файла конфигурации модели, который используется для загрузки нескольких моделей при обслуживании тензорного потока?

Я имплементировал код для добавления моделей тензорного потока во время выполнения в файл конфигурации, обслуживающий тензорный поток, используя указанный выше поток: Обслуживание TensorFlow: обновить model_config (добавить дополнительные модели) во время выполнения

Я понятия не имею, как удалить любую модель из этого файла конфигурации с помощью python, поскольку этот файл конфигурации имеет расширение .conf и его строковый формат.

Этот файл конфигурации выглядит так:

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

Теперь, как удалить модель с именем «first» из вышеуказанного файла во время выполнения с использованием кода Python?

ввод:

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

некоторый код Python с использованием grpc или google.protobuf, tensorflow_serving.apis, tensorflow_serving.config, чтобы удалить модель с именем "first"

вывод:

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

person swapnil gaikwad    schedule 27.06.2019    source источник


Ответы (1)


Я нашел ответ на свой вопрос. Файл models.conf имеет формат данных protobuf, но его тип - строка. Чтобы отредактировать его, используйте пакет google python. Сначала я преобразовал этот файл в формат json, затем удалил детали конкретной модели, а затем снова преобразовал обратно в формат protobuf.

1. прочитать файл models.conf

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

2. преобразовать в формат 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. удалите требуемую модель:

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

4. преобразовать json обратно в строку protobuf:

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

См. Эту документацию: https://developers.google.com/protocol-buffers/docs/reference/python/

person swapnil gaikwad    schedule 16.07.2019
comment
это отлично работает, собирался разобраться сам, но решил сначала погуглить. Благодарность! Интересно, почему для этого уже нет API? - person C. Feng; 09.06.2020