8 800 500-99-26 Для звонков по России
DigitalRazor
Статьи

Тестирование TensorRT-LLM в работе с большими языковыми моделями

Рассмотрим преимущества и недостатки оптимизатора TensorRT-LLM, который повышает производительность больших языковых моделей на этапе вывода. Расскажем об ограничениях и нюансах при выборе подходящей рабочей станции или GPU-сервера. Также наглядно продемонстрируем возможности современных видеокарт.

Что такое TensorRT-LLM

В эпоху стремительного развития искусственного интеллекта и машинного обучения большие языковые модели (далее — LLM) становятся неотъемлемой частью многих приложений. ИИ-помощники встроены даже в пакет Office и приложение Paint, а у современных ноутбуков появилась отдельная ИИ-кнопка. Однако внедрение и использование нейросетей требует вычислительной мощности, которая на порядок превосходит возможности процессоров. Здесь на помощь приходят видеокарты и TensorRT.

TensorRT — это библиотека, комплект разработки и программный стек, который позволяет оптимизировать ИИ-операции силами GPU. TensorRT-LLM — ответвление TensorRT для работы с языками, речью, обращениями и ответами. TensorRT-LLM не умеет генерировать картинки, музыку, или видео. Но позволяет оптимизировать работу с языковыми ИИ для поиска информации, общения текстом или голосом. В частности — повысить скорость вывода на конечном устройстве пользователя, который также называют инференсом (inference).

Справедливо заметить, что использовать языковую модель на GPU можно и без TensorRT-LLM. Технически правильно называть эту библиотеку не фундаментом, а оптимизацией, которая позволяет ускорить работу в несколько раз. TensorRT-LLM — лучшее решение для видеокарт NVIDIA, поскольку создано инженерами этой компании. К сожалению, карты AMD и Intel не поддерживаются.

NVIDIA описывает инструмент так:

«При больших объёмах пакетов TensorRT-LLM значительно улучшает работу сложных языковых моделей. Например, помощников по написанию текстов и программированию, которые выдают сразу несколько уникальных результатов в автоматическом режиме. В итоге повышается производительность и качество, а пользователи получают возможность выбирать лучшие результаты».

По-простому говоря, TensorRT-LLM — это своего рода «прокладка», которая оптимизирует работу видеокарты для ИИ-задач, связанных с обработкой и генерацией текста.

Преимущества

Масштабируемость. Так называемый «тензорный параллелизм» позволяет распределять нагрузку между несколькими устройствами почти без потерь. Две видеокарты — ускорение в два раза (на самом деле на 97–99%). Это работает не только в рамках одной системы, но и в масштабе нескольких GPU-серверов.

Производительность. TensorRT-LLM в несколько раз ускоряет работу с языковыми моделями. К примеру, заявлено ускорение в 4,6 раза в модели Llama 3, вдвое — в GPT-J 6B.

Эффективность. TensorRT-LLM оптимизирует работу и нагрузку, позволяя снизить затраты на электричество, количество оборудования и персонала.

Квантизация. Ускорение в ущерб точности, и наоборот.

Простота. Возможность работы с LMM без глубоких технических знаний. Но это по-прежнему непросто.

Точность. Генерация с расширенным поиском (RAG). ИИ может обманывать, если приходится отвечать на вопрос за рамками данных, которые использовали для обучения модели. C TensorRT-LLM проблема частично решена наличием поиска.

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

Открытый исходный код. Безопасность данных пользователя. «Закладок» гарантированно нет.

Прочие ухищрения, направленные на скорость и точность инференса.

Недостатки

Только NVIDIA. Поскольку это технология NVIDIA, она работает только с «зелёными» видеокартами и ускорителями. Начиная с RTX 2000.

Не любит Windows. В среде Windows с TensorRT-LLM будет работать только одна видеокарта. Для масштабирования хотя бы до двух GPU придётся переходить на Linux. Таким образом, игровые ПК подходят для ограниченного круга задач. В идеале нужен GPU-сервер с 2–4 видеокартами. В нашем ассортименте есть специализированные решения.

Аналоги

TensorRT-LLM — не единственная подобная «прокладка» между языковой моделью и видеокартой. Существует несколько аналогов. Например, LMDeploy, vLLM, TGI и MLC-LLM. Забавно, что несмотря на «родное» оборудование, TensorRT-LLM не всегда показывает лучшие результаты. Зато обладает сторонними преимуществами.

Проведём сравнение в Llama 3 по двум ключевым параметрам: время до первого токена (TTFT) и скорость генерации токенов (токенов в секунду).

Llama 3-8B, время до первого токена, 10 пользователей

LMDeploy
32
vLLM
39
TGI
94
TensorRT-LLM
71
MLC-LLM
30
0
20
40
60
80
100

мс

Llama 3-8B, время до первого токена, 50 пользователей

LMDeploy
52
vLLM
50
TGI
299
TensorRT-LLM
81
MLC-LLM
37
0
60
120
180
240
300

мс

Llama 3-8B, время до первого токена, 100 пользователей

LMDeploy
185
vLLM
47
TGI
537
TensorRT-LLM
981
MLC-LLM
302
0
200
400
600
800
1000

мс

Llama 3-8B, токенов в секунду, 50 пользователей

LMDeploy
3 200
vLLM
1 700
TGI
1 700
TensorRT-LLM
2 300
MLC-LLM
2 500
0
700
1400
2100
2800
3500

токены

Llama 3-8B, токенов в секунду, 100 пользователей

LMDeploy
3 900
vLLM
2 400
TGI
2 300
TensorRT-LLM
2 500
MLC-LLM
2 400
0
800
1600
2400
3200
4000

токены

Результаты:

  • LMDeploy — лучшая скорость генерации токенов во всех режимах, самый низкий TTFT;

  • vLLM — посредственная генерация во всех режимах. TTFT схож, но при нагрузке в 10 пользователей заметно отставание;

  • TGI — посредственная генерация во всех режимах. Худшие показатели TTFT. К удивлению, при нагрузке в 100 пользователей работает даже лучше, чем TensorRT-LLM;

  • TensorRT-LLM — в основном результаты близки к LMDeploy, но при высокой загрузке заметно отставание;

  • MLC-LLM — слабая генерация при малой нагрузке, но хорошая при средней и высокой. По показателю TTFT где-то между LMDeploy и TensorRT-LLM.

У нас 2 победителя — LMDeploy и TensorRT-LLM. Нюанс в том, что обе модели работают в экосистеме CUDA, и обе совместимы только с NVIDIA. За TensorRT-LLM остаётся преимущество в универсальности, простоте использования и быстром развитии. Также LMDeploy в принципе не поддерживает часть языковых моделей. Например, Mistral и Qwen 1.5.

В итоге можно сказать, что в Llama 3 подход NVIDIA предпочтительнее для систем со средней и небольшой нагрузкой, а LMDeploy — для высоконагруженных систем.

Немного теории

СUDA-ядра

Обычно количество CUDA-ядер и их частота работы являются ключевыми характеристиками видеокарты. В случае карт NVIDIA и связанных с ИИ нагрузок это не так. CUDA ядра здесь практически не работают.

Tensor-ядра

Для выполнения любых ИИ-операций, в том числе работы технологии масштабирования DLSS, видеокарты NVIDIA используют специализированные Tensor-ядра. На это даже намекает название библиотеки — TensorRT-LMM. Поэтому может сложиться впечатление, что сравнение количества и поколения тензорных ядер — первичная метрика для оценки итоговой производительности… казалось бы. Далее мы наглядно покажем, что это не совсем так.

Скорость видеопамяти

Рабочая нагрузка LLM — это больше, чем просто вычислительная мощность. Огромное влияние оказывает подсистема памяти. Общая пропускная способность памяти (ПСП) — вторая ключевая характеристика после Tensor-ядер. Здесь работает следующее правило: чем больше ПСП, тем выше производительность. Напоминаем, что битность шины памяти — только половина успеха. Не меньшее влияние на ПСП оказывает частота работы памяти.

Количество видеопамяти

Объём видеопамяти не оказывает влияния на скорость работы, но только до определённой поры. При увеличении размера вводных данных (считай с ростом сложности задачи) рано или поздно видеопамяти не хватит. Существует заблуждение, что если памяти не хватает, то работать вообще не будет (известная ошибка VIDEO_MEMORY_MANAGEMENT_INTERNAL). Так было до января 2023 года, пока NVIDIA не выпустила драйвер 535.98. После этого подсистема памяти начала работать иначе.

При недостатке видеопамяти система начинает использовать оперативную память в качестве графической. Поскольку ПСП оперативной памяти в разы меньше, чем у графической (1000 ГБ/с у RTX 4090 против 100 ГБ/с у системной DDR5-6400), плюс использование «оперативки» влечёт накладные расходы и лишние задержки, скорость инференса падает радикально. Далее наглядно продемонстрируем этот эффект.

Недавно представленные RTX Pro Blackwell получили 96 ГБ видеопамяти

Важное замечание: в системах с двумя и более GPU память не суммируется. В память каждой карты помещается копия данных.

Подготовка к тестированию

Из-за совместимости TensorRT-LLM только с видеокартами NVIDIA у нас просто нет возможности сопоставить результаты с решениями AMD и Intel в равных условиях. Поэтому придётся ограничиться «зелёными» картами серии GeForce RTX 4000 и RTX 5000.

Заметим, что решения NVIDIA на голову превосходят конкурентов — преимущественно из-за образцовой программной оптимизации и развитой экосистемы. Иными словами, хочешь работать с ИИ — покупай NVIDIA.

В нашем ассортименте есть AI-серверы на профессиональных видеокартах RTX 6000 Ada, которые могут похвастать внушительным объёмом видеопамяти. К слову, про общие отличия и разницу быстродействия игровых GeForce RTX и профессиональных RTX (ранее известных как Quadro) мы рассказывали в отдельной статье. Конкретно в этом тестировании будут только игровые модели. Причина — игровые решения уже перебрались на новую архитектуру Blackwell, а профессиональные только недавно анонсировали. Blackwell не обеспечивает качественный прирост игровой производительности, зато на голову выше в ИИ-нагрузках.  

Забегая вперёд, если вы рассматриваете покупку профессиональной карты, имейте ввиду, что по скорости она проиграет игровому «собрату» в связанных с ИИ нагрузках в противостоянии 1 на 1. Однако, двойной набор видеопамяти открывает новые горизонты.

  • Процессор — AMD Ryzen Threadripper PRO 7985WX;

  • Процессорный кулер — кастомный контур СЖО на основе компонентов Alphacool;

  • Материнская плата — ASUS Pro WS WRX90E-SAGE SE;

  • Оперативная память — DDR5-6400 ECC Reg, 8х16 ГБ (128 ГБ суммарно);

  • Видеокарта — разные видеокарты NVIDIA;

  • Накопитель — Samsung 980 Pro 2 ТБ.

  • Операционная система — Linux.

Сравнительно с прошлым тестированием конфигурация тестового стенда немного изменилась. Теперь вместо памяти DDR5-5600 используем DDR5-6400. Хотя это усложнит сравнение результатов, всё-таки в 2025 году золотым стандартом являются 6400 МГц. Впрочем, это внесёт незначительную погрешность.

Второй момент — Linux. Напомним, что в среде Windows с TensorRT-LLM может работать только одна видеокарта… во всяком случае официально. Обычно для серьёзных задач используют Linux. Кроме того, Linux сам по себе быстрее. Сравнительно с тестами «на винде» будет прирост на пару процентов.

Третий — по науке для каждой комбинации модели LMM и видеокарты нужно генерировать новый движок. Оказалось, что это совсем не обязательно в рамках видеокарт одного поколения/архитектуры. Поэтому для экономии времени мы сгенерировали только два движка — для RTX 4000 и RTX 5000. Провели дополнительное сравнение, и выяснили, что «чистый» движок действительно влияет на скорость. Однако, речь о непоказательных 1–2%, которые легко можно списать на погрешность измерений.

Итог: где-то прибыло, где-то убыло. Эти нюансы компенсируют друг друга. Не удивляйтесь, если ваши собственные тесты будут несколько отличаться. Эти результаты не эталонные, но показательные для сравнения разных видеокарт и выявления узких мест.

Характеристики видеокарт:

Наш пакет TensorRT-LLM настроен на использование модели Llama-3-8B с квантованием в 4-битный формат AWQ. Хотя TensorRT-LLM поддерживает множество моделей и методов квантования, мы решили придерживаться именно этой модели, поскольку она относительно лёгкая. Это позволяет тестировать видеокарты, не слишком беспокоясь об ограничениях видеопамяти.

Переменные:

Тесты

С простой моделью производительность в целом соответствует ожиданиям, основанным на количестве тензорных ядер. Однако это — наглядный показатель, что «решают» не только Tensor-ядра.

Самый яркий пример — RTX 4070 и RTX 4070 Ti. У старшей модели тензорных ядер больше на 30%, но полностью идентичная подсистема памяти. Это привело к тому, что по генерации токенов разница чуть ли не в пределах погрешности измерений — менее 2%. 

Llama 3-8B, input 100, output 100, batch 1

RTX 5090 32GB
232
RTX 5080 16GB
165
RTX 5070 Ti 16GB
132
RTX 5070 12GB
128
RTX 4090 24GB
180
RTX 4080 Super 16GB
142
RTX 4080 16GB
140
RTX 4070 Ti Super 16GB
135
RTX 4070 Ti 12GB
109
RTX 4070 Super 12GB
108
RTX 4070 12GB
107
RTX 4060Ti 8GB
68
0
48
96
144
192
240

токены

Llama 3-8B, input 100, output 100, batch 1

RTX 5090 32GB
371
RTX 5080 16GB
605
RTX 5070 Ti 16GB
628
RTX 5070 12GB
843
RTX 4090 24GB
555
RTX 4080 Super 16GB
691
RTX 4080 16GB
742
RTX 4070 Ti Super 16GB
723
RTX 4070 Ti 12GB
912
RTX 4070 Super 12GB
921
RTX 4070 12GB
932
RTX 4060Ti 8GB
1 485
0
300
600
900
1200
1500

мс

Если использовать ту же длину входных и выходных данных (100), но увеличить размер пакета (до 8), результаты совсем другие. Пропускная способность памяти теперь решает меньше. Сильнее проявляется зависимость скорости генерации токенов от количества Tensor-ядер.

Llama 3-8B, input 100, output 100, batch 8

RTX 5090 32GB
1 092
RTX 5080 16GB
770
RTX 5070 Ti 16GB
668
RTX 5070 12GB
609
RTX 4090 24GB
840
RTX 4080 Super 16GB
656
RTX 4080 16GB
652
RTX 4070 Ti Super 16GB
631
RTX 4070 Ti 12GB
599
RTX 4070 Super 12GB
590
RTX 4070 12GB
546
RTX 4060Ti 8GB
405
0
240
480
720
960
1200

токенов

Llama 3-8B, input 100, output 100, batch 8

RTX 5090 32GB
745
RTX 5080 16GB
1 068
RTX 5070 Ti 16GB
1 154
RTX 5070 12GB
1 202
RTX 4090 24GB
974
RTX 4080 Super 16GB
1 273
RTX 4080 16GB
1 281
RTX 4070 Ti Super 16GB
1 265
RTX 4070 Ti 12GB
1 301
RTX 4070 Super 12GB
1 319
RTX 4070 12GB
1 485
RTX 4060Ti 8GB
1 992
0
400
800
1200
1600
2000

мс

Переходим к серьёзным нагрузкам. 2048 длины входных и 512 выходных данных — это максимум, рекомендованный NVIDIA для этой модели. При единичном размере пакета результат снова тесно связан с ПСП. Но это выражено не так сильно, как в случае «100 на 100». Больший контекст требует больше вычислений, и Tensor-ядра выходят на передний план. Несмотря на это, очевидно, что пропускная способность памяти по-прежнему играет важную роль в этом тесте.

Llama 3-8B, input 2048, output 512, batch 1

RTX 5090 32GB
185
RTX 5080 16GB
129
RTX 5070 Ti 16GB
96
RTX 5070 12GB
93
RTX 4090 24GB
142
RTX 4080 Super 16GB
111
RTX 4080 16GB
109
RTX 4070 Ti Super 16GB
103
RTX 4070 Ti 12GB
83
RTX 4070 Super 12GB
82
RTX 4070 12GB
81
RTX 4060Ti 8GB
50
0
40
80
120
160
200

токены

Llama 3-8B, input 2048, output 512, batch 1

RTX 5090 32GB
2 894
RTX 5080 16GB
3 991
RTX 5070 Ti 16GB
4 282
RTX 5070 12GB
5 643
RTX 4090 24GB
3 591
RTX 4080 Super 16GB
4 612
RTX 4080 16GB
4 732
RTX 4070 Ti Super 16GB
4 967
RTX 4070 Ti 12GB
6 172
RTX 4070 Super 12GB
6 217
RTX 4070 12GB
6 348
RTX 4060Ti 8GB
10 218
0
200
400
600
800
1000

мс

С увеличением батча до 8 проявляются требования к количеству видеопамяти. В предыдущем тесте загружались примерно 7 ГБ видеопамяти, в этом — под 16 ГБ. Разница между картами с 12 и 16 ГБ памяти кардинальная:

  • 24 ГБ —  тест завершился за 35 секунд;

  • 16 ГБ — примерно 50 секунд;

  • 12 ГБ — 260 секунд;

  • 8 ГБ — 960 секунд.

Перед нами снова демонстрация того, о чём говорили в теоретическом разделе. При недостатке видеопамяти системе приходиться обращаться к оперативной памяти. Она в разы медленнее. И чем больший дефицит видеопамяти, тем хуже результат.

Llama 3-8B, input 2048, output 512, batch 8

RTX 5090 32GB
472
RTX 5080 16GB
285
RTX 5070 Ti 16GB
271
RTX 5070 12GB
61
RTX 4090 24GB
351
RTX 4080 Super 16GB
246
RTX 4080 16GB
240
RTX 4070 Ti Super 16GB
236
RTX 4070 Ti 12GB
46
RTX 4070 Super 12GB
46
RTX 4070 12GB
46
RTX 4060Ti 8GB
13
0
200
400
600
800
1000

токенов

Llama 3-8B, input 2048, output 512, batch 8

RTX 5090 32GB
9 281
RTX 5080 16GB
14 077
RTX 5070 Ti 16GB
13 871
RTX 5070 12GB
76 098
RTX 4090 24GB
11 643
RTX 4080 Super 16GB
16 653
RTX 4080 16GB
17 082
RTX 4070 Ti Super 16GB
17 302
RTX 4070 Ti 12GB
88 592
RTX 4070 Super 12GB
88 372
RTX 4070 12GB
88 991
RTX 4060Ti 8GB
0
20000
40000
60000
80000
100000

мс

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

Технический итог

Для работы с TensorRT-LLM основное внимание нужно обращать на количество и поколение тензорных ядер, а также на пропускную способность памяти видеокарты. Без быстрой памяти время, которое ядра тратят на ожидание подачи данных из памяти, расходуется попусту — прямая потеря общей производительности.

Количество видеопамяти начинает играть роль при многопользовательском доступе и сложных/длинных запросах. Иными словами — для высоконагруженных систем. И хотя это честные выводы из тестов, реальность не всегда совпадает с «конями в вакууме».

Практический итог

С практической точки зрения работа с TensorRT-LLM с видеокартами среднего класса — затея почти бессмысленная. Карты с 12 и менее гигабайтами видеопамяти стоит рассматривать лишь как ознакомительный вариант. Если в планах активное использование сервиса и не примитивные запросы, когда ИИ просто выполняет роль поисковика на максималках, понадобится максимально мощная видеокарта с большим набором видеопамяти. Здесь правило «больше — лучше», работает безотказно.

По этой причине в нашем ассортименте ИИ-серверов просто нет решений на средних и младших картах — это нерационально. К примеру, одна RTX 4090 обеспечивает производительность пары RTX 4070 Ti, а одна карта в эксплуатации и настройке всегда проще. RTX 5080 (с натяжкой), RTX 4090, RTX 5090 и профессиональные RTX 6000 Ada — вот правильный выбор.

В завершение ещё раз напомним, что TensorRT-LLM в Windows может задействовать только одну видеокарту. Лучше сразу знакомьтесь c Linux и смотрите в сторону GPU-серверов в Rack-формате. Иначе масштабировать систему в будущем будет крайне проблематично.