Kubeflow: машинное обучение в Kubernetes — часть 1

Первоначально опубликовано на kubesimplify.com

Разработка и развертывание систем машинного обучения может быть проблемой из-за множества вещей, которыми вам нужно управлять. В этой статье я познакомлю вас и помогу начать работу с Kubeflow, а также пойму, как работает Kubeflow. Это первая статья из серии Kubeflow, и я постараюсь помочь вам ответить на вопрос «Почему и когда Kubeflow?» и понять архитектуру Kubeflow в сочетании с некоторыми из моего опыта и советов.

Еще один инструмент?

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

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

Наша цель — максимально упростить масштабирование моделей машинного обучения (ML) и их развертывание в рабочей среде, позволив Kubernetes делать то, в чем он хорош — kubeflow.org

Kubeflow начинался как простой способ запуска заданий TensorFlow в Kubernetes, но с тех пор он расширился до многоархитектурной многооблачной среды для запуска сквозных рабочих процессов машинного обучения на основе TensorFlow Extended. [Введение в КФ].

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

Ваш первый шаг с Kubeflow

Kubeflow может работать везде, где может работать Kubernetes, и мы начнем с установки Kubeflow, чтобы вы могли опробовать некоторые демонстрации в этой и следующих статьях. Чтобы протестировать или ознакомиться с Kubeflow, я бы порекомендовал вам запустить все демонстрации в kind или minikube, что позволит вам запустить кластер Kubernetes, созданный с намерением работать локально. Чтобы начать работу без локальной настройки, вы можете запустить их в GitHub Codespaces или Play with Kubernetes.

Я также рекомендую использовать MiniKF, если вы попробуете это локально, что делает запуск Kubeflow особенно простым и быстрым.

Чтобы развернуть Kubeflow в кластере kind, вы также можете использовать этот удобный скрипт (рекомендую проверить официальный репозиторий и при необходимости обновить версии Kubernetes или Kustomize):

wget -O - https://raw.githubusercontent.com/kubesimplify/kubeflow-series/main/1/scripts/kubeflow-kind.sh | bash

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

wget https://raw.githubusercontent.com/kubesimplify/kubeflow-series/main/1/scripts/kubeflow-kind.sh

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

kubectl get pods -n cert-manager
kubectl get pods -n istio-system
kubectl get pods -n auth
kubectl get pods -n knative-eventing
kubectl get pods -n knative-serving
kubectl get pods -n kubeflow
kubectl get pods -n kubeflow-user-example-com

По умолчанию доступ к Kubeflow осуществляется через переадресацию портов. Это позволяет быстро приступить к работе. Выполните следующую команду, чтобы переадресовать порт Istio Ingress-Gateway на локальный порт 8080:

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80

Как только вы сделаете это, посетив https://localhost:8080 (или внешний IP-адрес в случае виртуальной машины) и используя учетные данные по умолчанию:

[email protected]
12341234

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

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

Компоненты Kubeflow

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

В этой статье мы рассмотрим основные компоненты Kubeflow на высоком уровне:

  • Центральная панель управления. Центральная панель управления — это, вероятно, первое, на что вы обратили внимание в Kubeflow на предыдущем шаге. Это обеспечивает быстрый доступ к компонентам Kubeflow, развернутым в вашем кластере, и позволяет получить к ним доступ через пользовательский интерфейс.
  • Записные книжки Kubeflow. Машинное обучение — это очень многократный процесс, требующий множества экспериментов, которые вам, возможно, придется провести; Kubeflow Notebooks позволяет вам запускать среды разработки как контейнеры внутри модуля в вашем кластере Kubernetes с поддержкой JupyterLab, RStudio и VS Code, хотя вы можете иметь поддержку чего угодно с пользовательским образом контейнера. Это особенно упрощает управление вашими экспериментами, средами и динамическим масштабированием.
  • Kubeflow Pipelines: KFP — это компонент Kubeflow, который я лично использовал чаще всего, а также то, как я впервые открыл для себя Kubeflow. KFP позволяет легко управлять, создавать и развертывать сквозные масштабируемые рабочие процессы машинного обучения. Думайте об этом как о оркестраторе для конвейеров машинного обучения, упрощающем экспериментирование и развертывание.
  • Katib: позволяет работать с автоматизированными задачами машинного обучения, настройкой гиперпараметров и поиском нейронной архитектуры, а также поддерживает различные платформы машинного обучения, включая PyTorch, TensorFlow, MXNet и XGBoost. Гиперпараметры — это важные параметры, которые нельзя оценить напрямую из данных или которые можно узнать из данных. Поиск правильных значений гиперпараметров во многом зависит от предыдущего опыта и экспериментов, которые легко упрощаются с Katib. Довольно подробную мою статью об этом можно найти на [Dagli2021]. Поиск нейронной архитектуры позволяет автоматизировать процесс проектирования нейронной сети [Elsken2019][Stanley2002]. Katib поддерживает множество алгоритмов AutoML, которые помогут вам эффективно выполнять поиск, включая, помимо прочего, Hyperband [Li2017], случайный поиск, дифференциальную архитектуру se1.arch [Liu2018] и другие.
  • Обучение операторов. Они позволяют обучать модели машинного обучения распределенным образом в Kubeflow. На данный момент операторы обучения поддерживают задания TensorFlow, PyTorch, MXNet и XGBoost, которые по сути являются кастомными ресурсами Kubernetes, способ расширения API Kubernetes. Оператор обучения также содержит оператор интерфейса передачи сообщений, чтобы упростить работу со всеми заданиями распределенного обучения в стиле сокращения. Операция AllReduce синхронизирует параметры нейронной сети между отдельными процессами обучения после каждого шага оптимизации, это достигается путем агрегирования тензоров по все устройства, добавляя их, а затем делая их доступными на каждом устройстве. Хотя вы также можете использовать tf.distribute или torch.distributed API, они, конечно, зависят от фреймворка [Gibiansky2017][Sergeev2018]. Наконец, оператор обучения также включает поддержку задания для запуска нескольких модулей с помощью планировщика Volcano.
  • Многопользовательская среда. Kubeflow построен таким образом, чтобы несколько человек могли легко совместно работать над проектом. Мультитенантность строится вокруг пространств имен пользователей, а доступ пользователей определяется с помощью политик RBAC (управление доступом на основе ролей), которые уже существуют в Kubernetes. Вы можете легко ограничить каждого пользователя, чтобы он беспокоился только о компонентах Kubeflow и взаимодействовал с ними в своей конфигурации.

Это основные компоненты Kubeflow, однако Kubeflow также может быть соединен с некоторыми дополнительными надстройками, которые позволяют расширить возможности Kubeflow, включая, помимо прочего, KServe для обслуживания моделей, Feature Store для хранения, управления и обслуживания функций, kale для организации рабочих процессов машинного обучения и многого другого.

Общий обзор того, как работает Kubeflow?

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

Черпая вдохновение из [Breck2017] и kubeflow.org на высоком уровне, мы сначала определим рабочий процесс ML, а также посмотрим, где Kubeflow может помочь на этих этапах:

  1. Определите проблему: первый шаг, как следует из названия, включает в себя определение проблемы, которую вы хотите решить с помощью системы машинного обучения, а также обсуждение компромиссов модели и того, как будут использоваться выходные данные модели.
  2. Источник, подготовка и анализ данных. Этот шаг включает в себя определение достоверности модели, проверку качества данных и маркировку данных.
  3. Исследование модели. Этот шаг начинается с определения базовой производительности ваших задач. На этом этапе вы начнете с простой модели, используя исходный конвейер данных, и быстро изучите множество ортогональных идей и проведете эксперименты. Вы также можете найти самые современные модели для своей задачи и изменить или попытаться воспроизвести их, пытаясь установить контрольный показатель для вашего набора данных. Этот процесс особенно ориентирован на возможность быстро экспериментировать и получить представление о том, что может сработать для вас. Именно для этого и создан Kubeflow Notebooks: быстрые эксперименты без необходимости беспокоиться об управлении масштабированием.
  4. Уточнение модели. На этом этапе выполняется оптимизация модели, например поиск правильного набора гиперпараметров. На этом этапе может потребоваться вернуться к шагу 2 для целевого сбора данных (очень мало изображений в определенном стиле, что приводит к неправильным прогнозам для некоторых важных вариантов использования) или к шагу 3 для дальнейшей отладки моделей, что может потребовать повторной итерации. на предыдущих шагах тоже! Katib поможет вам в этом, позволяя легко выполнять настройку гиперпараметров и поиск нейронной архитектуры.
  5. Обучение модели. Затем вы захотите обучить свою модель машинного обучения, но на этот раз гораздо дольше и быть готовым к запуску в производство. К счастью, с этим аспектом рабочего процесса машинного обучения хорошо справляются обучающие операторы в Kubeflow, которые поддерживают множество сред. Вам также может понадобиться оценить свою модель при распределении тестов, чтобы понять различия между распределениями обучения и набора тестов.
  6. Развертывание модели. Наконец, теперь вы можете развернуть свою модель, которая, среди прочего, требует, чтобы вы обслуживали свою модель через REST API, поддерживали версии модели, выполняли откат модели, канареечное развертывание, пакетное прогнозирование и масштабирование. Вы можете использовать KServe или также использовать конвейеры Kubeflow, чтобы организовать другие способы обслуживания ваших моделей, такие как TensorFlow Extended, TorchServe, TensorRT и другие.
  7. Обслуживание: процесс, к сожалению, не заканчивается на шаге «Развертывание»; вам также необходимо иметь возможность отслеживать оперативные данные и распределения предсказаний модели, а также отслеживать отклонения данных и концепций. Эти данные также могут сказать вам, нужно ли вам переобучить вашу модель или какие конкретные изменения вам, возможно, потребуется внести. Этот этап является ценной частью любого рабочего процесса машинного обучения, и с Kubeflow вы также можете использовать интеграцию TensorBoard именно для этого.

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

Заключение

Спасибо, что были со мной до конца. Я надеюсь, что вы усвоили кое-что о развертывании машинного обучения и Kubeflow, и вам понравилось это читать. Если вы узнали что-то новое или вам понравилось читать эту статью, поделитесь ею, чтобы другие могли ее увидеть. А пока, увидимся в следующем посте!

Мы продолжим то, о чем мы говорим в этой статье, в следующей статье этой серии, где мы углубимся в блокноты Kubeflow, а пока прощайте!

Вы также можете найти меня в Твиттере @rishit_dagli, где я пишу о машинном обучении и открытом исходном коде.

Рекомендации

[Sculley2015] Скалли Д., Холт Г., Головин Д., Давыдов Э., Филлипс Т., Эбнер Д., Чаудхари В., Янг М., Креспо Дж. Ф. и Деннисон, Д. (2015). Скрытый технический долг в системах машинного обучения. Достижения в области нейронных систем обработки информации. Курран Ассошиэйтс, Инк.

[IntroToKF] Введение в Kubeflow. kubeflow.org/docs/started/introduction/#his

[Dagli2021] Искусство настройки гиперпараметров в глубоких нейронных сетях на примере. medium.com/towards-data-science/the-art-of-

[Elsken2019] Элскен, Т., Метцен, Дж. Х., и Хаттер, Ф. (2019). Поиск нейронной архитектуры: обзор. Журнал исследований машинного обучения, 20 (1), 1997–2017 гг.

[Stanley2002] Стэнли, К., и Мииккулайнен, Р. (2002). Развитие нейронных сетей за счет увеличения топологий. Эволюционные вычисления, 10(2), 99–127.

[Гибианский, 2017] Гибианский, А. (2017). Привнесение методов высокопроизводительных вычислений в глубокое обучение. Baidu Research, Тех. Респ.

[Sergeev2018] Сергеев, А., и Дель Бальсо, М. (2018). Хоровод: быстрое и простое распределенное глубокое обучение в TensorFlow. Препринт arXiv arXiv: 1802.05799.

[Li2017] Ли, Л., Джеймисон, К., ДеСальво, Г., Ростамизаде, А., и Талвалкар, А. (2017). Hyperband: новый бандитский подход к оптимизации гиперпараметров. Журнал исследований машинного обучения, 18(1), 6765–6816.

[Liu2018] Лю Х., Симонян К. и Ян Ю. (2018). Дартс: поиск дифференцируемой архитектуры. Препринт arXiv arXiv: 1806.09055.

[Breck2017] Брек, Э., Кай, С., Нильсен, Э., Салиб, М., и Скалли, Д. (2017, декабрь). Тестовая оценка машинного обучения: критерий готовности производства машинного обучения и сокращения технического долга. В 2017 г. состоялась Международная конференция IEEE по большим данным (Big Data) (стр. 1123–1132). IEEE.