Тестирование H100 vs A100 в трейне и инференсе Llama 3, погружение в FP8 и пробы движка TensorRT-LLM
Прошло два года с момента первого анонса NVIDIA H100 в 2022 году. Появилось множество открытых LLM моделей и всевозможных ML-библиотек, а сама видеокарта стала более доступной в России. В последние пару месяцев я активно экспериментирую с fine-tuning LLama 3 и возникла потребность в ускорении процесса обучения на больших датасетах. Все это натолкнуло меня на мысль провести исследование и выяснить, насколько H100 превосходит своего предшественника A100 в моих повседневных задачах.
Цель исследования — выявить ключевые преимущества 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 ядер.
Тестируемые 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 явно неверно. На такой вот неверной информации создались завышенные ожидания.
Пропускная способность памяти 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)
Таблица демонстрирует, что характеристики близки к заявленным в спецификациях. H100 имеет преимущество в производительности для операций с FP64 и FP32, но в остальных аспектах прирост незначителен. FP16 в OpenCL на Nvidia не поддерживается.
Бенч показал, что A100 на сервере использует интерфейс PCIE Gen-3, а H100 - Gen-4. Однако эти данные могут быть неточными. В любом случае, это практически не повлияет на результаты тестирования в нашем контексте.
3.2 Geekbench CUDA - H100 на 25% мощнее A100
4. Тестирование через бенч в библиотеки HF Transformer
Еще открытый тест идет в библиотеке трансформера. Я провел пару запусков для t5-large, gpt2-medium. Команда запуска бенча для gpt2-medium выглядит следующим образом:
5. Fine-tuning Llama 3 70B
Под рукой у меня была парачка трейнов, которые делал на своем сервере. В таблице ниже представлены результаты Fine-tuning модели Llama 3 70B с использованием Qlora в 4 бита. H100 оказался примерно на 25% быстрее.
Важно отметить, что практика использования батча размером 1, часто рекомендуемая в обучающих материалах для GPU с малым объемом VRAM, может приводить к медленному обучению. Если видеопамять позволяет, размер батча следует увеличивать до разумного значения. Накопление градиентов также может привести к замедлению, поэтому на A100/H100 сначала лучше ставить дефолтный 1. Поэтому при переходе, например, с 4090 на A100, необходимо внимательно подбирать оптимальные параметры, чтобы максимально использовать возможности GPU.
6. Результат в другом трейне Fine-tuning Llama 3 8b
В данном трейне скорость H100 оказалась от 10 до 30% быстрее
7. Инференс LLama 3 70 8-bit через Ollama
Не останавливался подробно на тестах Ollama, но один запуск сделал, по которому видно, что в одиночном запросе скорость почти одинаковая. Результат отражает состояние сразу после установки Ollama без дополнительных настроек.
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 бита мантиссы.
За последний год можно наблюдать повсеместное внедрение FP8, хоть и медленное. Например, в VLLM используют экспериментально FP8 KV Cache. Accelerate интегрировал обучение со смешанной точностью Nvidia Transformers FP8. С начала 2024 года Pytorch поддерживает нативно FP8.
По данным Nvidia потери от квантизации FP8 заметно меньше других типов квантизаций
Самым сложным для меня стала попытка запустить что-либо в FP8, а без этого теста мое исследование было бы однобоким, поскольку именно этот тип данных является ключевым преимуществом H100 по сравнению с A100. В интернете очень мало примеров, как работать с этим форматом. Попробую сделать краткий обзор методов. В следующем исследованиях буду пробовать, что не успел в этот раз.
9. PyTorch Native Float8
Запустить инференс Llama через ванильный HF у меня по-быстрому из коробки не получилось. Насколько понял это возможно, но требуется готовить специальный код.
Автор одной публикации продемонстрировал в трейне использование библиотеки float8_experimental на простой классификационной модели с поддержкой Vision Transformer (ViT-Huge) с 632 миллионами параметров. Получилось ускорение на 47% от BF16.
10. Библиотека Optimum-NVIDIA
Многообещающая библиотека Optimum - была обнаружена уже на этапе оформления статьи. Поэтому сам лично не запускал.
Согласно публикации Optimum-NVIDIA обеспечивает в 3 раза более низкую задержку, чем ванильный HF.
Обеспечивает до 28 раз лучшую пропускную способность по сравнению со стандартными трансформаторами HF:
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.
Очевидно, что в данной таблице содержится хороший ответ на вопрос, когда же действительно стоит выбрать H100 вместо A100 - высоконагруженный инференс в продакшене.
Оценка TensorRT-LLM на платформах Hopper и Ampere показала, что H100 FP8 имеет в 4,6 раза большую пропускную способность и в 4,4 раза меньшую задержку первого токена, чем A100
13. Трейн LLM в FP8
К сожалению, в этих сессиях аренды GPU мне не удалось быстро запустить обучение в формате FP8. Для этого требуется подготовить скрипты и глубже изучить тему, так как примеров в интернете очень мало.
В разных публикациях, я встречал что переход на FP8 H100 ускорял трейн до 3-х раз по сравнению с A100. Пример от Lambda Lab:
Часто видел утверждения, что сходимость в трейне при FP8 близка к BF16/FP16. Натолкнулся и на критическое мнение, что с трейном в FP8 не все так гладко. Авторы свежего исследования подмечают, что обучение моделей с использованием FP8 менее стабильно по сравнению с BF16, встречаются более частые всплески потерь, особенно при увеличении скорости обучения.
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
Интересные ссылки
- NVIDIA Data Center - Deep Learning Product Performance
- NVIDIA TensorRT-LLM Supercharges Large Language Model Inference on NVIDIA H100 GPUs
- What's New in Transformer Engine and FP8 Training
- Inference Performance Llama 2 on NeMO Framwork Inference performance was measured for - (1- 8 × A100 80GB SXM4) - (1- 8 × H100 80GB HBM3)
- Accelerate Generative AI Inference Performance with NVIDIA TensorRT Model Optimizer
- NVIDIA TensorRT Model Optimizer
На этом пока все. Если будете регистрироваться на immers.cloud, то можете поблагодарить меня, пройдя по реферальной ссылке на страницу регистрации — это позволит мне проводить больше разных тестов и делиться с вами. Могу ответить по этому сервису на вопросы в комментариях или в телеге.
Стоит отметить, что данное исследование не является окончательным и может быть дополнено новыми фактами и результатами тестов в будущем. Я планирую обновлять этот документ по мере поступления актуальной информации, чтобы предоставить читателям наиболее полную и достоверную картину преимуществ H100 по сравнению с A100 в задачах обучения и инференса языковых моделей.
Подписывайтесь на мой ТГ-канал, где я делюсь своими находками и опытом. Задавайте вопросы в комментариях.