CUDA 13.4 вводит управление памятью для совместного использования GPU
CUDA 13.4 вводит управление памятью для совместного использования GPU в Kubernetes.
- 01.CUDA 13.4 вводит управление памятью для совместного использования GPU в Kubernetes.
Как сообщает NVIDIA Developer, многие рабочие нагрузки в области искусственного интеллекта требуют лишь небольшой доли вычислительных ресурсов графического процессора (GPU). Предоставление каждому рабочему процессу целого устройства может оставить часть его мощности неиспользованной; совместное использование GPU позволяет командам платформ обслуживать больше рабочих нагрузок с уже имеющейся инфраструктурой. Графические процессоры NVIDIA уже поддерживают несколько подходов к совместному использованию. Многоинстансный GPU (MIG) делит GPU на аппаратно изолированные экземпляры, которые прозрачны для приложения, тайм-резервирование позволяет нескольким процессам поочередно использовать GPU без контроля памяти, а служба многопроцессорного обслуживания (MPS) позволяет им работать одновременно в отдельных адресных пространствах (sm-sharing). С выходом CUDA 13.4 теперь обеспечивается контроль памяти, который прозрачен для приложения с новым режимом тайм-резервирования, наряду с уже существующим режимом вычислений (sm-sharing) в MPS. Вот что приносит релиз CUDA: точное количество памяти: рабочая нагрузка запрашивает размер памяти, и CUDA удерживает его на этом уровне. Если выделение превышает этот размер, оно завершается неудачей, как и на меньшем GPU. Диапазон: рабочая нагрузка получает гарантированный минимум и максимум, до которого она может вырасти, когда память свободна. Режим вычислений: каждая рабочая нагрузка может выбирать использовать свои вычисления в режиме sm-sharing, а не в режиме тайм-резервирования по умолчанию. Прозрачный предел памяти: каждая рабочая нагрузка видит только часть памяти GPU. Однако для использования этих возможностей в кластере Kubernetes необходимо дополнительное программное обеспечение. На каждом узле GPU нужно запустить и контролировать демоны, от которых зависят эти функции, установить ограничения памяти и режим вычислений для каждого контейнера Pod до начала процесса, а также сообщать, сколько ресурсов на самом деле использует каждая доля, а не весь GPU. Эта работа должна выполняться на узле, независимо от того, какой планировщик разместил рабочую нагрузку. Для этого был создан новый оператор Kubernetes с открытым исходным кодом, gpu-fractioning, который размещен в организации KAI Scheduler на GitHub. Он работает рядом с NVIDIA GPU Operator, который предоставляет драйвер и настройки контейнерного времени выполнения. Оператор GPU Fractioning выполняет три задачи: настраивает и запускает MPS на каждом узле GPU, применяет ограничения памяти и режим вычислений для каждой рабочей нагрузки, измеряет использование памяти и вычислений на долю, а не на весь GPU. Разработчики записывают аннотации ресурсов и режимов в YAML-файле pod. Затем планировщик выбирает GPU для рабочей нагрузки и записывает его выделение памяти и режим совместного использования вычислений в аннотациях Pod для каждого контейнера. Оператор GPU Fractioning считывает эти аннотации и настраивает назначенные GPU, чтобы применить ограничения памяти и режим вычислений рабочей нагрузки. Любой планировщик Kubernetes, который может записывать эти аннотации, может обеспечить доли GPU с CUDA. KAI Scheduler является первым планировщиком, интегрированным с gpu-fractioning. Начиная с версии 0.18.0, KAI Scheduler имеет режим совместного использования GPU под названием NvFractions. KAI Scheduler выбирает, какую долю какого GPU получит каждая рабочая нагрузка, и записывает аннотации. Другие режимы совместного использования KAI Scheduler остаются доступными, и администраторы могут выбирать один для кластера. Это можно включить при установке KAI: helm upgrade -i kai-scheduler oci://ghcr.io/kai-scheduler/kai-scheduler/kai-scheduler -n kai-scheduler --create-namespace --set global.nvFractions.set=true. Теперь вы можете описать долевую рабочую нагрузку с помощью аннотаций Pod. Существует четыре важных аннотации, которые отвечают на четыре вопроса: сколько памяти нужно, насколько далеко может вырасти рабочая нагрузка, как делятся вычисления и сколько GPU используется. Запрос памяти можно сделать двумя способами: как абсолютный размер, используя аннотацию NVIDIA для каждого контейнера и стандартные единицы Kubernetes, или как долю GPU, используя существующую аннотацию KAI Scheduler: gpu-fraction: "0.5". Эта возможность нова в KAI Scheduler. Рабочая нагрузка может объявить гарантированный минимум (запрос) и максимум, до которого она может увеличиться, когда память свободна. Какой аннотацией вы воспользуетесь, зависит от того, как вы написали запрос. Ограничение является необязательным. Если оно опущено, лимит равен запросу, и рабочая нагрузка ограничивается точно тем, что она запросила. Ограничение доли должно быть больше, чем gpu-fraction, и меньше 1. Вычисления теперь могут делиться. Если n — количество рабочих нагрузок, использующих один GPU, то каждая получает примерно 1/n вычислительных ресурсов, и различие заключается в том, берут ли они по очереди или работают вместе. Тайм-резервирование является последовательным: рабочие нагрузки по очереди используют весь GPU, и когда каждая из них использует свою полную долю, каждая получает около 1/n времени. Время, оставшееся неиспользованным одной рабочей нагрузкой, делится поровну между другими. Это режим по умолчанию. Каждая рабочая нагрузка работает в своей собственной области ошибок, т.е. полная изоляция ошибок. SM-sharing является параллельным: стриминговые мультипроцессоры (SM) GPU делятся между рабочими нагрузками и все работают одновременно, непрерывно. Ничего заранее не выделяется. Аппаратное обеспечение GPU выделяет и освобождает SM по мере необходимости. Когда каждая рабочая нагрузка занята, разделение устанавливается примерно на 1/n; когда одна становится неактивной, ее SM переходят к другим, и одна активная рабочая нагрузка может использовать все SM. В этом режиме рабочие нагрузки делят одну область ошибок. Режим вычислений теперь явный и может быть установлен для каждого контейнера: nvidia.com/container.app.gpu-compute.mode: "sm-sharing" или "time-slicing". Совместно используемый GPU работает в одном режиме вычислений за раз, поэтому KAI Scheduler никогда не размещает рабочую нагрузку в режиме тайм-резервирования и рабочую нагрузку в режиме sm-sharing на одном GPU. KAI Scheduler отслеживает это для каждого GPU, а не для каждого узла, поэтому один узел может размещать оба режима на разных GPU. Чтобы получить долевую мощность на нескольких устройствах, добавьте: gpu-fraction-num-devices: "4". Запрос применяется к каждому устройству. Запрос в 40Gi с четырьмя устройствами получает 40Gi на каждом из четырех GPU. Операторы KAI Scheduler и GPU Fractioning доступны на GitHub с инструкциями по установке и настройке для всех трех механизмов совместного использования. Присоединяйтесь к каналу Slack или участвуйте в двухнедельных встречах сообщества, чтобы задать свои вопросы и внести свой вклад. Для получения дополнительной информации о CUDA 13.4 смотрите анонс. Материал подготовлен нейросетью на основе оригинальной публикации. ИИ может ошибаться в деталях (цифры, имена, даты, цитаты) — для важной информации сверяйтесь с первоисточником.
Связанные материалы
Все материалы →У бума центров обработки данных есть положительная сторона: инновации для электросетей США
Поскольку бум искусственного интеллекта создает нагрузку на существующую энергосистему, в результате появляются всевозможные новые возможности для ее модернизации, говорят инсайдеры отрасли.
Nvidia и Oracle расширяют облачную инфраструктуру Vera Rubin для бизнеса
Nvidia и Oracle объявили о расширении облачной инфраструктуры Vera Rubin для бизнеса.
Liquid AI представляет модели LFM3 для автоматизации бизнес-процессов
Liquid AI анонсировала LFM3 — компактные модели ИИ для бизнеса.