Использование параметра String для nvidia triton

Я пытаюсь развернуть простую модель на Triton Inference Server. Он загружается хорошо, но у меня возникают проблемы с форматированием ввода, чтобы выполнить правильный запрос на вывод.

Моя модель имеет config.pbtxt, настроенный следующим образом.

        max_batch_size: 1
  input: [
    {
      name: "examples"
      data_type: TYPE_STRING
      format: FORMAT_NONE
      dims: [ -1 ]
      is_shape_tensor: false
      allow_ragged_batch: false
      optional: false
    }
  ]

Я попытался использовать довольно простой код Python для настройки входных данных, подобных этому (выходные данные не записываются, но настроены правильно)

              bytes_data = [input_data.encode('utf-8')]
        bytes_data = np.array(bytes_data, dtype=np.object_)
        bytes_data = bytes_data.reshape([-1, 1])
        inputs = [
            httpclient.InferInput('examples', bytes_data.shape, "BYTES"),
        ]
        inputs[0].set_data_from_numpy(bytes_data)

Но я продолжаю получать одно и то же сообщение об ошибке

      tritonclient.utils.InferenceServerException: Could not parse example input, value: '[my text input here]'
         [[{{node ParseExample/ParseExampleV2}}]]

Я пробовал несколько способов кодирования ввода, как байты или даже как обслуживание TFX, которое раньше спрашивало, как это { "instances": [{"b64": "CjEKLwoJdXR0ZXJhbmNlEiIKIAoecmVuZGV6LXZvdXMgYXZlYyB1biBjb25zZWlsbGVy"}]}

Я не совсем уверен, откуда берутся проблемы, если кто-нибудь знает?

1 ответ

Я немного изменил принятый пример. Нет необходимости создаватьf.train.Example- вы можете просто закодировать свой текст в виде байтов и напрямую создать массив numpy.

      np_input_data = np.asarray([str.encode(input_data)])

inputs = [tritonhttpclient.InferInput('TEXT', [1], "BYTES")]
inputs[0].set_data_from_numpy(np_input_data.reshape([1]), binary_data=False)

Изменить: после изучения кода тритона, в частности реализацииhttp.InferInputиtriton_python_backend_utils.pyЯ понял, что это можно еще упростить, используя dtype=object, т.е.

      np_input_data = np.asarray([input_data], dtype=object)

text = tritonclient.http.InferInput('text', [1], "BYTES")
text.set_data_from_numpy(np_input_data.reshape([1]))
Другие вопросы по тегам