Перейти к содержанию

Экземпляры службы графического процессора

Экземпляры службы графического процессора позволяют запустить экземпляр графического процессора, доступный по SSH, за считанные минуты.

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

Внутри каждый экземпляр службы графического процессора поддерживается подом Kubernetes, поэтому сочетание экземпляров графического процессора и экземпляров только с процессором улучшает использование ресурсов всей машины (виртуальной машины или «голого железа»).

GPUStack управляет несколькими кластерами Kubernetes и предоставляет унифицированный интерфейс для запуска экземпляров службы GPU на любом из них.

Обновление с GPUStack 2.2?

GPUStack 2.3 включает актуальный GPUStack Operator, который сам доводит обновление на месте до завершения: Deployment воркера заменяется без перекрытия старого и нового (Recreate), на запуск воркера отводится 900 секунд, а существующие Helm-релизы отдельных приложений от v0.5.x принимаются под его управление.

После того, как обновленный воркер станет работоспособным, удалите потерянные объекты планирования v0.5.x с помощью сценария очистки оператора:

1
2
3
curl -fsSLO https://raw.githubusercontent.com/gpustack/gpustack-operator/main/docs/operate/migration/cleanup-v0.5-orphans.sh
bash cleanup-v0.5-orphans.sh --dry-run   # preview, changes nothing
bash cleanup-v0.5-orphans.sh             # delete the orphans

Если предыдущая попытка обновления уже застряла (CRD Kuueue зависает Terminating, воркер так и не становится готовым), см. устранение неполадок при миграции оператора. Полную процедуру см. в руководстве по миграции оператора.

Предварительные условия

Чтобы использовать экземпляры службы графического процессора, вам необходим хотя бы один кластер Kubernetes.

При первом открытии страницы GPU Service > GPU Instances без добавленного кластера вам будет предложено добавить его.

Снимок экрана: пустая страница экземпляров графического процессора с предложением добавить кластер Kubernetes

Нажмите Add a Kubernetes Cluster, чтобы перейти на страницу Resources > Clusters.

Снимок экрана: форма создания кластера

Мастер создания кластера проходит через Select Provider (выберите Kubernetes) → Configure → Complete. На шаге Configure заполните кластер Name и необязательный Description, выберите GPU Service Cluster Type, затем нажмите Save.

Предупреждение

Кластер Kubernetes может служить только одной цели — либо Model Service, либо GPU Service.

Дополнительные параметры

При добавлении кластера для GPU Service разверните параметры Advanced, чтобы настроить дополнительные параметры.

Получение типов экземпляров из узлов

Включено по умолчанию. Оператор обнаруживает устройства каждого узла и автоматически определяет соответствующие типы экземпляров — по одному на каждую модель ускорителя плюс тип только для ЦП — с предустановленными значениями ЦП/ОЗУ для каждой единицы продукта. Установите значение Disabled, если вы предпочитаете создавать каждый тип экземпляра самостоятельно; затем оператор прекращает создание типов, а производные типы можно удалить без возможности восстановления.

Снимок экрана: настройка «Получить типы экземпляров из узлов», по умолчанию включено

См. Типы экземпляров службы графического процессора для управления производными типами.

Разрешить смешанные типы экземпляров на узле

Включено по умолчанию. Это позволяет узлу одновременно обслуживать разные типы экземпляров — например, узел графического процессора может размещать как экземпляры графического процессора, так и экземпляры только с процессором. Установите значение Disabled, чтобы назначить каждый узел одному типу экземпляра.

Снимок экрана: Разрешить смешанные типы экземпляров для настройки узла, по умолчанию включено

Разрешить доступ к экземплярам службы графического процессора

Обычно все узлы Kubernetes находятся за NAT или брандмауэром, поэтому IP-адреса узлов могут быть недоступны из-за пределов кластера:

1
2
3
4
5
6
$ kubectl get nodes -o wide
NAME                                 STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION         CONTAINER-RUNTIME
computeinstance-e00agjsc8n3yhxqkh6   Ready    <none>   2h    v1.33.7   10.0.51.32    <none>        Ubuntu 24.04.4 LTS   6.11.0-1016-nvidia     containerd://1.7.34
computeinstance-e00bemd340vg9ypxrv   Ready    <none>   2h    v1.33.7   10.0.51.13    <none>        Ubuntu 24.04.4 LTS   6.11.0-1016-nvidia     containerd://1.7.34
computeinstance-e00g7g0y04ga384xj7   Ready    <none>   2h    v1.33.7   10.2.0.0      <none>        Ubuntu 24.04.4 LTS   6.11.0-1016-nvidia     containerd://1.7.34
computeinstance-e00prd70dh2mne0ajb   Ready    <none>   2h    v1.33.7   10.0.0.57     <none>        Ubuntu 24.04.4 LTS   6.11.0-1016-nvidia     containerd://1.7.34

В этом случае установите адрес в GPU Service Static Access Address (например, VIP LoadBalancer), чтобы можно было получить доступ к экземплярам службы графического процессора.

Снимок экрана: Настройка статического адреса доступа к службе графического процессора

Убедитесь, что воркер GPUStack доступен.

Большую часть времени службе GPU требуется (обратный) доступ к кластеру Kubernetes для управления экземплярами — их создания, удаления и мониторинга.

Если сервер GPUStack развернут за пределами кластера Kubernetes, установите proxy_mode=tunnel в Worker Configuration, чтобы включить режим Tunnel GPUStack Worker. Это поддерживает долговременное соединение между рабочим устройством и сервером GPUStack и обеспечивает туннель для службы графического процессора для доступа к кластеру.

Снимок экрана: установка proxy_mode для туннелирования в рабочей конфигурации

Вы можете проверить соединение между сервером GPUStack и воркером на странице Resources > Workers, проверив столбец Status воркера.

Скриншот: Проверка состояния подключения воркера

Автоматическое обнаружение типов экземпляров

После добавления кластера Kubernetes с поддержкой GPU Service оператор GPUStack автоматически обнаруживает устройства GPU в кластере, собирает их информацию и генерирует соответствующие типы экземпляров для службы GPU.

Для управления типами экземпляров см. Типы экземпляров службы графического процессора. Остальная часть этой страницы посвящена развертыванию экземпляров и управлению ими.

Добавление экземпляра

На странице GPU Service > GPU Instances нажмите Add GPU Instance, чтобы открыть форму создания.

Снимок экрана: форма добавления экземпляра графического процессора

Выбор типа экземпляра

В крайнем левом столбце Instance Types перечислены все типы экземпляров, обнаруженные в кластерах Kubernetes.

На каждой карточке типа экземпляра отображается следующая информация:

Скриншот: карточка типа инстанса

  • Имя: имя продукта типа экземпляра, например NVIDIA-H100-80GB-HBM3. Продукты, содержащие специальные символы, очищаются, чтобы быть безопасными для Kubernetes.
  • Производитель/Поставщик: метка в правом верхнем углу, показывающая производителя или поставщика (например, NVIDIA или GENERIC только для ЦП).
  • RAM/VRAM/CPU: ОЗУ хоста, объём памяти устройства и ядра ЦП, предоставляемые на единицу этого типа.
  • Arch: архитектура ЦП, например AMD64 или ARM64 — полезно при выборе совместимого образа.
  • Макс: максимальное количество устройств, которые вы можете выбрать одновременно. Если Max равно 0, все устройства этого типа экземпляра выделяются, и вы не можете выбрать его, пока некоторые из них не будут освобождены.
  • Sliceable: Как можно разделить устройства этого типа — бюджет логического среза (в процентах) и, на устройствах с возможностью разделения, количество оставшихся аппаратных разделов.

Ресурсы единиц типа экземпляра

Ресурсы единицы — это ЦП и ОЗУ хоста, предоставленные для каждой единицы типа — для типа ускорителя — для всего устройства. Типы, полученные из узлов, имеют размеры на основе предустановок для каждого продукта, поддерживаемых оператором (см. справку по ресурсам единиц); затем размер логического среза или физического раздела определяется по заданному размеру по его доле VRAM. Вы также можете создавать свои собственные типы с помощью пользовательских ресурсов единиц.

Выбор целого, фрагментированного или разделенного устройства

Для типа ускорителя панель Configuration предлагает до трех режимов распределения:

  • Полный графический процессор — эксклюзивное использование всего устройства.
  • По соотношению — логический срез: выберите VRAM Percentage и Compute Percentage. Устройство остается целым и одновременно обслуживает другие фрагменты, при этом каждый бюджет применяется во время выполнения.

Скриншот: выбор логического среза по видеопамяти и коэффициенту вычислений

  • По профилю — физический раздел устройства с поддержкой MIG: выберите Partition Profile (например, 1g.10gb на H100). Оператор материализует для вас экземпляр MIG. Эта вкладка отображается только в том случае, если на узле кластера включен MIG; включение MIG выполняется администратором для каждого узла, см. Типы экземпляров службы графического процессора.

Скриншот: выбор физического раздела по профилю MIG

Тип экземпляра только для ЦП

Чтобы улучшить общее использование ресурсов, служба графического процессора также поддерживает типы экземпляров только для ЦП.

Первоначально оператор GPUStack предоставляет фиксированный профиль для типа экземпляра только для ЦП: 1 CPU + 2 GB RAM. Чтобы настроить его, см. Типы экземпляров службы графического процессора.

Выбор шаблона экземпляра

В среднем столбце Instance Templates перечислены доступные шаблоны, и список обновляется по мере выбора различных типов экземпляров.

Управление шаблонами осуществляется на странице GPU Service > Instance Templates; см. Шаблоны экземпляров службы графического процессора.

Конфигурация экземпляра

Крайняя правая форма Configuration позволяет указать детали нового экземпляра. Он разделен на пять разделов: Basic, Instance Type, Instance Template, Storage и SSH Access.

  • Basic: имя экземпляра и отображаемое имя.
  • Тип экземпляра: тип экземпляра и режим выделения — всё устройство, логический срез или физический раздел.
  • Шаблон экземпляра: шаблон для наследования (изображение, команда, переменные среды и т. д.). Вы по-прежнему можете настроить конфигурацию после выбора шаблона.
  • Хранилище: либо Ephemeral хранилище, либо Persistent хранилище.
  • Доступ по SSH: Открытые ключи SSH, которые нужно назначить экземпляру, или возможность отключить доступ по SSH.

После заполнения формы нажмите Save, чтобы создать экземпляр.

Просмотр экземпляров

После создания вы возвращаетесь на страницу GPU Service > GPU Instances, где все экземпляры перечислены в таких столбцах, как Name (отображаемое имя, если установлено), Connect, Status, Instance Type, GPU, VRAM, CPU, RAM, Storage, Cluster, Creator, Created и Operations.

Скриншот: список экземпляров графического процессора

Вы можете фильтровать экземпляры по отображаемому имени или имени — любое значение может отображаться в столбце Name. Сортировка порядков столбцов Name по отображаемой метке.

Доступ к экземпляру

В столбце Connect показаны адреса доступа к экземпляру — команда SSH копирования и вставки и/или кликабельные ссылки на веб-страницы — в зависимости от конфигурации порта экземпляра.

Например, вставьте команду SSH в свой терминал, чтобы напрямую подключиться к экземпляру.

Снимок экрана: копирование команды SSH из столбца «Подключение»

Метрики

Столбцы GPU, VRAM, CPU, RAM и Storage показывают текущие показатели использования для каждого работающего экземпляра, обновляемые каждые несколько секунд, пока страница видна. Каждый датчик сообщает об использовании собственного экземпляра в сравнении с его квотой собственного независимо от режима распределения: монопольный экземпляр считывает все устройство, срез считывает свою долю, а физический раздел считывает собственную емкость раздела.

Число, которое невозможно измерить, отображается пустым, а не нулевым — например, раздел MIG сообщает об отсутствии использования ядра графического процессора (драйвер не может его измерить), поэтому его индикатор GPU остается на уровне --, а индикатор VRAM все еще работает.

Цифры взяты из подресурса метрик экземпляра оператора и экспортера узлов; см. Справочник по метрикам экземпляра для каждого поля, его источника и его ограничений.

О датчиках выше

На снимке экрана списка показаны три демонстрационных экземпляра под искусственной нагрузкой: каждый выполнял цикл Python/PyTorch, распределяя оперативную память хоста, а также повторяя умножение матрицы 8192×8192 на своем устройстве (a = a @ a в цикле). Вот почему датчик GPU показывает 100% на эксклюзивном L40S и на H100 с 50%-ным срезом (срез, заполняющий собственный запас вычислений, показывает 100%), и почему датчик GPU экземпляра MIG показывает --, а его CPU показывает 100%.

Редактирование экземпляра

Нажмите Edit на экземпляре, чтобы открыть его конфигурацию.

Скриншот: форма редактирования экземпляра

Большинство полей пока недоступны для редактирования — можно изменить только отображаемое имя и конфигурацию доступа по SSH. Вы можете добавить или удалить открытые ключи SSH или отключить доступ по SSH.

Примечание

В будущем выпуске запланировано дальнейшее редактирование конфигурации экземпляра.

Управление экземпляром

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

Просмотр журналов

Нажмите View Logs, чтобы просмотреть журналы экземпляра. Это удобно для просмотра результатов таких приложений, как Jupyter Notebook или TensorBoard.

Снимок экрана: просмотр журналов экземпляра

Просмотр событий

Нажмите View Events, чтобы просмотреть события экземпляра. Это поможет вам отслеживать изменения статуса — например, экземпляр застрял в Pending, Running или Failed.

Скриншот: Просмотр событий экземпляра

Стоп/Пуск/Удалить

Нажмите Stop, чтобы остановить экземпляр, и Start, чтобы запустить его снова. Это полезно для временного освобождения ресурсов и возобновления работы позже.

Предупреждение

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

Нажмите Delete, чтобы удалить экземпляр и освободить все его ресурсы.