Обслуживание Tensorflow: Rest API возвращает ошибку неверного запроса

Обслуживающий сервер Tensorflow (запускаемый с докером) отвечает на мои запросы GET (и POST) следующим образом:

{ "error": "Malformed request: POST /v1/models/saved_model/" }

Точно такая же проблема уже сообщалась, но так и не была решена (предположительно, это вопрос типа StackOverflow, а не проблема GitHub):

https://github.com/tensorflow/serving/issues/1085

https://github.com/tensorflow/serving/issues/1095

Любые идеи? Большое тебе спасибо.


person asdf    schedule 05.10.2018    source источник


Ответы (4)


Я подтвердил, что это не работает до версии 12 и действительно работает после версии 12.

> docker run -it -p 127.0.0.1:9000:8500 -p 127.0.0.1:9009:8501 -v /models/55:/models/55 -e MODEL_NAME=55 --rm tensorflow/serving
> curl http://localhost:9009/v1/models/55
   { "error": "Malformed request: GET /v1/models/55" }

Теперь попробуйте с v12:

> docker run -it -p 127.0.0.1:9000:8500 -p 127.0.0.1:9009:8501 -v /models/55:/models/55 -e MODEL_NAME=55 --rm tensorflow/serving:1.12.0
> curl http://localhost:9009/v1/models/55
{
 "model_version_status": [
  {
   "version": "1541703514",
   "state": "AVAILABLE",
   "status": {
    "error_code": "OK",
    "error_message": ""
   }
  }
 ]
}
person CoderOfTheNight    schedule 09.11.2018

В моем подходе было две проблемы:

1) Запрос проверки статуса не поддерживался моим Tensorflow_model_server (см. https://github.com/tensorflow/serving/issues/1085 для подробностей).

2) Что еще более важно, при использовании Windows вы должны избегать кавычек в JSON. Так что вместо:

curl -XPOST http://localhost:8501/v1/models/saved_model:predict -d "{"instances":[{"features":[1,1,1,1,1,1,1,1,1,1]}]}"

Я должен был использовать это:

curl -XPOST http://localhost:8501/v1/models/saved_model:predict -d "{\"instances\":[{\"features\":[1,1,1,1,1,1,1,1,1,1]}]}"
person asdf    schedule 10.10.2018

Зависит от вашей модели, но вот как выглядит мое тело:

{"input": {"text": ["Hello"]}}

Я использовал Postman, чтобы он знал, что это JSON.

Это для API прогнозирования, поэтому URL-адрес заканчивается на «: прогноз». Опять же, это зависит от того, какой API вы пытаетесь использовать.

person Joe Hidakatsu    schedule 09.10.2018
comment
Вы правы, но моя проблема заключалась в другом (см. Выше), тем не менее, спасибо. - person asdf; 10.10.2018

API статуса модели поддерживается только в главной ветви. Пока нет обслуживающего выпуска TF, который бы его поддерживал (API планируется выпустить в следующем выпуске 1.12). Вы можете использовать ночной образ докера (tenorflow / serve: nightly) для тестирования сборок основной ветки.

Это решение предоставлено netf в проблеме: 1128 в тензорном потоке / обслуживании. Я уже пробовал это решение, готово, и я могу получить статус модели. Получение статуса модели img (это img для демонстрации статуса модели).

Надеюсь, я смогу вам помочь.

Если вы не очистили сборки основной ветки, вы можете связаться со мной.

Могу дать твою инструкцию.

Электронная почта: [email protected]

person Milittle    schedule 11.10.2018