Я создаю безсерверное приложение, чтобы делать некоторые прогнозы.
Простая архитектура приведена ниже:
RAW Data -> Feature extractor -> Model Prediction -> Many consumers
|
v
Persistence
Как средство извлечения, так и прогноз модели построены с использованием AWS Lambda. Кроме того, одновременно при отправке данных в средство извлечения необработанный ввод сохраняется в сегменте в s3.
Когда нам нужно разработать новую модель, мы строим следующий конвейер:
RAW Data -> Feature extractor -> Model Prediction -> Many consumers
|
v
Persistence
|
v
New Feature -> Model Training and testing processes -> New Model
Extractor
Проблема в том, что в новом модельном конвейере нам обычно приходится создавать функции из миллионов старых записей. Мы хотели бы иметь возможность воспроизводить функции, использованные в прогнозировании на момент запроса, и тестировать новые функции, извлеченные из необработанных данных.
При использовании простой лямбда-функции непросто создать несколько необработанных скриптов на python, для извлечения которых требуется около одной секунды, но при попытке воспроизвести ее до 1 миллиона хранимых записей это невозможно. Для этого у нас в настоящее время есть несколько сценариев Pyspark для обработки всех старых и новых функций для создания новой модели, но в этом случае у нас всегда есть две копии кода, одна в сыром python и другая для pyspark.
Я хотел бы знать, возможно ли согласование двух версий экстрактора функций с любой технологией. Я знаю, что можно провести несколько тестов, гарантирующих, что оба кода производят одинаковые эффекты, но каждая новая функция должна быть реализована в двух версиях, что сильно задерживает наш процесс развертывания.
Думаю, мне следует ожидать какой-то шаблон проектирования для этой проблемы.