В постоянно развивающемся мире операций машинного обучения (MLOps) эффективность и производительность имеют решающее значение для организаций, стремящихся извлечь выгоду из потенциала своих моделей машинного обучения. Цель состоит в том, чтобы предоставить пользователям платформы оптимизированный и стандартизированный интерфейс, который позволит им сосредоточить свое внимание на эффективном предоставлении ценности, в то время как предложения платформы постоянно совершенствуются, а базовая инфраструктура оптимально совершенствуется. Чтобы удовлетворить эти потребности, команда MLOps из Virgin Media O2 (VMO2) разработала мощный инструмент интерфейса командной строки (CLI), специально предназначенный для выполнения распространенных задач машинного обучения.

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

Выполнение командных операций

В типичном рабочем процессе выполнения сценариев Python вы начинаете с перехода к каталогу, в котором находится ваш сценарий Python, в терминале или командной строке. После этого вы вводите команду python, за которой следует назначенное имя сценария, например python main.py.

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

python main.py --input input.txt --output output.txt --operation train

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

Makefiles в помощь

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

В Makefile список правил выделяется рядом с целевым именем для каждого правила. С определенными правилами, целями и командами Makefile выполняет указанные команды, используя команду make, за которой следует имя цели. Например, вместо перечисления длинной строки зависимостей Python можно создать задачу установки для установки всех доступных зависимостей в файл requirements.txt, просто выполнив команду make install. Ниже показан пример простого Makefile для проекта Python.

venv: # Set up virtual environment
  python -m venv venv
install: # Install dependencies
  pip install -r requirements.txt
test: # Run tests
  pytest -v tests/
docs: # Build documentation
  sphinx-build docs/ docs/_build
package: # Package the project
  python setup.py sdist bdist_wheel

Для запуска этих команд в корне каталога создается Makefile и соответственно выполняется командой make.

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

Недостатки Make-файлов

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

Дополнительные недостатки могут возникнуть при внедрении новых функций пакета, поскольку это требует создания новых триггерных функций. Учитывая, что эти новые функции необходимы во всех существующих проектах, это подразумевает внесение изменений в несколько отдельных файлов Makefile. Эта форма ручной модификации не соответствует передовым практикам разработки программного обеспечения.

Вот основные недостатки использования Makefiles в большом проекте:

  1. Накладные расходы на обслуживание. По мере увеличения количества проектов поддержка нескольких копий одного и того же файла Makefile становится затруднительной. Если в процессе сборки или зависимостях требуются изменения, вам придется применить их индивидуально к каждому Makefile, что приводит к дублированию кода, что может привести к ошибкам и отнять много времени.
  2. Несогласованные интерфейсы проектов. Копирование файлов Makefile может привести к несогласованности между проектами, особенно если в отдельные файлы Makefile вносятся изменения. Несогласованные системы сборки могут привести к тому, что разные проекты будут вести себя по-разному, что усложнит обеспечение единообразия и предсказуемости во всей кодовой базе.
  3. Трудность масштабирования сложных проектов. По мере усложнения проекта Makefile может становиться запутанным и сложным в управлении. Сложные проекты часто требуют более продвинутых систем сборки или инструментов управления зависимостями, и базового файла Makefile может быть недостаточно.
  4. Отсутствие внутреннего инструментария для Bash Инструментарий платформы в основном написан на Python. У команды есть зрелые стратегии и инструменты для управления жизненным циклом приложений на основе Python, которые нельзя повторно использовать при создании файлов Makefile.

Чтобы решить вышеупомянутые проблемы, команда MLOps создала интерфейс командной строки на основе Python.

Специальное решение MLOps CLI

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

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

Интерфейс командной строки MLOps упакован как пакет Python, в котором используется инструмент управления зависимостями и упаковки Poetry. Пакет был создан с использованием Python и Click. Чтобы облегчить установку и распространение, CLI публикуется в частном реестре пакетов GitLab. Конвейер GitLab CI/CD настроен на автоматическую сборку и отправку пакета в реестр всякий раз, когда изменения передаются в репозиторий. Это гарантирует, что последняя версия пакета будет доступна для пользователей.

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

Демоверсия реализации

Как показано на рисунке 2, CLI использует концепцию произвольного вложения команд пакета Click. Поскольку командой входа для CLI является ключевое слово mlops, групповой вызов создается с ключевым словом mlops следующим образом:

@click.group()
def mlops() -> None:
  """MLOps CLI Commands"""
  pass

Тогда подкоманда, например pipelines, будет создана как:

@click.group()
def pipelines() -> None:
  """Pipeline commands"""
  pass

Затем субкоманда pipelines добавляется в группу mlops с помощью:

mlops.add_command(pipelines)

Этот подход используется для создания иерархии, как описано на рисунке 2. Чтобы выполнить testtrigger через CLI, должна быть выполнена следующая команда, начиная с ключевого слова входа mlops и до последнего ключевого слова триггера с помощью подкоманд:

mlops pipelines training test

Преимущества интерфейса командной строки MLOps

  • Упрощенный рабочий процесс. Инструмент CLI предлагает упрощенный, централизованный и оптимизированный рабочий процесс для распространенных задач машинного обучения. Предоставляя интерфейс командной строки, адаптированный к потребностям специалистов по машинному обучению, CLI позволяет пользователям выполнять сложные задачи с помощью нескольких простых командных триггеров. Такое упрощение сокращает время обучения для новых пользователей и позволяет им сосредоточиться на своих основных задачах, таких как разработка моделей и экспериментирование.
  • Единый интерфейс для всех проектов.Теперь конечные пользователи имеют единый интерфейс при выполнении общих задач машинного обучения в разных проектах. Команды могут плавно переходить между различными этапами жизненного цикла машинного обучения, обеспечивая эффективное сотрудничество и быстрое выполнение итераций.
  • Интеграция с существующей экосистемой развертывания. Интерфейс командной строки теперь интегрирован в существующую развитую внутреннюю экосистему Python, что упрощает безопасную доставку новых функций через версии пакетов с поддержкой версий. Эта возможность обеспечивает стабильность выпуска, позволяя пользователям зависеть от конкретной версии пакета, что облегчает воспроизводимость в различных средах.

Заключение

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

Написано Арийо Олувасанми при участии всей команды VMO2 MLOps: Алекса Джонса, Берка Молламустафаоглу, Глеба Лукикова, Шехеда Гирси и Сидни Рэдклиффа.

Мы нанимаем! Хотите работать на нас? Ознакомьтесь с нашими открытыми вакансиями здесь.