MLflow — Ошибка типа: Поддерживаются только типы ввода dict и фреймов данных

#python #dataframe #tensorflow #tensorflow-serving #mlflow

Вопрос:

Я довольно новичок в программном обеспечении MLflow и пытаюсь отправить запрос HTTP POST в разработанную мной модель обслуживания, но в заголовке появляется ошибка.

Вот такая ситуация. В качестве внутреннего хранилища я использую базу данных SQLite, а в качестве хранилища артефактов-локальную папку. Команда для запуска сервера mlflow следующая (модель находится на промежуточной стадии): mlflow models serve -m "models:/nuovo_modello/Staging" -p 1234

Я зарегистрировал модель в MLflow, и это схема модели:

введите описание изображения здесь

Когда я пытаюсь сделать запрос на публикацию следующим образом (как предлагается в руководстве по обслуживанию TF: https://www.tensorflow.org/tfx/serving/api_rest#request_format_2) { "instances": [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 4]] }

или даже в типе содержимого JSON следующим образом: curl http://127.0.0.1:1234/invocations -H "Content-Type: application/json; format=pandas-split" -d '{"columns":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99], "data":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,3,1,4]]}'

Я получаю эту ошибку, и я действительно не знаю, что ее вызывает:

{«код ошибки»: «BAD_REQUEST», «сообщение»: «Обнаружена неожиданная ошибка при оценке модели. Убедитесь, что сериализованный входной кадр данных совместим с моделью для вывода.», «stack_trace»: «Обратная трассировка […]

Файл «/Path/to/the/file/venv/lib/python3.8/site-packages/mlflow/tensorflow.py», строка 584, в прогнозеn ошибка ввода(f»Поддерживаются только типы ввода dict и фрейма данных}»)Ошибка ввода ntype: поддерживаются только типы ввода dict и фрейма данных

Данные, вызывающие эту ошибку, не являются ни a DataFrame , ни a dict , а numpy.ndarray вместо этого являются a (я проверил их с помощью типа(…) во время отладки).

Форма входных данных правильная, но я действительно не знаю, как это решить. Похоже, MLflow преобразует данные в numpy.ndarray без какой-либо причины

Заранее спасибо всем, кто мне поможет

Ответ №1:

Первый пример («экземпляры»:) — это TF, обслуживающий формат JSON, который не поддерживается MLflow.

Попробуйте добавить двойные кавычки к именам столбцов в примерах «разделение панд».

Комментарии:

1. Каким образом TF, обслуживающий JSON, не поддерживается? Здесь в документах MLflow говорится, что я могу запросить свою модель в этом формате -> > mlflow.org/docs/latest/models.html#deploy-mlflow-models Я использовал этот формат в качестве тела HTTP-запроса POST с почтальоном

2. Я уже пробовал то, что вы сказали о выборе разделения панд, но это приводит меня к той же ошибке.