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

Представленный здесь материал представляет собой краткое изложение уроков, которые мы извлекли из нашего профессионального опыта. Чтобы получить более полную и подробную информацию, вы можете подать заявку на наш Обучение ML In Production ,« 28–29 февраля и 6–7 марта в Барселоне, Испания .

1. Организуйте свой проект осмысленно

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

«Организуйте свои проекты четким, последовательным и значимым образом»

Давайте определим каждый термин более подробно:

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

К счастью для нас, нам не нужно изобретать велосипед и продумывать структуру, необходимую для каждого варианта использования. Вместо этого мы можем полагаться на такие инструменты, как Cookiecutter или pyScaffold, чтобы создавать или адаптировать шаблоны, которые уже созданы кем-то другим, и использовать их для каждого нового проекта. так что когнитивная нагрузка на поддержание последовательности близка к нулю.

У нас даже может быть несколько шаблонов, например: один шаблон, предназначенный для разового анализа и прототипов, а другой - для проектов, связанных с обучением и развертыванием моделей машинного обучения. Эти шаблоны могут включать в себя общие шаблоны настройки, закодированные в Makefiles (см., Например, пример из нашего учебного проекта Capstone) и pre / post hooks, которые автоматизируют другие задачи, такие как инициализация репозитория git или конфигурация pre- совершить крючки.

2. Используйте Контроль версий для управления изменениями.

Проекты Data Science обычно являются итеративными по своей природе: вы пытаетесь реализовать несколько идей, проверяете их эффективность и используете полученные знания для реализации последующих итераций, которые будут более полными или более эффективными.

В результате нам необходимо управлять изменениями в нашем коде (и, возможно, в наших данных) таким образом, чтобы мы могли сохранять здравомыслие. Системы контроля версий (VCS), такие как git или mercurial, являются отраслевыми стандартами в индустрии разработки программного обеспечения, и их освоение может стать мощным навыком в вашем наборе инструментов. Кроме того, есть ряд практик, которые мы должны продвигать в наших командах, чтобы наилучшим образом использовать VCS:

  • Ведение одного или нескольких репозиториев для всех ваших проектов в области науки о данных, интегрированных с производственной средой остальной части компании.
  • Внедрение парного программирования для укрепления стандартов высокого качества кода, которое также помогает более старшим специалистам по обработке данных наставлять менее опытных членов команды.
  • Обеспечение экспертной оценки вариантов моделирования кода и науки о данных.
  • Установка разрешений репозитория, требующих одного или нескольких утверждающих запросов на вытягивание всякий раз, когда функции вводятся в основные ветки.
  • Добавление правильного управления версиями пакетов и их интеграция с фреймворком CI / CD (непрерывная интеграция / непрерывное развертывание)
  • Использование инструментов для управления версиями и происхождением наборов данных и артефактов, таких как DVC

3. Улучшите свои знания Python

Python является наиболее часто используемым языком программирования в Data Science по двум фундаментальным причинам:

  1. Позволяет быстро разрабатывать и создавать прототипы новых проектов,
  2. Его также можно использовать в производственных средах и конвейерах данных.

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

  • Модульность: объекты, функции, модули, пакеты.
  • Объектно-ориентированное программирование: классы, наследование, перегрузка операторов
  • Другие шаблоны программирования: генераторы, итераторы, карта, сокращение, декораторы.
  • Инструменты правильной реализации: инструменты для ведения журнала, кэширования, тестирования, настройки во время выполнения.
  • Богатство стандартных библиотек, см., например: Модуль недели Python 3 или Официальный Краткий обзор стандартной библиотеки ».

4. Сделайте свой код переносимым и воспроизводимым.

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

Мы определяем вычислительную среду как все, что участвует в выполнении вашего кода: архитектура компьютера (ов), на котором он работает, его операционная система, системные библиотеки, которые он вызывает, а также любые другие службы, с которыми ваш код может взаимодействовать (базы данных, прочие микросервисы и т. д.). Результат нашей работы состоит из коллекции артефактов, полученных в результате обработки ряда входных данных (данные, среда) с помощью нашего программного обеспечения (определяется нашим источником код).

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

  • Разработка: здесь мы разрабатываем и тестируем наш код, например: ваш ноутбук или ноутбук вашего коллеги.
  • Подготовка / тестирование: здесь ваш код интегрируется с другими ресурсами или службами, на которые он полагается, в среде, имитирующей рабочую среду.
  • Производство: это реальный мир, где ваш код будет взаимодействовать с остальной инфраструктурой и вселенной (надеюсь) предсказуемым образом.

Даже если вы не думаете, что ваш код когда-либо попадет в «Производство», позвольте мне спросить вас: есть ли кто-нибудь, кто принимает решения на основе вашего анализа? Влияют ли результаты вашей работы на пользователей или клиентов? Если вы ответили «да» на любой из этих вопросов, значит, ваш код уже работает в «производственной» среде!

Чтобы гарантировать, что наш код работает предсказуемо во всех этих различных средах (т. Е. Генерирует один и тот же вывод для одного и того же ввода), нам нужно сделать его переносимым и воспроизводимым. Чтобы сделать его переносимым, нам нужно в меру своих возможностей убедиться, что изменения в среде не приведут к неожиданным изменениям в выводе кода. Чтобы сделать его воспроизводимым, нам нужно упростить другим участникам в разных средах выполнение нашего кода и получение тех же результатов.

К счастью, есть несколько инструментов, которые мы можем использовать, чтобы облегчить себе жизнь. Например, мы можем использовать conda или виртуальные среды для управления нашими зависимостями, в сочетании с контейнерами Docker для управления требованиями уровня ОС и Makefiles для автоматизации сложного процесса настройки (см. Пример из наш учебный проект ). Между прочим, эти инструменты также позволяют нам указать нашу среду как код, который можно зарегистрировать в системе контроля версий вместе с остальной частью нашего программного обеспечения. Кроме того, использование контейнеров делает возможным воспроизводимое, организованное развертывание через Kubernetes.

5. Знайте, когда использовать ноутбуки (а когда прекратить их использовать!)

Несмотря на свои недостатки, инструменты Notebook, такие как Jupyter Notebooks, Binder или Google Colab, стали де-факто IDE для быстрого прототипирования и обмена знаниями и анализами с коллегами. Когда нам нужно быстро загрузить данные и обучить базовую модель в пределах 15 минут, самый быстрый способ - развернуть ноутбук, чтобы провести быструю проверку.

Однако, как уже много раз сообщалось (см., Например, этот красивый JupyterCon talk заклятого врага Notebook Джоэла Груса или этот фрагмент из ThoughtWorks), Notebook не являются хорошими инструментами для разработки программного обеспечения, среди прочего, по следующим причинам:

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

Это означает, что как разработчики программного обеспечения (да, большинство специалистов по данным также являются разработчиками программного обеспечения), мы должны знать, когда нам нужно переключиться с правильного инструмента для быстрого прототипа на правильный инструмент для программного обеспечения. разработка. И обычно этот момент наступает раньше, чем большинство из нас осмеливается признать!

6. Примите собственные когнитивные предубеждения и напишите тесты!

«Остерегайтесь ошибок в приведенном выше коде; Я только доказал, что это правильно, а не пробовал ».

Д. Кнут

В разработке программного обеспечения тестирование является нормой. Однако Data Science традиционно придерживается другого рабочего процесса разработки, и тестирование обычно игнорируется.

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

Например, когда вы развертываете конвейеры данных и модели машинного обучения в облачной среде, такой как Google Cloud Platform (GCP) или Amazon Web Services (AWS), вы также должны учитывать взаимодействие между вашим программным обеспечением и компонентами облачной инфраструктуры:

  • Управление зависимостями с источниками данных (базы данных SQL / NoSQL, облачное хранилище и т. Д.)
  • Тестирование конечных точек микросервисов, таких как интерфейсы RESTful, где нужно имитировать части архитектуры, чтобы конечные точки можно было тестировать изолированно.
  • Помня, что базовая среда может измениться из-за исправлений безопасности, обновлений программного обеспечения, изменений в базовой инфраструктуре и т. Д.

Кроме того, тестирование компонентов машинного обучения обычно требует дополнительных соображений, например:

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

По всем вышеперечисленным причинам важно иметь правильно настроенную систему CI / CD, которая не только будет автоматически запускать модульные тесты при каждом запросе на вытягивание или новом ответвлении, но также будет запускать функциональные и интеграционные тесты перед развертыванием артефактов. в вашу тестовую или производственную среду. См., Например, обширный пост из блога Мартина Фаулера по этой теме.

7. Автоматизация - ваш друг

На данный момент, после всего лишь 7 из наших 9 рекомендаций, вы, возможно, уже задаетесь вопросом: «Как я должен позаботиться обо всем этом и выполнять свои обычные задачи статистического моделирования и исследования? ».

Ответ: Использование инструментов автоматизации . Многие задачи и проблемы, описанные в этом сообщении в блоге, можно автоматизировать с помощью различных инструментов, таких как Makefiles, cookiecutter или pre-commit, которые мы уже видели. Более конкретно для задач обработки данных и машинного обучения, существуют также различные платформы для написания кода в виде задач, описывающих этапы обработки, а также инфраструктуры оркестровки и выполнения. Примеры из них:

  • Pydoit: универсальный инструмент автоматизации сборки,
  • Pachyderm: фреймворк для простого создания, обучения и развертывания рабочих нагрузок в области обработки данных в кластере Kubernetes.
  • MLFlow Projects: пакеты и цепочки рабочих процессов Data Science воспроизводимым и многократно используемым способом.

Для более общей обработки данных и оркестровки рабочих процессов фактическими стандартами являются:

  • Apache Airflow: в Airflow рабочие процессы описываются как направленные ациклические графики (DAG). Каждый узел в графе - это задача, а ребра определяют зависимости между задачами.
  • Луиджи: разработанный Spotify, Luigi позволяет создавать ETL как набор взаимозависимых задач.

8. Используйте облачные платформы

Старые времена, когда рабочие нагрузки выполнялись на вашем компьютере или в локальном кластере, прошли… Благодаря своей гибкости, мощности и способности сокращать капитальные затраты облачные платформы стали важным инструментом в нашем наборе инструментов. Кроме того, они обеспечивают долгосрочные преимущества для построения систем на основе данных:

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

Например, Google Cloud Platform предлагает ряд инструментов, которые значительно сокращают время вывода продуктов на рынок для продуктов Data Science:

  • Облачное хранилище Google (CGS), которое можно использовать для безопасного и надежного хранения больших наборов данных,
  • BigQuery: используется для обработки, запросов и работы с огромными наборами данных. Вычислять даже сложные запросы по терабайтам данных очень быстро.
  • Google Compute Engine (GCE): вычисления по запросу для развертывания контейнеров докеров, их согласования и создания решения машинного обучения для полного развертывания.

Другие крупные облачные провайдеры, такие как Amazon Web Services или Microsoft Azure, предоставляют очень похожие управляемые услуги, избавляя нас от необходимости создавать и поддерживать дорогостоящую инфраструктуру собственными силами.

9. Узнайте, как развертывать модели как микросервисы.

Поигравшись с различными гиперпараметрами и архитектурами моделей, вы наконец-то обучили отличную модель машинного обучения… Поздравляем!

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

  1. Вы зависите от других инженеров, чтобы воплотить вашу модель в жизнь, или
  2. Вы узнаете, как развернуть свою модель, чтобы работа, оставленная другим инженерам (которая, вероятно, все еще будет существовать), была минимальной. В наши дни это означает:
  • Докер
  • Оркестровка с Kubernetes
  • Фреймворки веб-приложений, такие как Flask или FastAPI
  • Соображения производственного уровня: автоматическое масштабирование, регулярные развертывания, нагрузочное тестирование…

Выводы

Реализация проектов Data Science - нелегкая задача. В этом посте мы собрали 9 рекомендаций, которые доказали свою эффективность в нашей профессиональной жизни. В итоге:

  1. Используйте шаблоны для осмысленной организации ваших проектов
  2. Использовать контроль версий
  3. Знай свой Python!
  4. Сделайте свой код переносимым и воспроизводимым
  5. Разумно используйте записные книжки
  6. Не доверяйте своему коду, проверьте его!
  7. Максимально автоматизируйте
  8. Используйте облачные платформы
  9. Узнайте, как развертывать модели как микросервисы

Вы можете найти практическое применение некоторых наших рекомендаций в нашем учебном проекте Capstone, который мы разместили по адресу:



Если вы хотите узнать больше о темах, представленных в этом посте, вы можете присоединиться к нам на нашем тренинге Машинное обучение на производстве, 28–29 февраля и 6–7 марта в Барселоне, Испания.

Команда Barcelona ML in Production - это группа высококвалифицированных специалистов по обработке данных, базирующаяся в Барселоне, цель которой - помочь специалистам в области обработки данных повысить эффективность реализации проектов в области науки о данных и машинного обучения.

Бернат Гарсия Ларроса , Алейс Руис де Вилья Роберт , Тристана Сондон , Арнау Тибау Пуиг

Веб-страница: https://mlinproduction.github.io/

Twitter: https://twitter.com/ds_in_prod