Запуск рабочих нагрузок с GPU
Чтобы запустить рабочие нагрузки с GPU на подах кластера Kubernetes выполните следующие действия:
-
Создайте кластер Kubernetes.
Вы можете использовать уже работающий кластер Kubernetes или создать новый. Убедитесь, что в поле Версия Kubernetes выбрана версия 1.16 или выше.
Как создать кластер KubernetesКонсоль управленияCLIAPI-
В консоли управления выберите каталог, в котором нужно создать кластер Kubernetes.
-
Выберите сервис Managed Service for Kubernetes.
-
Нажмите кнопку Создать кластер.
-
Введите имя и описание кластера Kubernetes. Имя кластера должно быть уникальным в рамках Yandex Cloud.
-
Укажите Сервисный аккаунт для ресурсов, который будет использоваться для создания ресурсов.
-
Укажите Сервисный аккаунт для узлов, который будет использоваться узлами для доступа к реестру Docker-образов.
-
(Опционально) Укажите Ключ шифрования, который будет использоваться для шифрования секретов.
Важно
Эту настройку невозможно изменить после создания кластера.
-
Укажите релизный канал. Эту настройку невозможно изменить после создания кластера.
-
В блоке Конфигурация мастера:
-
В поле Версия Kubernetes выберите версию Kubernetes, которая будет установлена на мастере.
-
В поле Публичный адрес выберите способ назначения адреса:
- Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex Cloud.
- Без адреса — чтобы не назначать публичный IP-адрес.
-
В поле Тип мастера выберите тип мастера:
-
Зональный — создается в подсети в одной зоне доступности.
-
Региональный — создается распределенно в трех подсетях в каждой зоне доступности.
-
-
Выберите зону доступности, в которой будет создан мастер.
Шаг доступен только для зонального мастера.
-
В поле Облачная сеть выберите сеть, в которой будет создан мастер.
-
В поле Подсеть выберите подсеть, в которой будет создан мастер.
Для регионального мастера необходимо указать подсеть в каждой зоне доступности.
-
Выберите группы безопасности для сетевого трафика кластера.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов.
-
-
В блоке Настройки окна обновлений:
- В поле Частота обновлений / Отключение настройте окно для обновлений:
- Отключено — отключение автоматических обновлений.
- В любое время — обновления разрешены в любое время.
- Ежедневно — обновления будут происходить во временном интервале, указанном в поле Время (UTC) и продолжительность.
- В выбранные дни — обновления будут происходить во временном интервале, указанном в поле Расписание по дням.
- В поле Частота обновлений / Отключение настройте окно для обновлений:
-
В блоке Сетевые настройки кластера:
- (опционально) Выберите контроллер сетевых политик:
- Включить сетевые политики, чтобы задействовать Calico.
- Включить туннельный режим, чтобы задействовать Cilium.
- Укажите CIDR кластера — диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.
- Укажите CIDR сервисов — диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.
- Задайте маску подсети узлов и максимальное количество подов в узле.
- (опционально) Выберите контроллер сетевых политик:
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.Создайте кластер Kubernetes:
yc managed-kubernetes cluster create \ --name k8s-gpu-cluster \ --service-account-name k8s \ --node-service-account-name docker \ --zone ru-central1-a \ --network-name k8s-gpu
Результат выполнения команды:
done (6m9s) id: catsk2s5f0fmb5h0pd94 folder_id: b1g12ga82mev0cljderg ... service_account_id: ajedclfluactb5868n99 node_service_account_id: ajeo8f063dmnicot7t7j release_channel: REGULAR
Где:
--name
— имя кластера Kubernetes.--service-account-id
— уникальный идентификатор сервисного аккаунта для ресурсов. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes.--node-service-account-id
— уникальный идентификатор сервисного аккаунта для узлов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.--zone
— зона доступности.--network-name
— имя сети.
-
-
Создайте группу узлов с GPU.
При создании группы узлов выберите платформу Intel Broadwell with Nvidia Tesla v100 и укажите необходимое количество GPU.
Как создать группу узлов с GPUКонсоль управленияCLIAPI-
В консоли управления выберите каталог, в котором будет создан кластер Kubernetes.
-
В списке сервисов выберите Managed Service for Kubernetes.
-
Выберите кластер Kubernetes, для которого необходимо создать группу узлов.
-
На странице кластера Kubernetes перейдите на вкладку Группы узлов.
-
Нажмите кнопку Создать группу узлов.
-
Введите имя и описание группы узлов.
-
Укажите Версию Kubernetes для узлов.
-
В блоке Масштабирование:
- Выберите тип политики масштабирования.
- Укажите количество узлов в группе узлов.
-
В блоке В процессе создания и обновления разрешено укажите максимальное количество виртуальных машин, на которое можно превысить и уменьшить размер группы.
-
В блоке Вычислительные ресурсы:
- Выберите платформу Intel Broadwell with Nvidia Tesla v100.
- Выберите конфигурацию виртуальной машины, указав необходимое количество GPU. Значения vCPU и RAM будут выбраны автоматически.
- (опционально) Укажите, что виртуальная машина должна быть прерываемой.
-
В блоке Хранилище:
- Укажите Тип диска узла:
- HDD — стандартный сетевой диск, сетевое блочное хранилище на HDD-накопителе.
- SSD — быстрый сетевой диск, сетевое блочное хранилище на SSD-накопителе.
- Укажите размер диска узла.
- Укажите Тип диска узла:
-
В блоке Сетевые настройки:
-
В поле Публичный адрес выберите способ назначения адреса:
- Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex Cloud.
- Без адреса — чтобы не назначать публичный IP-адрес.
-
Укажите расположение узлов по зонам доступности и сетям.
-
(опционально) Нажмите кнопку Добавить расположение и укажите дополнительную зону доступности и сеть, чтобы создать узлы в разных зонах доступности.
-
-
В блоке Доступ укажите данные для доступа на узел:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла публичного ключа.
-
В блоке Настройки окна обновлений:
- В поле Частота обновлений / Отключение выберите окно для обновлений:
- Отключено — отключение автоматических обновлений.
- В любое время — обновления разрешены в любое время.
- Ежедневно — обновления будут происходить во временной интервал, указанный в поле Время (UTC) и продолжительность.
- В выбранные дни — обновления будут происходить во временной интервал, указанный в поле Расписание по дням.
- В поле Частота обновлений / Отключение выберите окно для обновлений:
-
Нажмите кнопку Создать группу узлов.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.Создайте группу узлов:
yc managed-kubernetes node-group create \ --name k8s-gpu-cluster \ --cluster-name k8s-gpu-cluster \ --gpus 1 \ --network-interface subnets=<имя подсети для группы узлов>,ipv4-address=nat \ --location zone=ru-central1-a \ --fixed-size 1
Результат выполнения команды:
done (3m53s) id: cat3rmrrna8p93kafdce cluster_id: cattv5gvhqdbhi5f234m ... auto_repair: true maintenance_window: anytime: {}
Где:
-
--name
— имя группы узлов. -
--cluster-name
— имя кластера Kubernetes, в котором будет создана группа узлов. -
--gpus
— количество GPU для узлов. -
--network-interface
— настройки сети:security-group-ids
— идентификаторы групп безопасности.subnets
— имена подсетей, в которых будут размещаться узлы.ipv4-address
— способ назначения IPv4-адреса.ipv6-address
— способ назначения IPv6-адреса.
Параметры
ipv4-address
иipv6-address
отвечают за способ назначения IP-адреса:auto
— узлу будет присвоен только внутренний IP-адрес.nat
— узлу будут присвоены публичный и внутренний IP-адреса.
-
--location
— зона доступности, в которой будут расположены узлы. Можно указать несколько вариантов. -
--fixed-size
— количество узлов в группе.
-
-
Создайте под с GPU.
Сохраните следующую спецификацию для создания пода с GPU в YAML-файл с названием
cuda-vector-add.yaml
:apiVersion: v1 kind: Pod metadata: name: cuda-vector-add spec: restartPolicy: OnFailure containers: - name: cuda-vector-add # https://github.com/kubernetes/kubernetes/blob/v1.7.11/test/images/nvidia-cuda/Dockerfile image: "k8s.gcr.io/cuda-vector-add:v0.1" resources: limits: nvidia.com/gpu: 1 # Запрос 1 GPU.
Подробнее о спецификации для создания пода читайте в документации Kubernetes.
-
Выполните команду:
kubectl create -f cuda-vector-add.yaml
Результат выполнения команды:
pod/cuda-vector-add created
-
Посмотрите информацию о созданном поде:
kubectl describe pod cuda-vector-add
Результат выполнения команды:
Name: cuda-vector-add Namespace: default Priority: 0 ... Normal Pulling 16m kubelet, cl1i7hcbti99j6bbua6u-ebyq Successfully pulled image "k8s.gcr.io/cuda-vector-add:v0.1" Normal Created 16m kubelet, cl1i7hcbti99j6bbua6u-ebyq Created container cuda-vector-add Normal Started 16m kubelet, cl1i7hcbti99j6bbua6u-ebyq Created container
-
Посмотрите логи работы пода:
kubectl logs -f cuda-vector-add
Результат выполнения команды:
[Vector addition of 50000 elements] Copy input data from the host memory to the CUDA device CUDA kernel launch with 196 blocks of 256 threads Copy output data from the CUDA device to the host memory Test PASSED Done