Платформа Google AI: непредвиденная ошибка при загрузке модели: объект 'str' не имеет атрибута 'decode' [Keras 2.3.1, TF 1.15]
Я пытаюсь использовать бета-версию Google Custom Prediction Routine в Google AI Platform для запуска действующей версии моей модели.
Я включаю в свой пакет
predictor.py
который содержит
Predictor
класс как таковой:
import os
import numpy as np
import pickle
import keras
from keras.models import load_model
class Predictor(object):
"""Interface for constructing custom predictors."""
def __init__(self, model, preprocessor):
self._model = model
self._preprocessor = preprocessor
def predict(self, instances, **kwargs):
"""Performs custom prediction.
Instances are the decoded values from the request. They have already
been deserialized from JSON.
Args:
instances: A list of prediction input instances.
**kwargs: A dictionary of keyword args provided as additional
fields on the predict request body.
Returns:
A list of outputs containing the prediction results. This list must
be JSON serializable.
"""
# pre-processing
preprocessed_inputs = self._preprocessor.preprocess(instances[0])
# predict
outputs = self._model.predict(preprocessed_inputs)
# post-processing
outputs = np.array([np.fliplr(x) for x in x_test])
return outputs.tolist()
@classmethod
def from_path(cls, model_dir):
"""Creates an instance of Predictor using the given path.
Loading of the predictor should be done in this method.
Args:
model_dir: The local directory that contains the exported model
file along with any additional files uploaded when creating the
version resource.
Returns:
An instance implementing this Predictor class.
"""
model_path = os.path.join(model_dir, 'keras.model')
model = load_model(model_path, compile=False)
preprocessor_path = os.path.join(model_dir, 'preprocess.pkl')
with open(preprocessor_path, 'rb') as f:
preprocessor = pickle.load(f)
return cls(model, preprocessor)
Полная ошибка
Create Version failed. Bad model detected with error: "Failed to load model: Unexpected error when loading the model: 'str' object has no attribute 'decode' (Error code: 0)"
указывает, что проблема в этом скрипте, особенно при загрузке модели. Однако я могу успешно загрузить модель в свой ноутбук локально с тем же блоком кода в
predict.py
:
from keras.models import load_model
model = load_model('keras.model', compile=False)
Я видел похожие сообщения, в которых предлагается установить версию
h5py<3.0.0
но это не помогло. Я могу установить версии модулей для моей пользовательской процедуры прогнозирования как таковые в
setup.py
файл:
from setuptools import setup
REQUIRED_PACKAGES = ['keras==2.3.1', 'h5py==2.10.0', 'opencv-python', 'pydicom', 'scikit-image']
setup(
name='my_custom_code',
install_requires=REQUIRED_PACKAGES,
include_package_data=True,
version='0.23',
scripts=['predictor.py', 'preprocess.py'])
К сожалению, я не нашел хорошего способа отладки развертывания модели на платформе искусственного интеллекта Google, и руководство по устранению неполадок бесполезно. Любые указатели будут очень признательны. Благодаря!
Изменить 1:
Версия модуля h5py неверна - 3.1.0, несмотря на то, что она установлена на 2.10.0 в
setup.py
. Кто-нибудь знает почему? Однако я подтвердил, что версия Keras и другие модули установлены правильно. я пытался
'h5py==2.9.0'
и
'h5py<3.0.0'
но безрезультатно. Подробнее о включении зависимостей пакетов PyPi здесь.
Изменить 2:
Оказывается, в настоящее время Google не поддерживает эту возможность.
1 ответ
Я столкнулся с той же проблемой при использовании платформы ИИ с кодом, который работал нормально два месяца назад, когда мы в последний раз обучали наши модели. Действительно, это связано с зависимостью от h5py, которая не может загрузить модель h5 на ровном месте.
Через некоторое время я смог заставить его работать со средой выполнения
2.2
и версия питона
3.7
. Я также использую пользовательскую процедуру прогнозирования, и моя модель была простой двухуровневой двунаправленной LSTM, обслуживающей классификации.
У меня была настроена виртуальная машина для ноутбука с TF == 2.1 и понижена версия h5py до <3.0.0 с помощью:
!pip uninstall -y h5py
!pip install 'h5py < 3.0.0'
Мой setup.py выглядит так:
from setuptools import setup
REQUIRED_PACKAGES = ['tensorflow==2.1', 'h5py<3.0.0']
setup(
name="my_package",
version="0.1",
include_package_data=True,
scripts=["preprocess.py", "model_prediction.py"]
)
Я добавил в свой код загрузки модели. Без него я столкнулся с другой проблемой при развертывании, которая выдавала следующую ошибку:
Create Version failed. Bad model detected with error: "Failed to load model: Unexpected error when loading the model: 'sample_weight_mode' (Error code: 0)"
Изменение кода от OP:
model = keras.models.load_model(
os.path.join(model_dir,'model.h5'), compile = False)
И это позволило развернуть модель, как и раньше, без проблем. я подозреваю
compile=False
может означать более медленное обслуживание прогнозов, но пока ничего не заметил.
Надеюсь, это поможет любому, кто застрял и погуглил эти проблемы!