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)... Как мне загрузить мои модели только один раз (как синглтон) и сделать их доступными при каждом запросе, не загружая их снова в продакшене?