Как выполнить запрос к REST API, запущенному на tenorflow_model_server? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытался запустить простой пример оценщиков TensorFlow: официальная проблема классификации Iris и сохраненная модель с использованием этого кода , реализованного в этом учебном пособии .

TensorFlow предоставляет инструмент командной строки для проверки экспортированной модели, как показано ниже:

$ saved_model_cli show --dir export/1550568903/ \
> --tag_set serve --signature_def serving_default
The given SavedModel SignatureDef contains the following input(s):
  inputs['inputs'] tensor_info:
      dtype: DT_STRING
      shape: (-1)
      name: input_example_tensor:0
The given SavedModel SignatureDef contains the following output(s):
  outputs['classes'] tensor_info:
      dtype: DT_STRING
      shape: (-1, 3)
      name: dnn/head/Tile:0
  outputs['scores'] tensor_info:
      dtype: DT_FLOAT
      shape: (-1, 3)
      name: dnn/head/predictions/probabilities:0
Method name is: tensorflow/serving/classify

Я установил tensorflow-model-server и запустил сервер моделей, который поддерживает REST API:

$ apt-get install tensorflow-model-server
$ tensorflow_model_server --port=9000 --rest_api_port=9001 --model_base_path=/home/deploy/export
...
2019-02-22 11:36:44.989600: I tensorflow_serving/model_servers/server.cc:302] Exporting HTTP/REST API at:localhost:9001 ...

и затем я вызвал API REST ниже:

$ curl -d '{"inputs":[{"SepalLength":[5.1],"SepalWidth":[3.3],"PetalLength":[1.7],"PetalWidth":[0.5]}]}' \
   -X POST http://localhost:9001/v1/models/default:predict

{"error": "Значение JSON: {\ n \" SepalLength \ ": [\ n 5.1 \ n], \ n \ "SepalWidth \": [\ n 3.3 \ n], \ n \ "PetalLength \": [\ n 1.7 \ n], \ n \ "PetalWidth \": [\ n 0.5 \ n] \ n} неправильно отформатирован для данных base64 "}

Произошла ошибка под названием" неправильно отформатирован для данных base64. "Итак, я кодировал входные данные следующим образом:

$ curl -d '{"inputs": [{"b64": "W3siU2VwYWxMZW5ndGgiOls1LjFdLCJTZXBhbFdpZHRoIjpbMy4zXSwiUGV0YWxMZW5ndGgiOlsxLjddLCJQZXRhbFdpZHRoIjpbMC41XX1d"}]}' \
   -X POST http://localhost:9001/v1/models/default:predict

Тем не менее, по-прежнему существует следующая ошибка:

{"error": "Не удалось проанализировать пример ввода, значение: \ '[{\ "SepalLength \": [5.1], \ "SepalWidth \": [3.3], \ "PetalLength \": [1.7], \ "PetalWidth \": [0.5]}] \ '\ n \ t [[{{node ParseExample / ParseExample}} = ParseExample [Ndense = 4, Nsparse = 0, Tdense = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _output_shapes = [[?, 1], [?, 1], [?,1], [?, 1]], dens_shapes = [[1], [1], [1], [1]], sparse_types = [], _device = \ "/ job: localhost / replica: 0 / task:0 / устройство: ЦП: 0 \ "] (_arg_input_example_tensor_0_0, ParseExample / ParseExample / names, ParseExample / ParseExample / density_keys_0, ParseExample / ParseExample / dens_keys_1, ParseExample / ParseExample / density_keys_2, ParseExample плотный_пар, ParseExample / Const, ParseExample / Const)]] "}

Что я делаю не так?Как я могу вызвать REST API без ошибок?

1 Ответ

0 голосов
/ 11 апреля 2019

Я попытался воспроизвести вашу ошибку, и я получил аналогичную ошибку для Curl Predict.

Но когда я использовал Classify, я получил вывод.

Код показан ниже:

curl -d '{"examples":[{"SepalLength":[5.1],"SepalWidth":[3.3],"PetalLength":[1.7],"PetalWidth":[0.5]}]}' -X POST http://localhost:8501/v1/models/export:classify

Вывод:

 {"results": [[["0", 0.998091], ["1", 0.00190929], ["2", 1.46236e-08]]]}
...