Тестирование H100 vs A100 в трейне и инференсе Llama 3, погружение в FP8 и пробы движка TensorRT-LLM

Прошло два года с момента первого анонса NVIDIA H100 в 2022 году. Появилось множество открытых LLM моделей и всевозможных ML-библиотек, а сама видеокарта стала более доступной в России. В последние пару месяцев я активно экспериментирую с fine-tuning LLama 3 и возникла потребность в ускорении процесса обучения на больших датасетах. Все это натолкнуло меня на мысль провести исследование и выяснить, насколько H100 превосходит своего предшественника A100 в моих повседневных задачах.

NVIDIA H100
NVIDIA H100

Цель исследования — выявить ключевые преимущества H100 по сравнению с A100 и определить, в каких сценариях переход на H100 экономически целесообразен. Планировался запуск соответствующих скриптов на серверах, а при неудаче — поиск свежих данных по опубликованным бенчмаркам.

Я проанализировал доступную информацию и протестировал H100 и A100 при работе с моделями LLAMA 70B и 8B. Кроме того, были выполнены дополнительные тесты с использованием нового типа данных FP8 и движка TensorRT-LLM, чтобы получить более полную картину возможностей H100.

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

Содержание

  • 1. Аренда железа для теста
  • 2. Сравнение характеристик H100 и A100
  • 3. Синтетические тесты H100 vs A100:
    Geekbench CUDA - H100 на 25% мощнее A100
    OpenCL-Benchmark - Синтетические тесты H100 vs A100
  • 4. Тестирование через бенч в библиотеке HF Transformer
  • 5. Fine-tuning Llama 3 70B
  • 6. Fine-tuning Llama 3 8b
  • 7. Инференс LLama 3 70 8-bit через Ollama
  • 8. Немного про тип данных FP8
  • 9. PyTorch Native Float8
  • 10. Библиотека Optimum-NVIDIA
  • 11. Библиотека NVIDIA Transformer Engine
  • 12. Инференс FP8 через TensorRT LLM
  • 13. Пропускная способность в параллельном инференсе через TensorRT LLM
  • 14. Трейн LLM в FP8
  • 15. Заключение

1. Аренда железа для теста

Арендовать для тестирования виртуальные машины с H100 80GB PCIE и A100 80GB PCIE решил на immers.cloud, поскольку этот профессиональный сервис был всегда под рукой на протяжение года и имеет почасовую аренду.

Процессор

Даже самые производительные GPU, такие как NVIDIA GeForce RTX 4090, A100 или H100, могут быть ограничены скоростью центрального процессора. Мои наблюдения показывают, что чем мощнее графический процессор, тем сильнее он зависит от производительности CPU.

В службе поддержки immers.cloud мне ответили, что H100 и A100 работают на конфигурации с Xeon Gold 6336Y. Passmark Single Thread Rating: 2522 (а лидеры рейтинга 4000+). На мой взгляд, этот процессор может не раскрыть весь потенциал H100 при работе с моделями, такими как LLama, где часто задействуется лишь одно ядро.

Операционка и диск

В качестве операционки я выбрал готовый образ Ubuntu 22 с CUDA 12.3. Полезно голый, требует установки дополнительных библиотек, таких как torch и других. Тип инстанса был выбран с быстрым локальным диском на 480 ГБ для загрузки модели 70B. Однако стоит отметить, что работа со снимками такого диска займет много времени. В контексте моего теста LLM количество ядер не имело значения, поэтому по умолчанию конфигурация включала 16 ядер.

Скриншот из immers.cloud
Скриншот из immers.cloud

Тестируемые GPU находятся в схожих серверных конфигурациях, что делает мое сравнение репрезентативным. Если бы одна из карт использовалась с быстрым десктопным или серверным процессором с Single Thread Rating 4000+, сравнение было бы неравным.

2. Общее сравнение характеристик H100 и A100

По характеристикам видно, что при цене в два раза выше можно получить преимущества до пяти раз. В маркетинговых материалах Nvidia заявляет о преимуществах от 2 до 30 раз. Попробуем выяснить, так ли это на практике.

На сайте Nvidia маркетологи, видимо, сознательно скрывают значение FP16 и акцентируют внимание на высоких показателях Tensor Core. Я часто замечал это в спецификациях других GPU.

Согласно документации по архитектуре Hopper, FP16 у H100 PCIE составляет около 103 TFlops, хотя в некоторых источниках указывается 133 TFlops (это верно для NVIDIA H100 SXM5). Значение 200 TFlops на techpowerup.com явно неверно. На такой вот неверной информации создались завышенные ожидания.

Сравнение характеристик H100 и A100 / цены на immers.cloud по состоянию на июнь 2024. Картинка: miteigi nemoto
Сравнение характеристик H100 и A100 / цены на immers.cloud по состоянию на июнь 2024. Картинка: miteigi nemoto

Пропускная способность памяти GPU

В статье на arXiv, посвященной оптимизации производительности LLM, подчеркивается, что операции, такие как softmax и LayerNorm, ограничены пропускной способностью памяти GPU, что влияет на общую производительность модели. Теперь мне стало понятно, в каком аспекте LLM этот параметр важен. H100 имеет преимущество над A100 в 1.6 раза по пропускной способности памяти. Иными словами, некоторые операции у H100 будут быстрее до 1.6 раз просто за счет более быстрой памяти.

3.1 OpenCL-Benchmark - Синтетические тесты H100 vs A100

Небольшая бенчмарк-программа OpenCL для измерения пиковой производительности GPU/CPU.

  • compute performance (FP64, FP32, FP16, INT64, INT32, INT16, INT8)
  • memory bandwidth (coalesced/misaligned read/write)
  • PCIe bandwidth (send/receive/bidirectional)
OpenCL-Benchmark A100 / H100 - Источник: miteigi nemoto
OpenCL-Benchmark A100 / H100 - Источник: miteigi nemoto

Таблица демонстрирует, что характеристики близки к заявленным в спецификациях. H100 имеет преимущество в производительности для операций с FP64 и FP32, но в остальных аспектах прирост незначителен. FP16 в OpenCL на Nvidia не поддерживается.

Бенч показал, что A100 на сервере использует интерфейс PCIE Gen-3, а H100 - Gen-4. Однако эти данные могут быть неточными. В любом случае, это практически не повлияет на результаты тестирования в нашем контексте.

3.2 Geekbench CUDA - H100 на 25% мощнее A100

Источник: miteigi nemoto
Источник: miteigi nemoto

4. Тестирование через бенч в библиотеки HF Transformer

Еще открытый тест идет в библиотеке трансформера. Я провел пару запусков для t5-large, gpt2-medium. Команда запуска бенча для gpt2-medium выглядит следующим образом:

python3 ./scripts/benchmark/trainer-benchmark.py \ --base-cmd \ ' examples/pytorch/language-modeling/run_clm.py --model_name_or_path gpt2-medium \ --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 \ --logging_strategy no --save_strategy no --do_train --max_train_samples 2500 \ --per_device_train_batch_size 8 --num_train_epochs 1 --warmup_steps 8 \ --block_size 512 --report_to none ' \ --target-metric-key train_samples_per_second --repeat-times 1 --variations \ '|--fp16|--bf16' '--tf32 0|--tf32 1' --report-metric-keys train_loss \ --repeat-times 1 --base-variation '--tf32 0'
Прирост производительности h100 до 50%. / Источник: miteigi nemoto
Прирост производительности h100 до 50%. / Источник: miteigi nemoto

5. Fine-tuning Llama 3 70B

Под рукой у меня была парачка трейнов, которые делал на своем сервере. В таблице ниже представлены результаты Fine-tuning модели Llama 3 70B с использованием Qlora в 4 бита. H100 оказался примерно на 25% быстрее.

* - потребляет около 80 GB VRAM / Источник: miteigi nemoto
* - потребляет около 80 GB VRAM / Источник: miteigi nemoto
Важно отметить, что практика использования батча размером 1, часто рекомендуемая в обучающих материалах для GPU с малым объемом VRAM, может приводить к медленному обучению. Если видеопамять позволяет, размер батча следует увеличивать до разумного значения. Накопление градиентов также может привести к замедлению, поэтому на A100/H100 сначала лучше ставить дефолтный 1. Поэтому при переходе, например, с 4090 на A100, необходимо внимательно подбирать оптимальные параметры, чтобы максимально использовать возможности GPU.

6. Результат в другом трейне Fine-tuning Llama 3 8b

В данном трейне скорость H100 оказалась от 10 до 30% быстрее

Источник: miteigi nemoto
Источник: miteigi nemoto

7. Инференс LLama 3 70 8-bit через Ollama

Не останавливался подробно на тестах Ollama, но один запуск сделал, по которому видно, что в одиночном запросе скорость почти одинаковая. Результат отражает состояние сразу после установки Ollama без дополнительных настроек.

Источник: miteigi nemoto
Источник: miteigi nemoto

8. Немного про тип данных FP8

В марте 2022 года NVIDIA представила формат FP8 вместе с чипом GH100 на новой архитектуре Hopper. Этот шаг стал важным для ИИ и HPC-нагрузок, так как FP8 улучшает обучение и выводы ИИ, повышая вычислительную эффективность и снижая использование памяти. По словам NVIDIA:

  • Квантование FP8 сохраняет более высокую точность по сравнению с другими форматами данных, такими как INT8 или INT4, обеспечивая при этом максимальную производительность.
  • Тензорное ядро H100 FP8 имеет 6-кратную пропускную способность по сравнению с тензорным ядром A100 FP16. @
  • Тензорное ядро H100 PCIE FP8 обеспечивает пиковую производительность 3000 TFLOPS, что в 2 раза больше, чем у FP16, и почти в 10 раз больше, чем у A100 PCIE с FP16.
  • Поддержка FP8 сейчас только для архитектуры Ada и Hopper. (RTX 4090 должна поддерживать, хоть и не так мощно как Hopper)

Есть два FP8 формата в NVIDIA Hopper:

  • E4M3, который имеет 4 бита экспоненты и 3 бита мантиссы (точности).
  • E5M2, который вместо этого имеет 5 битов экспоненты и 2 бита мантиссы.
Источник: Nvidia
Источник: Nvidia

За последний год можно наблюдать повсеместное внедрение FP8, хоть и медленное. Например, в VLLM используют экспериментально FP8 KV Cache. Accelerate интегрировал обучение со смешанной точностью Nvidia Transformers FP8. С начала 2024 года Pytorch поддерживает нативно FP8.

По данным Nvidia потери от квантизации FP8 заметно меньше других типов квантизаций

Тестирование H100 vs A100 в трейне и инференсе Llama 3, погружение в FP8 и пробы движка TensorRT-LLM

Самым сложным для меня стала попытка запустить что-либо в FP8, а без этого теста мое исследование было бы однобоким, поскольку именно этот тип данных является ключевым преимуществом H100 по сравнению с A100. В интернете очень мало примеров, как работать с этим форматом. Попробую сделать краткий обзор методов. В следующем исследованиях буду пробовать, что не успел в этот раз.

9. PyTorch Native Float8

Запустить инференс Llama через ванильный HF у меня по-быстрому из коробки не получилось. Насколько понял это возможно, но требуется готовить специальный код.

Автор одной публикации продемонстрировал в трейне использование библиотеки float8_experimental на простой классификационной модели с поддержкой Vision Transformer (ViT-Huge) с 632 миллионами параметров. Получилось ускорение на 47% от BF16.

Train Results (By Chaim Rand)
Train Results (By Chaim Rand)

10. Библиотека Optimum-NVIDIA

Многообещающая библиотека Optimum - была обнаружена уже на этапе оформления статьи. Поэтому сам лично не запускал.

Согласно публикации Optimum-NVIDIA обеспечивает в 3 раза более низкую задержку, чем ванильный HF.

Время, необходимое для генерации первого токена (мс)
Время, необходимое для генерации первого токена (мс)

Обеспечивает до 28 раз лучшую пропускную способность по сравнению со стандартными трансформаторами HF:

Тестирование H100 vs A100 в трейне и инференсе Llama 3, погружение в FP8 и пробы движка TensorRT-LLM

11. NVIDIA Transformer Engine

NVIDIA Transformer Engine (github) - это библиотека для ускорения моделей Transformer на NVIDIA GPU, включая использование FP8 на Hopper и Ada GPU, чтобы обеспечить более высокую производительность при меньшем использовании памяти как при обучении, так и при выводах. В основном именно эта библиотека и интегрируется в torch / HF и в другие фреймворки для поддержки FP8.

С помощью библиотеки Nvidia Transformer Engine (TE) (документация) я запустил на H100 небольшой скрипт с тестом линейных слоев нейронной сети в формате FP8 и без него. Результаты показали, что использование этого типа данных обеспечивает ускорение в несколько раз. Также я видел публикации, где операции GEMM на больших матрицах дают пятикратный прирост производительности. Однако в сложных моделях LLM такая линейность не сработает.

Как обещает Nvidia движок Transformer Engine в сочетании с тензорными ядрами NVIDIA Hopper FP8 обеспечивает 9-кратное ускорение обучения ИИ и 30-кратное ускорение выводов ИИ на больших языковых моделях по сравнению с предыдущим поколением A100. Увидеть бы хоть одним глазком ).

11. Инференс FP8 через TensorRT LLM

Наиболее задокументированным инструментом по запуску моделей в FP8 оказался движок Nvidia TensorRT LLM. TensorRT-LLM ускоряет и оптимизирует производительность вычислений для новейших больших языковых моделей (LLM) на графических процессорах NVIDIA разных архитектур.

Схема работы: берется модель с HF и конвертируется в чекпоинт формата TensorRT LLM, потом чекпоинт конвертируется в FP8 (или другой тип), затем делается финальная компиляция для инференса в TensorRT LLM Engine или через Triton Inference Server.

Кстати, в установке по умолчанию TensorRT LLM Engine нельзя переносить между виртуальными машинами с разным GPU. Зря убил на это час)

Совместимость библиотеки с архитектурами и типами данных

  • Hopper (SM90) - FP32, FP16, BF16, FP8, INT8, INT4

  • Volta (SM70) - FP32, FP16, INT8(1), INT4(2)

  • Ampere (SM80, SM86) - FP32, FP16, BF16, INT8, INT4(3)

  • Turing (SM75) - FP32, FP16, INT8(1), INT4(2)

  • Ada Lovelace (SM89) - FP32, FP16, BF16, FP8, INT8, INT4

Мне удалось провести на H100 простой инференс модели Llama 3 8B и получить 70 t/s в формате BF16 и 112 t/s в формате FP8 - прирост скорости на 60%. Поскольку мое терпение на тесты уже иссякло, я не стал углубляться в особенности настроек TensorRT LLM.

12. Пропускная способность в параллельном инференсе через TensorRT LLM

Повторять бенч от Nvidia было выше моих сил, возможно в следующий раз. В таблице ниже лишь избранные данные о производительности Llama 3 и Mixtral 8x7B.

TP означает тензорный параллелизм. Производительность Llama 3 и Mixtral 8x7B / Источник: Nvidia / Картинка: miteigi nemoto
TP означает тензорный параллелизм. Производительность Llama 3 и Mixtral 8x7B / Источник: Nvidia / Картинка: miteigi nemoto

Очевидно, что в данной таблице содержится хороший ответ на вопрос, когда же действительно стоит выбрать H100 вместо A100 - высоконагруженный инференс в продакшене.

Оценка TensorRT-LLM на платформах Hopper и Ampere показала, что H100 FP8 имеет в 4,6 раза большую пропускную способность и в 4,4 раза меньшую задержку первого токена, чем A100

Тестирование H100 vs A100 в трейне и инференсе Llama 3, погружение в FP8 и пробы движка TensorRT-LLM

13. Трейн LLM в FP8

К сожалению, в этих сессиях аренды GPU мне не удалось быстро запустить обучение в формате FP8. Для этого требуется подготовить скрипты и глубже изучить тему, так как примеров в интернете очень мало.

В разных публикациях, я встречал что переход на FP8 H100 ускорял трейн до 3-х раз по сравнению с A100. Пример от Lambda Lab:

Ускорение для моделей 5B и 20B при использовании H100 с Transformer Engine (FP8) по сравнению с A100 с программной библиотекой Transformer Engine (BF16).
Ускорение для моделей 5B и 20B при использовании H100 с Transformer Engine (FP8) по сравнению с A100 с программной библиотекой Transformer Engine (BF16).

Часто видел утверждения, что сходимость в трейне при FP8 близка к BF16/FP16. Натолкнулся и на критическое мнение, что с трейном в FP8 не все так гладко. Авторы свежего исследования подмечают, что обучение моделей с использованием FP8 менее стабильно по сравнению с BF16, встречаются более частые всплески потерь, особенно при увеличении скорости обучения.

Тестирование H100 vs A100 в трейне и инференсе Llama 3, погружение в FP8 и пробы движка TensorRT-LLM

14. Заключение и выводы

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

NVIDIA H100 - специфическая мощная зверюга для опытных ML-специалистов. Практически каждая библиотека на Python обещает значительный прирост производительности, куда не глянь на гитхаб. Не стоит возлагать слишком больших надежд только на заявленные высокие характеристики в TFLOPs и громкие маркетинговые обещания в бенчмарках Nvidia. На практике значительный рост производительности может проявляться лишь в определённых сценариях использования.

Чтобы разработчик воспользовался всеми мощностями H100 нужно активно поработать с бубном, подготовить код под FP8 и точно понимать зачем все это нужно. Награда будет великой - ускорение в трейне LLM в 2-3 раза, а в инференсе для продакшена до 3-4 раза и выше.

Ускорение на 40-60% во многих задачах LLM и ML без дополнительных усилий во многом не оправдывает удвоенную стоимость аренды. Однако некоторые сценарии работы могут сразу дать прирост в 2-3 раза, что делает H100 экономически более выгодным решением. Тестируйте свои нейронки.

В контексте LLM не рекомендую переходить на H100 вместо A100:

  • В сценарии небольших повседневных трейнов, которые обычно длятся от десятков минут до несколько часов, потом небольшой простой, потом снова трейн.
  • Не рекомендую начинающим ML-специалистам или любителям-исследователям, которые попросту потеряются в настройках библиотек H100.
  • Не рекомендую также в качестве одиночных запросов по инференсу разных моделей. Такой сценарий подразумевает частый простой между запусками, что в итоге ускорение от H100 нивелируется и может быть значительно дороже, чем A100.

Рекомендую аренду H100 вместо A100:

  • Высоконагруженный инференс LLM в продакшене, особенно в конфигурациях с Multi-GPU. К слову, уменьшение задержки первого токена в H100 позволяет создать более качественный пользовательский опыт чат-системы.
  • Когда регулярно требуется первичная многочасовая обработка больших данных через ввод/вывод LLM и можно воспользоваться кратным ростом в FP8.
  • Когда планируется долгий многодневный трейн LLM и время дороже денег.
  • Опытным специалистам рекомендую готовиться играть в трейны на FP8, чтобы меньшими затратами времени и памяти провернуть более сложные и масштабные эксперименты.
  • Когда требуется более быстрый FP32/FP64

Интересные ссылки

На этом пока все. Если будете регистрироваться на immers.cloud, то можете поблагодарить меня, пройдя по реферальной ссылке на страницу регистрации — это позволит мне проводить больше разных тестов и делиться с вами. Могу ответить по этому сервису на вопросы в комментариях или в телеге.

Стоит отметить, что данное исследование не является окончательным и может быть дополнено новыми фактами и результатами тестов в будущем. Я планирую обновлять этот документ по мере поступления актуальной информации, чтобы предоставить читателям наиболее полную и достоверную картину преимуществ H100 по сравнению с A100 в задачах обучения и инференса языковых моделей.

Подписывайтесь на мой ТГ-канал, где я делюсь своими находками и опытом. Задавайте вопросы в комментариях.

66
3 комментария

О, вот это новость! Надо будет в чате коллегам скинуть.

Ну, это было ожидаемо, я не удивлен.

H100 интересный зверь