Если вы пропустили это, посетите первую часть этой серии, чтобы получить обзор моего проекта.

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

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

Термины «изображение» и «окружающая среда» могут несколько сбивать с толку или частично совпадать.

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

С другой стороны, файл среды или «конфигурация» содержит инструкции для вашего компьютера о том, что следует загружать и устанавливать, но в нем нет программного обеспечения.

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

Почему это полезно? Несколько причин.

Воспроизводимость

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

Управление конфликтами

Я имею в виду конфликты не между людьми — а между упаковками! Если вы выполняете анализ изображений в Python, ваш выбор библиотек Python может быть специфичным для этого варианта использования; но если вам затем нужно пойти и заняться НЛП, для этого могут потребоваться некоторые другие. Если все эти библиотеки правильно работают вместе, это прекрасно, но во многих случаях один пакет может конфликтовать с другим, или может потребоваться разная нумерация версий. Используя разные изображения для своих проектов, вы можете иметь одно со всеми инструментами анализа изображений, а другое — со всеми НЛП, и у них не будет шанса конфликтовать.

Сотрудничество

Рядом с проблемой воспроизводимости стоит сотрудничество в науке о данных. Если вы производите анализ, а затем кто-то другой хочет его адаптировать или запустить самостоятельно, существует реальный риск того, что их рабочее пространство будет отличаться от вашего, и что-то может пойти не так. (Это ядро ​​проблемы «Ну, это работает на моем компьютере», с которой вы, возможно, сталкивались раньше.) Лучшее решение — использовать изображения, потому что вы можете отправить своему коллеге правильный спецификации среды, которые они могут настроить всего за несколько кликов. Больше никаких разрывов, мешающих производительности.

Также очень важно иметь упорядоченные изображения при использовании облачной IDE, потому что, в отличие от локального приложения, могут быть случаи, когда пользовательские настройки не могут сохраняться в Интернете бесконечно. Наличие файла спецификаций среды означает, что вы сможете настроить рабочее пространство именно так, как вам нужно, без ручной установки десятков библиотек.

Как?

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

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

  1. В командной строке установить conda.
  2. Создайте среду conda, запустив ее в командной строке: conda create --name my_environment
  3. Окружение теперь существует! Это объект, который содержит все инструкции и состояния вашей среды. Если вы хотите что-то добавить или использовать, вы запустите conda activate my_environment

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

Теперь вы можете просто хранить файлы спецификаций среды в своей системе инфраструктуры кода, такой как Github или Bitbucket, и это может работать нормально! Если вы являетесь опытным пользователем и хотите управлять своими полными образами, Dockerhub — это золотой стандарт. Однако некоторые сервисы предлагают управление изображениями или средами в рамках более крупного набора инструментов для обработки данных/машинного обучения, что может быть очень удобно, когда вы работаете в команде. Давайте посмотрим на конкретные предложения там.

Основные моменты с рынка

Управление изображениями на основе графического интерфейса

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

Докер/Командная строка

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

Нет пользовательских изображений

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

Вращай свой собственный

Стоит также упомянуть, что вы можете создать всю свою собственную инфраструктуру для оркестрации контейнеров, используя такие инструменты, как AWS EKS или Kubernetes, но в этой статье предполагается, что вам не обязательно нужен такой уровень сложности. Но он определенно есть, и многие люди используют эти системы!