Как стать автором
Обновить

Развертывание ML модели в Docker с использованием Flask (REST API) + масштабирование нагрузки через Nginx балансер

Время на прочтение 5 мин
Количество просмотров 14K
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 9

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

А разве хорошая затея делать
model = keras.models.load_model('model.h5')

На каждый запрос? Почему нельзя загрузить в приложении модель и потом к загруженной уже обращаться? Или я чего-то не понял?

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

У вас в разделе «Построение HTTP REST API»
@app.route('/image', methods=['POST'])
def image_post_request():  
    model = keras.models.load_model('model.h5')

    x = image.convert(request.json['image'])
    y = model.predict(x.reshape((1,28,28,1))).reshape((10,))
    n = int(np.argmax(y, axis=0))
    y = [float(i) for i in y]


Т.е. при каждом запросе, будет грузиться модель с диска, что не хорошо по скорости, а если модель большая(1гб+), запрос будет отрабатывать слишком долго.

В ссылках у Вас есть пример на github в котором сделано как я говорю.
Т.е. сначала все загрузили в память при старте приложения, а потом уже дергаем метод для распознавания.
Когда я подобное делал — там была еще магия между tf и flask, связанная с потоками исполнения (кажется, поток основного приложения отличается от потока, в котором все запросы обрабатываются. Появляется сообщение об ошибке вида Tensor xxx is not an element of this graph).
Решалось инструкциями
graph = tf.get_default_graph() при инициализации модели
и
with graph.as_default() при прогнозе.
Или Tensorflow Serving

P.S. А разве docker-compose работает с флагом deploy.replicas? Вроде если только запускать compose файл через docker stack

Работает, docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Names}}":


CONTAINER ID   IMAGE                NAMES
d6fe821c8af9   nginx                nginx-html
21ed0aac2ffe   nginx                nginx-balancer
930f5db9faca   mnist-microservice   ml_microservice_mnist-microservice_1
9e6dded634ee   mnist-microservice   ml_microservice_mnist-microservice_2
d4ad3a3af687   mnist-microservice   ml_microservice_mnist-microservice_3

Попробуйте все таки что-то новенькое. Например хранить модель в redisai а веб фреймворк взять fastapi.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории