#dask #dask-distributed #dask-ml #dask-kubernetes #dask-gateway
#dask #dask-распределенный #даск-мл #dask-kubernetes #dask-gateway
Вопрос:
В настоящее время мы используем Dask Gateway с рабочими, работающими только с процессором. Однако в будущем, когда глубокое обучение получит более широкое распространение, мы хотим перейти к добавлению поддержки GPU для кластеров, созданных через Dask Gateway.
Я проверил документацию Dask Gateway, и там не так много подробных инструкций о том, как это настроить и какие части диаграммы / конфигурации helm нам нужно изменить, чтобы включить эту функциональность.
Я имею в виду сначала добавить графический процессор в кластер GKE на GCP, а затем использовать dockerfile RAPIDS для рабочих dask, которые используют этот графический процессор? Это все настройки, необходимые для Dask Gateway?
Был бы признателен, если бы кто-нибудь указал мне правильное направление.
Комментарии:
1. Я добавил ответ на основную часть вашего вопроса. Я рекомендую вам открыть отдельный вопрос о необходимости использования графических процессоров для SciKeras, Skorch и т. Д.
2. Спасибо миллион @JacobTomlinson. Я обязательно это сделаю. Мой последний вопрос был бы для нашей организации, вы рекомендуете нам иметь 2 экземпляра Gateway: один с вычислениями на процессоре, а другой для вычислений на GPU? Или может ли экземпляр gateway с вычислениями на GPU потенциально заменить экземпляр с вычислениями на CPU?
3. Честно говоря, я не уверен. Было бы хорошо, если бы у Gateway была концепция профилей, чтобы вы могли выбирать разные конфигурации кластеров (возможно, вы могли бы поднять вопрос GitHub, чтобы предложить это). Я думаю, что сегодня самый простой способ действий — иметь несколько шлюзов.
Ответ №1:
Для запуска кластера Dask на Kubernetes, способного выполнять вычисления на GPU, вам необходимо следующее:
- Узлам Kubernetes нужны графические процессоры и драйверы. Это можно настроить с помощью плагина для устройств NVIDIA k8s.
- Для планировщика и рабочих модулей потребуется образ Docker с установленными инструментами NVIDIA. Как вы предполагаете, изображения RAPIDS хороши для этого.
- Для спецификации контейнера pod потребуются ресурсы GPU, такие как
resources.limits.nvidia.com/gpu: 1
- Рабочие Dask необходимо запускать с
dask-cuda-worker
помощью команды изdask_cuda
пакета (который включен в изображения RAPIDS).
Примечание: для Dask Gateway ваш образ контейнера также нуждается в dask-gateway
установке пакета. Мы можем настроить его для установки во время выполнения, но, вероятно, лучше создать пользовательский образ с установленным этим пакетом.
Поэтому вот минимальная конфигурация шлюза Dask, которая даст вам кластер GPU.
# config.yaml
gateway:
backend:
image:
name: rapidsai/rapidsai
tag: cuda11.0-runtime-ubuntu18.04-py3.8 # Be sure to match your k8s CUDA version and user's Python version
worker:
extraContainerConfig:
env:
- name: EXTRA_PIP_PACKAGES
value: "dask-gateway"
resources:
limits:
nvidia.com/gpu: 1 # This could be >1, you will get one worker process in the pod per GPU
scheduler:
extraContainerConfig:
env:
- name: EXTRA_PIP_PACKAGES
value: "dask-gateway"
resources:
limits:
nvidia.com/gpu: 1 # The scheduler requires a GPU in case of accidental deserialisation
extraConfig:
cudaworker: |
c.ClusterConfig.worker_cmd = "dask-cuda-worker"
Мы можем протестировать работу, запустив Dask gateway, создав кластер Dask и выполнив некоторую работу, специфичную для GPU. Вот пример, в котором мы получаем версию драйвера NVIDIA от каждого рабочего.
$ helm install dgwtest daskgateway/dask-gateway -f config.yaml
In [1]: from dask_gateway import Gateway
In [2]: gateway = Gateway("http://dask-gateway-service")
In [3]: cluster = gateway.new_cluster()
In [4]: cluster.scale(1)
In [5]: from dask.distributed import Client
In [6]: client = Client(cluster)
In [7]: def get_nvidia_driver_version():
...: import pynvml
...: return pynvml.nvmlSystemGetDriverVersion()
...:
In [9]: client.run(get_nvidia_driver_version)
Out[9]: {'tls://10.42.0.225:44899': b'450.80.02'}
Комментарии:
1. Большое спасибо @JacobTomlinson. Это чрезвычайно полезная информация.