По ходу стажировки я работаю над созданием новых и доработкой существующих пайплайнов. Эти конвейеры являются частью цикла обучения для модели машинного обучения.

В конвейере есть несколько компонентов (или, как любит выражаться Dagster, активы): 1) база данных BigQuery, 2) веб-приложение аннотации React-Flask-Postgres, которое оценивает обучение и тестовые примеры, и где все это объединяется, 3) Dagster, платформа оркестровки данных. С помощью этих компонентов различные конвейеры постоянно запрашивают производственные данные, делают прогнозы на основе производственных данных, извлекают-преобразуют-загружают (ETL) примеры, аннотированные человеком, в модель и наполняют веб-приложение дополнительными аннотациями, сделанными людьми.

Первый конвейер требовал перенастройки конечной точки модели Sagemaker. Конвейер должен был хранить модель и идентификатор запуска, а также некоторые промежуточные значения, рассчитанные моделью. После реконструкции и серии неправомерных развертываний конвейер был готов запрашивать производственные данные, прогонять их через модель, а затем выводить результаты в таблицу BigQuery.

Или, в терминах/жаргоне Дагстера, вот еще одна диаграмма, состоящая из «ops» (операций). Ops — это узлы, выполняющие определенные действия в рамках конвейера. Форма операций для создания графиков, как показано ниже (все имена операций являются псевдонимами). Он контролировал управление вводом-выводом, с которым у меня были проблемы.

Вышеприведенный пример является относительно простым, поэтому здесь приведен более сложный пример, включающий большее количество узлов и систем. В первую очередь это служба ETL, которая загружает оцененные тестовые примеры для создания метрик для модели и наполняет веб-приложение дополнительными примерами для оценки людьми.

Для таких сложных конвейеров, как этот, я подумал, что Dagster использует операции для создания визуальных графиков.

Я разделил процесс на два отдельных конвейера и полностью отделил их от других. Это позволило конвейерам работать по разным расписаниям и триггерам.

Сначала у меня были проблемы с hydrate_webapp и get_evaluated_and_incomplete, так как я думал о прямой вставке/запросе данных из базы данных Postgres веб-приложения. Однако создание еще одного слоя абстракции (например, простое добавление дополнительных конечных точек в приложение Flask) упростило задачу.

В следующий раз я напишу о работе с моделями машинного обучения: не сами модели, а все, что с ними связано, от развертывания до создания необходимых конечных точек.