[Перевод] Kubeflow: учимся устанавливать и запускать Kubeflow на локальной машине
Пошаговое руководство по установке и конфигурированию всех компонентов kubeflow на локальной машине.
Рис. 1. Взаимодействие Kubeflow и Kubernetes | рисунок автора |иконки от Eucalyp
Kubeflow [1] — это созданная Google опенсорсная платформа, на которой разворачивается весь жизненный цикл разрабатываемой модели машинного обучения. Kubeflow представляет собой инструментарий, каждый компонент которого применяется для отработки каждой из стадий жизненного цикла при машинном обучении, а именно: исследования данных, конструирования признаков, преобразования признаков, обучения модели, оценки модели, тонкой настройки модели, предоставления модели и версионирования модели. Главный атрибут kubeflow заключается в том, что он предназначен для работы на базе kubernetes [2]. Таким образом, kubeflow пользуется именно теми преимуществами, которые предоставляет кластер kubernetes, в частности, оркестрацией контейнеров и автомасштабированием.
Тогда как kubernetes является стандартной технологией оркестрацией контейнеров, исследователям данных и специалистам по машинному обучению бывает сложно напрямую координировать жизненный цикл системы машинного обучения непосредственно в кластере kubernetes (к тому же, на это уходит много времени). Соответственно, kubeflow выступает в качестве платформы, оснащённой инструментами для конфигурирования, разработки, автоматизации и развёртывания каждой стадии жизненного цикла машинного обучения в кластере kubernetes. Так у исследователей данных и специалистов по машинному обучению высвобождается время, которое не приходится тратить на конфигурирование и применение изменений непосредственно в кластере kubernetes.
В этой статье рассмотрено, как установить и сконфигурировать kubeflow на локальной машине, чтобы на этой же машине можно было бы приступить к локальному использованию kubeflow, не нуждаясь в облачном провайдере. Вот какие подразделы будут в этой статье:
- Требования
- Установка Minikube
- Установка Kubeflow
- Создание проекта Kubeflow
- Обращение к пользовательскому интерфейсу Kubeflow
❯ Требования
Чтобы установить и запустить kubeflow на локальной машине, необходим набор ключевых компонентов. Прежде всего, нам понадобится кластер kubernetes, на котором сервис kubeflow будет устанавливаться и развёртываться. Поскольку устанавливать kubernetes как таковой на локальной машине не рекомендуется (учитывая, сколько ресурсов он требует). Более лёгкая альтернатива, ориентированная на локальные тесты — это эмуляция кластера kubernetes, для чего и существует minikube [3] (а также его альтернативы: microk8s, kind и k3s). В дополнение к minikube нам понадобится гипервизор, при помощи которого мы сможем сгенерировать виртуальные окружения внутри нашего мини-кластера. В данном случае воспользуемся hyperkit [4] (хотя и у него есть альтернативы — VirtualBox, kvm2 под Linux и Hyper-V под Windows). Наконец, нам понадобится пакет kubeflow.
Дисклеймер: поскольку я работаю с MacOS, команды из этого поста приведены именно к MacOS. Но в документации по каждому компоненту также рассмотрены эквиваленты для Linux или Windows.
❯ Установка Minikube
Чтобы установить minikube для MacOS, просто введите:
$ brew install minikube
По завершении установки команда kubectl
будет добавлена в путь $PATH . kubectl
. Это команда для взаимодействия с мини-кластером kubernetes. Ещё нам понадобится гипервизор, при помощи которого мы будем создавать окружения в мини-кластере kubernetes, для этого мы воспользуемся hyperkit
, который можно установить вот так:
$ brew install hyperkit
Отлично. Для запуска нашего мини-кластера kubernetes введите:
$ minikube start --driver=hyperkit
Вышеприведённая команда инициализирует мини-кластер kubernetes. Для этого мы применим hyperkit
в качестве гипервизора для виртуальных окружений. Чтобы проверить информацию о нашем кластере, нужно просто ввести следующую команду:
$ kubectl cluster-info
Тогда получим примерно следующий вывод:
> Kubernetes control plane is running at https://192.168.64.5:8443
Отлично. На данном этапе у нас есть все необходимые компоненты, позволяющие приступить к установке и конфигурированию kubeflow — давайте же этим займёмся!
❯ Установка Kubeflow
Для установки kubeflow нам потребуется определить несколько переменных окружения. Далее мы скачаем проект kubeflow, а после этого перейдём к его установке. Итак, давайте определим переменные:
$ PLATFORM=$(uname)
$ export PLATFORM
$ mkdir -p ~/bin
$ export KF_TAG=1.0.1
$ KF_BASE="https://api.github.com/repos/kubeflow/kfctl/releases"
Переменная KF_TAG
указывает ту версию образа, которую мы собираемся использовать. Мы воспользуемся самой свежей, в данном случае это будет версия 1.2.0
. Затем определим URL
, скачаем и распакуем проект, а затем перенесём бинарник kfctl
в каталог с бинарниками, созданный на предыдущем шаге.
$ KFCTL_URL=$(curl -s ${KF_BASE} |\
grep http |\
grep "${KF_TAG}" |\
grep -i "${PLATFORM}" |\
cut -d : -f 2,3 |\
tr -d '\" ' )
$ wget "${KFCTL_URL}"
$ KFCTL_FILE=${KFCTL_URL##*/}
$ tar -xvf "${KFCTL_FILE}"
$ mv ./kfctl ~/bin/
Наконец, требуется удалить пакет kubeflow (хранить его больше незачем). Мы добавим путь к kubeflow ~/bin
(содержащий команду kfctl
) в наш $PATH
:
$ rm "${KFCTL_FILE}"
$ export PATH=$PATH:~/bin
Должно быть, команда kfctl
уже готова. Чтобы её протестировать, введём:
$ kfctl version
kfctl v1.2.0-0-gbc038f9
При помощи команды kfctl
мы сможем взаимодействовать с компонентами kubeflow, в частности, чтобы определять и применять манифесты в нашем кластере kubernetes. Пока у нас подготовлены мини-кластер kubernetes, а также установка kubeflow. Следующий этап — сгенерировать наш первый проект kubeflow при помощи команды kfctl
, давайте так и сделаем!
❯ Создание проекта Kubeflow
Как мы уже знаем, kubeflow работает поверх kubernetes. Следовательно, взаимодействие между двумя этими платформами осуществляется на уровне манифестов или файлов yaml
. Таким образом, чтобы сгенерировать проект kubeflow, требуется проработать файл yaml
, в котором определяются все те сервисы, что необходимо развернуть в мини-кластере kubernetes.
Сначала сгенерируем несколько переменных окружения, определяющих ту версию kubeflow, что мы устанавливаем. Затем зададим каталог, в котором будут выделяться все конфигурационные файлы и yaml
-файлы, относящиеся к каждому из сервисов, развёрнутых в проекте kubeflow. Наконец, получим yaml
для развёртывания проекта kubeflow в нашем мини-кластере kubernetes.
Приступаем к определению тех переменных окружения, которые соответствуют установленной нами версии kubeflow:
$ MANIFEST_BRANCH=${MANIFEST_BRANCH:-v1.2-branch}
$ export MANIFEST_BRANCH
$ MANIFEST_VERSION=${MANIFEST_VERSION:-v1.2.0}
$ export MANIFEST_VERSION
Затем определяем имя проекта и создаём каталог, в котором будут выделяться все конфигурационные файлы и yaml
-файлы для каждого сервиса:
$ KF_PROJECT_NAME=${KF_PROJECT_NAME:-hello-kf-${PLATFORM}}
$ export KF_PROJECT_NAME
$ mkdir "${KF_PROJECT_NAME}"
$ pushd "${KF_PROJECT_NAME}"
Далее определяем тот репозиторий, из которого возьмём манифест, и присваиваем его переменной окружения:
$ manifest_root=https://raw.githubusercontent.com/kubeflow/manifests
$ FILE_NAME=kfctl_k8s_istio.${MANIFEST_VERSION}.yaml
$ KFDEF=${manifest_root}${MANIFEST_BRANCH}/kfdef/${FILE_NAME}
Как видите, здесь мы используем манифест для ISTIO
(это реализация сервисной сети для kubernetes). Наконец, применяем манифест, чтобы развернуть наш проект kubeflow.
$ kfctl apply -f $KFDEF -V
Процесс развёртывания может занять около 30 минут.
Чтобы убедиться, что установка прошла успешно, воспользуемся следующей командой, удостоверяющей, что все сервисы работают в режиме RUNNING
или COMPLETED
.
$ kubectl get pods --all-namespaces -w
В случае, если у некоторых сервисов окажется статус error
, может потребоваться выделить побольше памяти под ваш мини-кластер kubernetes (minikube) и повторно применить манифест развёртывания. Если всё пройдёт успешно, то мы сможем просмотреть наш проект kubeflow в браузере. Давайте так и сделаем!
❯ Доступ к пользовательскому интерфейсу Kubeflow
Поскольку мы всё устанавливаем на локальном сервере, для доступа к UI kubeflow требуется всего лишь пробросить порты следующим образом:
$ kubectl port-forward svc/istio-ingressgateway -n istio-system 7777:80
Вышеприведённая команда выполняется при помощи kubectl
, которая предоставляет порт 7777 сервиса istio-ingressgateway
с пространством имён istio-system
— именно через него мы получаем доступ к пользовательскому интерфейсу kubeflow. Наконец, если вы перейдёте по http://localhost:7777, то будете перенаправлены в графический интерфейс kubeflow, как показано на рисунке 2.
Рис. 2. Kubeflow UI | скриншот автора
❯ Заключение
В этой статье было рассмотрено, как скачать, сконфигурировать и установить kubeflow, а также требования к этому инструменту в операционной системе MacOS.
Это руководство поможет вам начать работу с kubeflow через графический пользовательский интерфейс. Как видите, в kubeflow предоставляется инструментарий для разработки полноценного жизненного цикла модели машинного обучения.