У меня возникли проблемы с настройкой моей модели на работу с 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]
}
]
}
Теперь мы будем развертывать этот экземпляр на облачном сервере и будем называть нашу модель оттуда.
Эта ссылка помогла.