Kubernetes получает широкое распространение во всех отраслях, и сообщество искусственного интеллекта (ИИ) не является исключением. Алгоритмы искусственного интеллекта часто требуют больших вычислительных мощностей, и организации экспериментировали с несколькими подходами к предоставлению этой мощности: ручное масштабирование на «голых» компьютерах, масштабирование виртуальных машин в общедоступной облачной инфраструктуре и системах высокопроизводительных вычислений (HPC).

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

Что такое Кубернетес?

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

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

Как Kubernetes может помочь проектам машинного обучения

Вот несколько способов, которыми Kubernetes может сделать проекты машинного обучения более эффективными.

Автомасштабирование

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

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

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

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

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

Управление графическим процессором

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

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

Управление данными

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

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

Мульти аренды

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

Начало работы с машинным обучением в Kubernetes с использованием KubeFlow

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

Вы можете использовать набор инструментов Kubeflow для интеграции всех ресурсов, необходимых для запуска ваших моделей в Kubernetes. Он позволяет интегрировать библиотеки машинного обучения, такие как TensorFlow и PyTorch, файлы развертывания Kubernetes и Jupyter Notebooks.

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

Большие команды полагаются на большие идеи. Узнайте, как специалисты Uber, WorkFusion и The RealReal используют Comet, чтобы масштабировать свои модели машинного обучения и обеспечить прозрачность и совместную работу в масштабах всей компании.

Вот заметные преимущества Kubeflow:

  • Используйте Kubernetes для развертывания, масштабирования и управления машинным обучением. Kubeflow предлагает интерфейсы конфигурации, которые позволяют указать необходимые инструменты машинного обучения для вашего рабочего процесса. Затем вы можете развернуть свой рабочий процесс в нескольких облачных средах для экспериментов или рабочих сценариев.
  • Упростите управление Kubernetes — вы можете быстро установить Kubeflow в различных дистрибутивах Kubernetes. Вы можете использовать готовые пакеты для поддерживаемого распространения или использовать манифест Kubernetes для установки, если готовые пакеты недоступны.
  • Управление учебными заданиями с помощью веб-интерфейса. Kubeflow предоставляет веб-интерфейсы, которые помогут вам управлять различными учебными заданиями. Он также предоставляет предварительно настроенные ресурсы для развертывания учебных заданий. Эта функция позволяет обучать модели без ручной установки и настройки библиотек.
  • Автоматизация распределенного обучения. Kubeflow помогает использовать функции параллельных вычислений кластеров Kubernetes. Вы можете использовать набор инструментов для настройки автоматизированного распределенного обучения для ваших моделей машинного обучения.
  • Настройте разгрузку графического процессора — вы можете интегрировать Kubeflow с графическими процессорами, настроенными на доступ к определенным кластерам Kubernetes. Однако вам необходимо настроить доступ к графическому процессору вручную.
  • Упростите совместную работу — Kubeflow предлагает встроенные сервисы Notebook, доступные из пользовательского интерфейса. Вы можете использовать эту функцию для настройки записных книжек и совместного использования их с другими соавторами.

Краткое руководство: начало работы с Kubeflow

Этот учебник является сокращением от официального руководства по быстрому запуску.

Предпосылки

Прежде чем начать, убедитесь, что у вас есть:

  • Работающий кластер Kubernetes
  • kubectl развернут на локальной машине

Установите конвейеры Kubeflow через Kustomize

Существует несколько способов развертывания конвейеров Kubeflow. Ниже мы покажем распространенный способ автономного развертывания конвейеров Kubeflow с помощью Kustomize, расширения настройки Kubernetes.

Выполните следующие команды:

export PIPELINE_VERSION=1.7.1
kubectl apply -k “github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=$PIPELINE_VERSION”
kubectl wait — for condition=established — timeout=60s crd/applications.app.k8s.io
kubectl apply -k “github.com/kubeflow/pipelines/manifests/kustomize/env/dev?ref=$PIPELINE_VERSION”
Allow 3–5 minutes for Kubeflow Pipelines to deploy. After deployment, run the following command to get the URL for the Kubeflow Pipelines UI:
kubectl describe configmap inverse-proxy-config -n kubeflow | grep googleusercontent.com

Запустите базовый конвейер

Давайте посмотрим, как запустить пример конвейера с некоторыми операциями Python, но без реальной модели машинного обучения. В списке конвейеров на главном экране нажмите [Учебник] Передача данных в компоненты Python.

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

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

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

Заключение

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

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

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.