Комментарии 9
А разве хорошая затея делать
На каждый запрос? Почему нельзя загрузить в приложении модель и потом к загруженной уже обращаться? Или я чего-то не понял?
model = keras.models.load_model('model.h5')
На каждый запрос? Почему нельзя загрузить в приложении модель и потом к загруженной уже обращаться? Или я чего-то не понял?
Не совсем понял, что имеется ввиду, можете пример написать или ссылку дать, где это реализовано
У вас в разделе «Построение HTTP REST API»
Т.е. при каждом запросе, будет грузиться модель с диска, что не хорошо по скорости, а если модель большая(1гб+), запрос будет отрабатывать слишком долго.
В ссылках у Вас есть пример на github в котором сделано как я говорю.
Т.е. сначала все загрузили в память при старте приложения, а потом уже дергаем метод для распознавания.
@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() при прогнозе.
Решалось инструкциями
graph = tf.get_default_graph() при инициализации модели
и
with graph.as_default() при прогнозе.
Можно использовать Nvidia Triton Inference Server и упростить жизнь еще сильнее.
Или Tensorflow Serving
P.S. А разве docker-compose работает с флагом deploy.replicas? Вроде если только запускать compose файл через docker stack
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.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Развертывание ML модели в Docker с использованием Flask (REST API) + масштабирование нагрузки через Nginx балансер