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

Обновлено 13 ноября 2021 г. и отражает последние шаги по настройке кластера Dask в Google Cloud

Dask был рассмотрен многими и сравнивался с различными другими инструментами, включая Spark, Ray и Vaex. Разработанный в сотрудничестве с другими проектами сообщества, такими как Numpy, Pandas и Scikit-Learn, это определенно отличный инструмент для масштабирования машинного обучения.

Следовательно, цель этой статьи - не сравнить плюсы и минусы Dask (для этого вы можете обратиться к ссылочным ссылкам в конце этой статьи), а скорее добавить в существующую документацию по развертыванию Dask. в облаке и, в частности, в Google Cloud. Определенно помогает то, что у Google Cloud есть бесплатная пробная версия для новых подписок, так что вы можете экспериментировать бесплатно.

Шаги по развертыванию Dask в Google Cloud

Сначала мы перечисляем общие шаги, которые необходимо предпринять, прежде чем подробно описывать каждый шаг со скриншотами (не стесняйтесь нажимать на каждый шаг для навигации). Наличие учетной записи Google Cloud - единственное предварительное условие для чтения этой статьи.

  1. Создание кластера Kubernetes
  2. Настройка Helm
  3. Развертывание процессов Dask и Jupyter
  4. Подключение к Dask и Jupyter
  5. Настройка среды
  6. Удаление вашего кластера

1. Создание кластера Kubernetes

Наш первый шаг - настроить кластер Kubernetes через Google Kubernetes Engine (GKE).

а) Включите Kubernetes Engine API после входа в консоль Google Cloud.

б) Запустите Google Cloud Shell.

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

в) Создайте управляемый кластер Kubernetes

Введите в Google Cloud Shell следующее, чтобы создать управляемый кластер Kubernetes, заменив ‹CLUSTERNAME› именем, на которое можно будет ссылаться позже.

gcloud container clusters create \
  --machine-type n1-standard-4 \
  --num-nodes 2 \
  --zone us-central1-a \
  --cluster-version latest \
  <CLUSTERNAME>

Краткое описание параметров в приведенном выше коде:

  • тип машины указывает количество ЦП и ОЗУ для каждого узла. Вы можете выбрать другие типы из этого списка.
  • num-nodes определяет количество узлов, которые нужно раскрутить.
  • зона относится к зоне центра обработки данных, в которой находится ваш кластер. Вы можете выбрать где-нибудь, не слишком далеко от ваших пользователей.

Пока ваш кластер инициализируется, вы также можете увидеть его вращение на странице Кластеры Kubernetes:

  • Введите кластеры кубернетов в строке поиска в верхней части страницы консоли.

  • В раскрывающемся списке выберите кластеры Kubernetes.

  • Видно, как ваш кластер с указанным ‹CLUSTERNAME› набирает обороты. Подождите, пока не появится зеленая галочка и ваш кластер будет готов.

Кроме того, вы также можете проверить, инициализирован ли ваш кластер, запустив:

kubectl get node

Когда ваш кластер развернут, вы должны увидеть статус Готов.

г) Предоставьте разрешения учетной записи для кластера

kubectl create clusterrolebinding cluster-admin-binding \
  --clusterrole=cluster-admin \
  --user=<GOOGLE-EMAIL-ACCOUNT>

Замените ‹GOOGLE-EMAIL-ACCOUNT› адресом электронной почты учетной записи Google, которую вы использовали для входа в Google Cloud.

2. Настройка Helm

Мы будем использовать Helm для установки, обновления и управления приложениями в кластере Kubernetes.

а) Установите Helm, запустив скрипт установщика в Google Cloud Shell.

curl https://raw.githubusercontent.com/helm/helm/HEAD/scripts/get-helm-3 | bash

б) Убедитесь, что Helm установлен правильно

helm version

Убедитесь, что версия не ниже 3.5.

3. Развертывание процессов Dask и Jupyter

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

а) Добавляйте и обновляйте информацию о пакетах с помощью репозитория диаграмм Dask’s Helm

helm repo add dask https://helm.dask.org/
helm repo update

б) Запустить Dask в кластере Kubernetes

helm install my-dask dask/dask --set scheduler.serviceType=LoadBalancer --set jupyter.serviceType=LoadBalancer

Это по умолчанию развертывает dask-scheduler, три dask-worker, а также сервер Jupyter.

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

  • my-dask используется для ссылки на вашу настройку Dask, и вы можете изменить его на другие имена.
  • - set установит для параметров scheduler.serviceType и jupyter.serviceType значение LoadBalancer. Это необходимо, чтобы иметь внешние IP-адреса, которые мы можем использовать для доступа к панели инструментов Dask и серверу Jupyter. Без этой опции по умолчанию будет настроен только IP-адрес кластера, как указано в этом сообщении о переполнении стека.

4. Подключение к Dask и Jupyter

На предыдущем шаге мы запустили Dask на кластере. Однако развертывание может занять минуту, и через некоторое время вы сможете проверить статус с помощью kubectl:

kubectl get services

Когда все будет готово, внешние IP-адреса появятся для вашего сервера Jupyter (my-dask-jupyter) и планировщика Dask (my-dask-scheduler). Если вы видите ‹pending› в разделе EXTERNAL-IP, просто подождите еще немного перед повторным запуском вышеуказанного кода.

Ввод внешних IP-адресов для my-dask-jupyter и my-dask-scheduler в вашем веб-браузере позволит вам получить доступ к серверу Jupyter и панели инструментов Dask соответственно.

Для сервера Jupyter вы можете войти в систему с паролем по умолчанию dask. Чтобы изменить этот пароль, см. Следующий раздел.

Поздравляю! Теперь вы можете запустить свой код Dask :)

Примечание. Если вы столкнулись с ошибкой 404 при доступе к Jupyter, просто нажмите на логотип Jupyter вверху, чтобы перейти на страницу входа.

5. Настройка среды

Возможно, вы сможете выполнить базовый код Dask после шага 4, но что, если вы захотите запустить dask-ml? По умолчанию он не установлен. А что, если вы захотите запустить больше трех воркеров по умолчанию? Как насчет изменения пароля сервера Jupyter?

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

Для нашей иллюстрации мы будем использовать values.yaml ниже. В общем, конфигурации разделены на три основных раздела; по одному для Scheduler, Worker и Jupyter.

Чтобы обновить конфигурации, просто выполните следующие действия:

  • В Google Cloud Shell запустите nano values.yaml , чтобы создать файл values.yaml.
  • Скопируйте и вставьте шаблон выше (не стесняйтесь вносить соответствующие изменения) и сохраните.
  • Обновите свое развертывание, чтобы использовать этот файл конфигурации:
helm upgrade my-dask dask/dask -f values.yaml
  • Обратите внимание, что вам может потребоваться немного подождать, пока будут готовы обновления.

Обзор конфигураций

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

а) Установить библиотеки

В Worker и Jupyter вы можете найти подраздел на env. Обратите внимание, что установка может быть через conda или pip, а пакеты разделяются пробелом.

env:  # Environment variables.
  - name: EXTRA_CONDA_PACKAGES
    value: dask-ml shap -c conda-forge
  - name: EXTRA_PIP_PACKAGES
    value: dask-lightgbm --upgrade

б) Количество рабочих

Количество воркеров можно указать с помощью параметра replicas. В нашем случае мы запросили 4 рабочих.

worker:
  replicas: 4  # Number of workers.

c) Ресурс выделен

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

resources:
  limits:
    cpu: 1
    memory: 4G
  requests:
    cpu: 1
    memory: 4G

в) пароль Jupyter

Пароль Jupyter - это хешированное значение в параметре пароль. Вы можете изменить свой пароль, заменив это поле.

jupyter:
  password: 'sha1:aae8550c0a44:9507d45e087d5ee481a5ce9f4f16f37a0867318c'

Чтобы сгенерировать хешированное значение вашего нового пароля,

  • Сначала запустите терминал в Jupyter Launcher.

  • Запустите jupyter notebook password в командной строке и введите новый пароль. Хешированный пароль будет записан в файл с именем jupyter_notebook_config.json.
  • Просмотрите и скопируйте хешированный пароль.

  • Замените поле пароль в values.yaml.

6. Удаление кластера

Чтобы удалить развертывание Helm, выполните в Google Cloud Shell:

helm del --purge my-dask

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

Мы надеемся, что благодаря приведенному выше руководству вы теперь можете развернуть Dask в Google Cloud.

Спасибо за чтение, и я надеюсь, что статья была полезной :) Пожалуйста, не стесняйтесь комментировать любые вопросы или предложения, которые могут у вас возникнуть.

использованная литература