Не могу получить прогнозы на ML Engine, пока локальный прогноз работает нормально - PullRequest
0 голосов
/ 27 января 2019

У меня возникли проблемы с настройкой моей модели на работу с Google Cloud ML-Engine, когда она работает нормально локально, с помощью следующей команды:

gcloud ml-engine локальный прогноз --model-dir> / my / model / directory --json-instances /tmp/test.json

Дать следующие результаты:

CLASSES       SCORES
[u'0', u'1']  [0.04031550511717796, 0.9596844911575317]

Я также проверил модель и ввод черезсохраненные_модели_кли:

сохраненные_модели_кли запустите --dir / my / model / directory --tag_set serve --signature_def serve_default --input_exprs 'inputs = ["Текстовое сообщение"]' --tf_debug

Что дает мне:

Result for output key classes:
[[b'0' b'1']]
Result for output key scores:
[[1.0000000e+00 1.4367239e-08]]

Выше приведены почти те же самые предсказания, которые я получаю через мой код Python.

Теперь я развернул save_model.pd в ML-Engine и попытка запустить его через HTTPS-вызов, как описано в этой ссылке: https://cloud.google.com/ml-engine/docs/v1/predict-request

Мой запрос выглядит так:

POST https://ml.googleapis.com/v1/projects/my-project/models/my-model/versions/my-version:predict

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

{"error": "PredicОшибка: во время выполнения модели: AbortionError (code = StatusCode.FAILED_PRECONDITION, details = \ "Ошибка при чтении переменной ресурса dnn / logits / bias / part_0 из Container: localhost.Это может означать, что переменная была неинициализирована.Не> найдено: ресурс localhost / dnn / logits / bias / part_0 / N10tensorflow3VarE не существует. \ N \ t [[{{узел dnn / logits / bias / ReadVariableOp}} => ReadVariableOp_output_shapes = [ 1 ], dtype = DT_FLOAT, _device = \ "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0 \"]] \ ")"}

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

gcloud Предсказание ml-engine --model = my_model_name --version = my_version_name --json-instances =. / test.json

Вывод:

{"error": "Ошибка прогноза: ошибка при выполнении модели: AbortionError (code = StatusCode.FAILED_PRECONDITION, details = \" Ошибка при чтении переменной ресурса dnn / logits /смещение / part_0 из контейнера: localhost. Это может означать, что переменная не была инициализирована. Не найдено: ресурс localhost / dnn / logits / bias / part_0 / N10tensorflow3VarE не существует. \ n \ t [[{{узел dnn / logits / bias/ ReadVariableOp}} => ReadVariableOp_output_shapes = [ 1 ], dtype = DT_FLOAT, _device = \ "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0 \ "]] \") "}

Команда

gcloud ml-engineОписание моделей my_model возвращает следующее:

defaultVersion:
  createTime: '2019-01-24T06:20:48Z'
  deploymentUri: gs://<my-bucket>
  framework: TENSORFLOW
  isDefault: true
  machineType: mls1-c1-m2
  name: <my-model>/<my-version>
  pythonVersion: '2.7'
  runtimeVersion: '1.12'
  state: READY
description: Classify urgency of a voicemail message
name: my_model_name
regions:- us-central1

Я использую tenorflow 1.12 локально с python 2.7.

Я также запустил задание на облачном сервере:

задания gcloud ml-engine отправляют прогноз [...]

И вот что я получаю в журналах (в Cloud ML Job):

error_detail: {detail: "Не удалось загрузить модель из-за неверных данных модели.tags:> ['serve'] Переданный save_path не является допустимой контрольной точкой: gs: // cml-782035949213-> 1548310990035505 / models / urgency_classifier / urgency_classifier_25012019 /> 10885858792860527262 / model / variable / variable "
input_snipp"input": "Это тестовое сообщение"}. "
}

Что мне нужно сделать, чтобы моя модель работала в Google Cloud ML Engine?

Примечание: я также прочитал этот пост , но в моем случае это не очень помогло

Спасибо!

РЕДАКТИРОВАТЬ 1 - 30 ЯНВА 2019

Мне удалось заставить его работать в контейнере Docker.Я экспортировал свою сохраненную модель и переменные в папку и настроил Docker для запуска его с помощью следующей команды:

Docker Run -P 8501: 8501 -тип монтирования = привязка, источник = мой / путь / к / сохранен / модель, цель = / модели / -e MODEL_NAME = -t тензорный поток / подача &

Теперь я могу получать прогнозы с помощью curl или почтальона:

curl -d '{"instances": ["Это тестовое сообщение"]}' -X POST http://localhost:8501/v1/models/:predict

Это дает мне следующие результаты:

{
"predictions": [
    {
        "classes": ["0", "1"],
        "scores": [0.0959636, 0.904036]
    }
]
}

Теперь мы будем развертывать этот экземпляр на облачном сервере и будем называть нашу модель оттуда.

Эта ссылка помогла.

...