Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение к кластеру
      • Обзор способов подключения
      • Настройка групп безопасности
      • Создание статического файла конфигурации
    • Установка приложений
      • Основы работы с Yandex Cloud Marketplace
      • Установка Jaeger
      • Установка Metrics Provider
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка Node Local DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Object Storage
    • Управление кластером Kubernetes
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Подключение к узлу по SSH
      • Настройка автомасштабирования
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Интеграция с Yandex Container Registry
    • Запуск рабочих нагрузок с GPU
    • Установка NGINX Ingress-контроллера с Let's Encrypt®
    • Настройка Yandex Application Load Balancer Ingress-контроллера
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Настройка Fluent Bit для работы с Yandex Cloud Logging
    • Синхронизация с секретами Yandex Lockbox
    • Использование продуктов Cloud Marketplace
      • Использование Jaeger для трассировки запросов в Managed Service for YDB
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Шифрование секретов
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сеть в Managed Service for Kubernetes
    • Внешние узлы кластера
    • Сетевые настройки и политики кластера
    • Автоматическое масштабирование
    • Квоты и лимиты
    • Рекомендации по использованию Managed Service for Kubernetes
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST (англ.)
      • Overview
      • Cluster
        • Overview
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listNodes
        • listOperations
        • start
        • stop
        • update
      • NodeGroup
        • Overview
        • create
        • delete
        • get
        • list
        • listNodes
        • listOperations
        • update
      • Version
        • Overview
        • list
  • Вопросы и ответы
    • Общие вопросы
    • Хранилище данных
    • Настройка и обновление
    • Автоматическое масштабирование
    • Ресурсы
    • Логи
    • Все вопросы на одной странице
  1. Практические руководства
  2. Запуск рабочих нагрузок с GPU

Запуск рабочих нагрузок с GPU

Статья создана
Yandex Cloud

    Чтобы запустить рабочие нагрузки с GPU на подах кластера Kubernetes выполните следующие действия:

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

      Вы можете использовать уже работающий кластер Kubernetes или создать новый. Убедитесь, что в поле Версия Kubernetes выбрана версия 1.16 или выше.

      Как создать кластер Kubernetes
      Консоль управления
      CLI
      API
      1. В консоли управления выберите каталог, в котором нужно создать кластер Kubernetes.

      2. Выберите сервис Managed Service for Kubernetes.

      3. Нажмите кнопку Создать кластер.

      4. Введите имя и описание кластера Kubernetes. Имя кластера должно быть уникальным в рамках Yandex Cloud.

      5. Укажите Сервисный аккаунт для ресурсов, который будет использоваться для создания ресурсов.

      6. Укажите Сервисный аккаунт для узлов, который будет использоваться узлами для доступа к реестру Docker-образов.

      7. (Опционально) Укажите Ключ шифрования, который будет использоваться для шифрования секретов.

        Важно

        Эту настройку невозможно изменить после создания кластера.

      8. Укажите релизный канал. Эту настройку невозможно изменить после создания кластера.

      9. В блоке Конфигурация мастера:

        • В поле Версия Kubernetes выберите версию Kubernetes, которая будет установлена на мастере.

        • В поле Публичный адрес выберите способ назначения адреса:

          • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex Cloud.
          • Без адреса — чтобы не назначать публичный IP-адрес.
        • В поле Тип мастера выберите тип мастера:

          • Зональный — создается в подсети в одной зоне доступности.

          • Региональный — создается распределенно в трех подсетях в каждой зоне доступности.

        • Выберите зону доступности, в которой будет создан мастер.

          Шаг доступен только для зонального мастера.

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

        • В поле Подсеть выберите подсеть, в которой будет создан мастер.

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

        • Выберите группы безопасности для сетевого трафика кластера.

          Важно

          От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов.

      10. В блоке Настройки окна обновлений:

        • В поле Частота обновлений / Отключение настройте окно для обновлений:
          • Отключено — отключение автоматических обновлений.
          • В любое время — обновления разрешены в любое время.
          • Ежедневно — обновления будут происходить во временном интервале, указанном в поле Время (UTC) и продолжительность.
          • В выбранные дни — обновления будут происходить во временном интервале, указанном в поле Расписание по дням.
      11. В блоке Сетевые настройки кластера:

        • (опционально) Выберите контроллер сетевых политик:
          • Включить сетевые политики, чтобы задействовать Calico.
          • Включить туннельный режим, чтобы задействовать Cilium.
        • Укажите CIDR кластера — диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.
        • Укажите CIDR сервисов — диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.
        • Задайте маску подсети узлов и максимальное количество подов в узле.
      12. Нажмите кнопку Создать кластер.

      Если у вас еще нет интерфейса командной строки 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 — имя сети.

      Чтобы создать кластер Kubernetes, воспользуйтесь методом create для ресурса Cluster.

    2. Создайте группу узлов с GPU.

      При создании группы узлов выберите платформу Intel Broadwell with Nvidia Tesla v100 и укажите необходимое количество GPU.

      Как создать группу узлов с GPU
      Консоль управления
      CLI
      API
      1. В консоли управления выберите каталог, в котором будет создан кластер Kubernetes.

      2. В списке сервисов выберите Managed Service for Kubernetes.

      3. Выберите кластер Kubernetes, для которого необходимо создать группу узлов.

      4. На странице кластера Kubernetes перейдите на вкладку Группы узлов.

      5. Нажмите кнопку Создать группу узлов.

      6. Введите имя и описание группы узлов.

      7. Укажите Версию Kubernetes для узлов.

      8. В блоке Масштабирование:

        • Выберите тип политики масштабирования.
        • Укажите количество узлов в группе узлов.
      9. В блоке В процессе создания и обновления разрешено укажите максимальное количество виртуальных машин, на которое можно превысить и уменьшить размер группы.

      10. В блоке Вычислительные ресурсы:

        • Выберите платформу Intel Broadwell with Nvidia Tesla v100.
        • Выберите конфигурацию виртуальной машины, указав необходимое количество GPU. Значения vCPU и RAM будут выбраны автоматически.
        • (опционально) Укажите, что виртуальная машина должна быть прерываемой.
      11. В блоке Хранилище:

        • Укажите Тип диска узла:
          • HDD — стандартный сетевой диск, сетевое блочное хранилище на HDD-накопителе.
          • SSD — быстрый сетевой диск, сетевое блочное хранилище на SSD-накопителе.
        • Укажите размер диска узла.
      12. В блоке Сетевые настройки:

        • В поле Публичный адрес выберите способ назначения адреса:

          • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex Cloud.
          • Без адреса — чтобы не назначать публичный IP-адрес.
        • Укажите расположение узлов по зонам доступности и сетям.

        • (опционально) Нажмите кнопку Добавить расположение и укажите дополнительную зону доступности и сеть, чтобы создать узлы в разных зонах доступности.

      13. В блоке Доступ укажите данные для доступа на узел:

        • В поле Логин введите имя пользователя.
        • В поле SSH-ключ вставьте содержимое файла публичного ключа.
      14. В блоке Настройки окна обновлений:

        • В поле Частота обновлений / Отключение выберите окно для обновлений:
          • Отключено — отключение автоматических обновлений.
          • В любое время — обновления разрешены в любое время.
          • Ежедневно — обновления будут происходить во временной интервал, указанный в поле Время (UTC) и продолжительность.
          • В выбранные дни — обновления будут происходить во временной интервал, указанный в поле Расписание по дням.
      15. Нажмите кнопку Создать группу узлов.

      Если у вас еще нет интерфейса командной строки 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 — количество узлов в группе.

      Чтобы создать группу узлов, воспользуйтесь методом create для ресурса NodeGroup.

    3. Создайте под с 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.

    4. Выполните команду:

      kubectl create -f cuda-vector-add.yaml
      

      Результат выполнения команды:

      pod/cuda-vector-add created
      
    5. Посмотрите информацию о созданном поде:

      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
      
    6. Посмотрите логи работы пода:

      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
      

    Была ли статья полезна?

    Language / Region
    © 2022 ООО «Яндекс.Облако»