Машинное обучение - это итеративный процесс, который требует огромного количества экспериментов и исследований. В конце концов, модель, которая идет в производство, приносит только пользу. Внедрение модели в производство с одновременным обеспечением ее масштабируемости - непростая задача. Микросервисы - это метод достижения масштабируемости и надежности. Специалисты по обработке данных могут использовать этот метод для достижения масштабируемости, надежности и удобства обслуживания моделей, развернутых для обслуживания.

В дополнение к этому может быть важным или хорошей идеей провести A / B-тестирование модели, которая будет развернута. Иногда специалист по анализу данных хотел бы иметь несколько версий одной и той же модели, обученных с разными гиперпараметрами, которые будут развернуты, чтобы иметь некоторую обратную связь о взаимодействии с конечным пользователем.

В большинстве случаев специалист по анализу данных, работающий над моделью, не имеет непосредственного доступа к среде развертывания или считает, что написание пользовательского API REST для тестирования недавно обученной модели занимает много времени.

Если вас беспокоит какая-либо из вышеперечисленных задач, то Google предлагает готовое решение под названием Tensorflow Serving.

Что такое Tensorflow Serving?

Согласно Google, Tensorflow Serving - это гибкая высокопроизводительная система обслуживания моделей машинного обучения. Он используется для развертывания и обслуживания моделей машинного обучения. Он может одновременно обслуживать несколько версий одной и той же модели. Он имеет встроенную поддержку моделей Tensorflow.

Это очень базовое руководство по использованию Tensorflow Serving для быстрого локального тестирования недавно обученной модели Tensorflow. Кроме того, вы можете использовать ту же технику для простого развертывания модели в производстве. Он масштабируется из коробки, если используется в системе оркестровки контейнеров, такой как Kubernetes.

Докер! что это ?

Вы должны быть знакомы с Docker, прежде чем переходить к следующим шагам. Docker - это открытая платформа для разработчиков и системных администраторов, позволяющая создавать, поставлять и запускать распределенные приложения на ноутбуках, виртуальных машинах центра обработки данных или в облаке. Здесь можно найти очень хорошее руководство по основам Docker.



Обычно для разработки веб-службы RESTful с конечной точкой прогнозирования для модели, обученной с помощью Tensorflow, необходимо написать веб-службу на Python с использованием выбранной вами структуры, например Flask. Следующим шагом будет написание файла Docker с использованием базового образа Alpine Linux или Ubuntu, установка необходимых библиотек и т. Д. И создание образа для развертывания.

Все эти шаги уже выполнены в образе Docker Tensorflow Serving. Конечному пользователю нужно просто развернуть контейнер с недавно обученной моделью, и он / она получит конечную точку REST для прогнозирования из коробки. В следующих шагах я кратко объясню, как использовать образ Docker Tensorflow Serving.

Шаги по созданию и развертыванию модели в контейнере обслуживания Tensorflow

Я использовал Keras и Tensorflow для обучения и сохранения модели. Следующие шаги можно использовать для сохранения модели, обученной с помощью Keras, для развертывания в контейнере обслуживания Tensorflow.

from keras.layers.core import K
from tensorflow.python.saved_model import builder as saved_model_builder
 
 model = Sequential()
 …..
 …
 model.compile(…)
 
 K.set_learning_phase(0)
 config = model.get_config()
 weights = model.get_weights()
 new_model = Sequential.from_config(config)
 new_model.set_weights(weights)
 
 builder = saved_model_builder.SavedModelBuilder(export_path)
 signature = predict_signature_def(
 inputs={'input': new_model.inputs[0]},
 outputs={'output': new_model.outputs[0]})
 
 
 with K.get_session() as sess:
 
 builder.add_meta_graph_and_variables(
 sess=sess,
 tags=[tag_constants.SERVING],
 clear_devices = True,
 signature_def_map={
 signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature}
 )
 builder.save()

После завершения процесса обучения в export_path создаются файл с именем «saved_model.pb» и каталог «переменные». В каталоге переменных находятся файлы «variables.data-00000-of-00001» и «variables.index».

Docker должен быть установлен в вашей системе, прежде чем переходить к следующему шагу.

Получите последний образ докеры Tensorflow Serving. Будет получен минимальный образ докеры с установленным Tensorflow Serving.

docker pull tensorflow/serving

Если вы хотите понять, что происходит внутри этого контейнера докеров, то файл Dockerfile находится здесь:



Он предоставляет порт 8501 для REST. Теперь просто запустите док-контейнер, монтирующий том, используя путь, по которому сохранена модель. Одним из важных моментов здесь является то, что модель, сохраненная после обучения, должна находиться в каталоге с номером, например. 00000123. Это позволяет Tensorflow Serving создавать версию модели во время развертывания, чтобы новые модели могли иметь разные версии.

docker run -p 8501:8501 -v <path to model parent directory>:/models/<model_name> -e MODEL_NAME=<model_name> -t tensorflow/serving &

Эта команда запустит контейнер докеров, развернет модель и сделает конечную точку REST доступной для получения прогнозов.

Проверьте правильность развертывания модели с помощью curl:

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/<model_name>:predict

Это все, что нужно для быстрого тестирования недавно обученной модели в вашей локальной системе. Чтобы иметь надлежащую тестовую среду, используйте шаги предварительной обработки, необходимые для преобразования входных данных во входной вектор модели и легкого тестирования нескольких значений в скрипте Python.

Надеюсь, это поможет людям быстро проверить свои модели на работоспособность и т. Д., Прежде чем приступить к развертыванию облака.