Лучшие практики проектирования кодовой базы для долгосрочного эффективного сотрудничества между специалистами по данным и инженерами - PullRequest
0 голосов
/ 06 июля 2018

Некоторый контекст:
Основной набор продуктов находится на Java и поддерживается исключительно инженерами. Специалисты по обработке данных несут ответственность за предложение алгоритмических улучшений / дополнений.
Исследователи данных не пишут код на Java, но используют Python для своей работы. Они сотрудничают с командой разработчиков, чтобы идеи, выраженные в виде кода Python, были реализованы в базовой кодовой базе Java.

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

Какая архитектура облегчила бы эту проблему?

1 Ответ

0 голосов
/ 24 июля 2018

Мы сталкивались с подобной настройкой в ​​некоторых из наших проектов ML: инженеры-разработчики имеют базовый стек Java, который предоставляет серию API RESTful для данных, хранящихся в NoSQL (MongoDB), и инженеров данных / ученых данных Автор сценариев ML на Python для обучения и разработки функций. Вот некоторые вещи, которые нам помогли:

  1. Команда разработчиков Java-продуктов создает API-интерфейсы RESTful, позволяющие инженерам данных извлекать данные (в формате JSON / CSV) из MongoDB на регулярной основе, которую мы используем для разработки моделей / обучения / разработки функций.
  2. Мы используем Quilt для простого управления нашими наборами данных, такими как код (версии, многоразовые пакеты данных ) и Git для версий маринованные ML модели. Вы можете вернуться / перейти к любому сохраненному состоянию или эпохе модели (например, для нейронных сетей), используя этот подход, используя versions и / или tags и / или hashes.
  3. Ученые по данным используют записные книжки Jupyter для просмотра / работы с данными и моделями. Вы можете легко вставить данные (лениво загрузить) в фрейм данных Pandas, используя Quilt - это всего лишь пакет Python :
from quilt.data.username import my_data_package
  1. Команда разработчиков Java использует метод exec() в классе Java Runtime для обработки новых / свежих данных в пакетном режиме с использованием сценариев Python командной строки (созданных инженерами данных Python - это исполняемые файлы с аргументами командной строки для используя правильную обученную модель и ввод данных), которые загружают маринованные модели для генерации прогнозов. Смотрите этот SO ответ .

Я не думаю, что это каноническое решение или лучшая практика как таковое , но это помогло нам сбалансировать потребности команды разработчиков Java и Python DE / DS.

Некоторые из преимуществ Quilt:

  • Воспроизводимость - Представьте исходный код без версий. Уч. Зачем жить с не версированными данными? Версионные данные делают анализ воспроизводимым путем создания однозначных ссылок на потенциально сложные зависимости данных.
  • Сотрудничество и прозрачность - Данные любят делиться. Quilt предлагает единый каталог для поиска и обмена данными.
  • Аудит - реестр отслеживает все операции чтения и записи, чтобы администраторы знали, когда к данным обращаются или изменяют.
  • Меньше подготовки данных - реестр абстрагируется от сети, хранилища и формата файлов, чтобы пользователи могли сосредоточиться на том, что они хотят делать с данными.
  • Дедупликация - Данные идентифицируются по их хэшу SHA-256. Дублирующиеся данные записываются на диск один раз для каждого пользователя. В результате большие повторяющиеся фрагменты данных потребляют меньше пропускной способности диска и сети.
  • Ускоренный анализ - Сериализованные данные загружаются в 5-20 раз быстрее, чем файлы. Более того, специализированные форматы хранения, такие как Apache Parquet, сводят к минимуму узкие места ввода-вывода, так что такие инструменты, как Presto DB и Hive, работают быстрее.

Источник

Надеюсь, это поможет! Удачи и хотелось бы услышать, как все идет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...