
Сравнение производительности GPU в задачах обучения и инференса LLM: A100 против A6000 Ada
Сравнение NVIDIA A6000 Ada и A100 для дообучения и инференса LLM. Тесты с Llama-2 7B–70B, анализ MIG, NVLink и экономики аренды. Почему больше памяти не всегда быстрее.
Компании внедряют LLM, чтобы не зависеть от публичных API и безопасно работать с внутренними данными. Selectel предоставляет серверы с GPU для высоконагруженных вычислений и преднастроенные сервисы для развертывания и эксплуатации ИИ-проектов с повышенными требованиями к ИБ.
Рассматриваемое железо, NVIDIA A6000 Ada (48 ГБ) и A100 с 40 ГБ, не ново, но ещё актуально в работе с относительно свежими моделями. А выбор GPU только по сухим характеристикам: году выхода, объему памяти, количеству CUDA-ядер и ширине шины — часто приводит к переплатам. В ML-задачах прямая зависимость «больше спецификаций — быстрее результат» работает не всегда. И вот основные причины для рационального подхода.
Экономика проекта
Стоимость аренды GPU-серверов напрямую зависит от класса железа. Для бизнеса разница в чеке между топовым и почти топовым решением может составить миллионы рублей в месяц. Задача — подобрать конфигурацию так, чтобы каждый оплаченный гигабайт VRAM и каждое ядро работали на 100%. Часто небольшой прирост в характеристиках флагманской карты не дает пропорционального ускорения в обучении конкретной модели, и переплата становится нерациональной.
Возникает риск неэффективного использования мощностей. Даже если задачи идут потоком, видеокарты редко задействованы в режиме 24/7/365. Несколько часов активных вычислений на GPU сменяются отладкой кода, подготовкой данных на CPU или анализом результатов.
Нюансы шеринга GPU
Шеринг GPU — это когда вы не хотите, чтобы мощная карта простаивала, и решаете нарезать ее на изолированные части. У каждой — своя память, ядра и кэш. Но на практике начинаются нюансы.

Технологии деления не универсальны. Та же MIG (Multi-Instance GPU) может разбить A100 максимум на семь логических блоков, а A30 — только на четыре.
И даже при шеринге ресурсы могут утекать. Мы берем A100 на 40 ГБ и режем ее через MIG на семь партиций: получаем отличную задержку и пропускную способность, но используем всего 35 ГБ памяти. Остальное просто «сгорает» из-за особенностей нарезки. Можно комбинировать профили (10+10+20 ГБ), но и это не панацея.
Если вы не готовы к радикальным мерам, например к эксплуатации нескольких десятков или H100, вопрос выбора железа для ML-задач станет весьма непростым. Одних характеристик железа мало — важно понимать, как вы будете делить карту.
Проверенная A100 против амбициозной A6000 Ada
У A100 6912 CUDA-ядер, 40 ГБ видеопамяти, поддержка Tensor Cores и технологий виртуализации. Она предсказуема — следишь за объемом памяти в PyTorch и работаешь. Две A100 можно связать через NVLink и получить мощный спаренный узел.
А6000 Ada идет дальше: 10752 CUDA-ядер и 48 ГБ памяти. Однако A6000 Ada не умеет в NVLink и не поддерживает шеринг через MIG.
Условия теста: две GPU против трех моделей
Мы сравнили видеокарты в задачах дообучения (fine-tuning) LLM разных размеров:
- meta-llama/Llama-2-7b-chat-hf,
- meta-llama/Llama-2-13b-chat-hf,
- meta-llama/Llama-2-70b-chat-hf.
Для обучения LLM на каждый миллиард параметров нужно около 24 ГБ видеопамяти. В RAM помещается не только модель, но и другие компоненты: градиенты, состояния оптимизатора, временные буферы. Мы намеренно ограничились одной видеокартой на тест, и запустить обучение «в лоб» для тяжелых моделей не вышло бы.
Применяем квантование как другой способ уменьшения размера LLM. Они загружаются в квантованном виде с помощью библиотеки BitSandBytes. Чтобы обучение в принципе было возможно, применяем подход LoRA, имплементированный в библиотеке peft. Конфигурация LoRA остается неизменной (ранг множителей = 16) за исключением запуска обучения самой большой модели на А100 — мы снизили ранг разложенных матриц, чтобы сэкономить память и сделать возможной хотя бы загрузку в память GPU модели и батча.
Настройка рабочего окружения
Подготовка среды к тестированию выполняется двумя скриптами. Первым запускаем apt.sh, который:
- блокирует обновление ядер для пакетов Nvidia и Linux;
- актуализирует список доступного ПО;
- устанавливает необходимые инструменты для работы с HTTPS и SSL.
Затем: nvidia-drivers-install.sh. Он отвечает за:
- установку заголовков linux-headers (для сборки DKMS-модулей, обеспечивающих работу GPU Nvidia через out-of-tree драйвер);
- инсталляцию драйверов Nvidia;
- развертывание вспомогательного ПО: nvitop, jupyter и других инструментов.
[код]
#!/bin/bash
set -e
set -o xtrace
# Отключаем автообновления ядра
cat < /etc/apt/apt.conf.d/51unattended-upgrades
Unattended-Upgrade::Package-Blacklist {
"nvidia-";
"linux-";
};
EOF
apt update
apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
pwgen
[/код]
Затем: nvidia-drivers-install.sh. Он отвечает за:
- установку заголовков linux-headers (для сборки DKMS-модулей, обеспечивающих работу GPU Nvidia через out-of-tree драйвер);
- инсталляцию драйверов Nvidia;
- развертывание вспомогательного ПО: nvitop, jupyter и других инструментов.
[код]
#!/bin/bash
set -e
set -o xtrace
# Опционально, возможно понадобится удаление устаревшего пакета
# linux-version list
# uname -r
# dpkg --list | grep -E -i --color 'linux-image|linux-headers'
# apt-get --purge autoremove
# apt --purge autoremove
# uname -a
# apt purge linux-image-5.4.0-166-generic
# dpkg --list | grep -E -i --color 'linux-image|linux-headers'
# Install Nvidia drivers for all kernels
for kernel in $(linux-version list); do
apt install -y "linux-headers-${kernel}"
done
apt install -y nvidia-driver-510 htop python3-pip git
pip install nvitop==1.3.1 jupyter==1.0.0 accelerate==0.21.0 peft==0.4.0
bitsandbytes==0.40.2 transformers==4.31.0 trl==0.4.7 scipy==1.11.3
tensorboard==2.15.1 evaluate==0.4.1 scikit-learn==1.3.2
[/код]
Запуск jupyter-notebook
Для тестирования использовалась тренировочная часть набора данных mlabonne/guanaco-llama2-1k с 1 000 текстов объемом от 58 до 11 400 символов.
Распределение размеров текстов показано на графике:

Результаты теста
Чтобы результаты были честными, мы тестировали видеокарты с помощью одного и того же скрипта. Ошибка Out of Memory (CUDA OOM) говорит о том, что карте не хватило памяти для выполнения задачи. Мы не стали подробно расписывать использование RAM, наша цель — сравнить «железо», а не выжать максимум из алгоритмов обучения. Данные о загрузке видеокарт в отчетах получены через nvitop.
Обучение meta-llama/Llama-2-7b-chat-hf

При работе с небольшими батчами обе GPU уверенно справляются с нагрузкой. A100 с меньшим объемом памяти и числом ядер показала себя в одном из тестов лучше, чем более мощная A6000 Ada, хотя и задействовала при этом 97,7% своего вычислительного ресурса.
При увеличении батчей до 25 и 27 текстов A100 предсказуемо выдала ошибку CUDA OOM, а A6000 Ada продолжила работу, позволив нам завершить обучение. Из-за этого сделать однозначный выбор в пользу одной из карт сложно. Если видеокарта будет полностью выделена под одну задачу, а размер батча не превысит 20 текстов, имеет смысл присмотреться к A100. Но A6000 Ada дает гибкость при выборе размера батча, что может быть критически важно для сходимости обучения.
Обучение meta-llama/Llama-2-13b-chat-hf

До момента исчерпания памяти А100 демонстрирует отличные результаты, опережая А6000 Ada по скорости обучения. Пороговое значение загрузки на А100 (96,3% доступного объема) было достигнуто только при использовании батчей по 15 текстов.
Попытка увеличить батчи до 25 и более текстов привела к ошибке CUDA OOM на обоих устройствах. Памяти одной видеокарты оказывается недостаточно: слишком тяжелые батчи в сочетании с весами модели и компонентами обучения просто не помещаются ни в 40, ни в 48 ГБ.
Обучение meta-llama/Llama-2-70b-chat-hf

Этот тест проводился больше из любопытства: нам хотелось проверить, потянет ли одиночная A6000 Ada обучение модели с 70 миллиардами параметров. Это возможно, но только при условии подачи одного текста за раз. Уже при батче из двух текстов видеопамять полностью исчерпывается.
От A100 серьезных результатов в этом сценарии мы не ожидали. Одного квантования недостаточно: чтобы высвободить память и хотя бы просто запустить модель, пришлось снизить ранг матриц до 2 и 8 (корректировка конфигурации LoRA), а также ограничиться батчем в один текст. Впрочем, практической пользы в таком подходе мало — гораздо логичнее использовать либо одну A6000 Ada, либо связку из двух A100 через NVLink.
Генерация текста

С точки зрения генерации текста A6000 Ada стала безусловным лидером в каждом испытании.
Вполне ожидаемо, что при увеличении количества токенов разрыв в скорости вывода данных становится все более ощутимым. Вне зависимости от размера модели и объема токенов, A6000 Ada сохраняет преимущество в скорости.

Запустить обучение самой крупной модели (meta-llama/Llama-2-70b-chat-hf) на A100 удалось лишь после корректировки конфигурации LoRA, но даже в этом случае процесс не был завершен. Но это не означает, что A100 совсем не подходит для генерации текста с LLM. Ведь мы не рассматривали объединение двух A100 через мост NVLink.
Заключение
A6000 Ada по многим характеристикам превосходит A100, и для выполнения ресурсоемких задач стоит выбирать именно ее. Однако мы выявили важные нюансы:
- Обучение моделей: Использование A100 полностью оправдано при обучении «легких» и «средних» LLM с небольшими батчами. Здесь карта иногда быстрее, чем A6000 Ada.
- Простор для маневра: A6000 Ada благодаря 48 ГБ памяти и большему числу ядер дает гораздо больше свободы для экспериментов с размерами батча.
- В задачах инференса (генерации текста), ради которых все и затевается, A6000 Ada стабильно лидирует. Это делает ее интересным решением для работы с уже обученными моделями.
- Специфика эксплуатации: Отсутствие поддержки MIG и ограниченные возможности NVLink накладывают свой отпечаток. A6000 Ada превосходна для задач, где карта работает в одиночку и задействуется целиком. Если же критично объединение карт или гибкое разделение ресурсов (шеринг), стоит рассмотреть A100.
Как видите, однозначного ответа на вопрос, какая карта лучше, не существует. Окончательный выбор GPU должен зависеть от сложности ваших задач, необходимости совместного доступа к ресурсам и, разумеется, бюджета.









