DRF и TensorFlow в производственном WSGI. Как загружать модели только один раз для всех запросов

Я создал API, используя Django Rest Framework. API использует модель для классификации объектов с помощью TensorFlow. Первоначальная загрузка TensorFlow (import tensorflow as tf) может занять время для инстанцирования (около 30 секунд), к счастью, они нужны мне только один раз, а затем остальная часть моего приложения может использовать доступ к предварительно загруженной модели.

Локально я решил эту проблему, импортировав TensorFlow и мои модели всего один раз во время запуска Django в settings.py, например:

import tensorflow as tf
MODEL = tf.keras.models.load_model(BASE_DIR /'saved_model/')

Это позволяет мне вызывать и повторно использовать модель в моих представлениях/сериализаторах без необходимости повторно импортировать или загружать их при каждом запросе, например:

В serializers.py:

# Get Model
model = settings.MODEL
model.predict(SOMEPADDEDVALUE)

Все хорошо работает в моей локальной разработке (используя runserver). Однако, я хочу перевести мой Django API в продакшн и меня беспокоит вышеупомянутый подход!

Я буду использовать WSGI сервер, который, как я полагаю, будет использовать Multi- Threading (или multiprocess я их путаю) и начальная загрузка моих моделей будет дублироваться при каждом запросе (я думаю) что означает, что API будет непригоден для использования.

Я уверен, что я не первый, кто столкнулся с этой проблемой при использовании сохраненных моделей TensorFlow с Django в Production, но я не могу найти ничего, что помогло бы объяснить, как это сделать. Как другие решают эту проблему?

Чтобы было понятно: Вопрос:

Использование Django в продакшене (WSGI)... Как мне загрузить мои модели только один раз (как синглтон) и сделать их доступными при каждом запросе, не загружая их снова в продакшене?

Вернуться на верх