Поява генеративного штучного інтелекту (GenAI) трансформувала галузі - від обробки природної мови до створення креативного контенту. Однак ефективне розгортання цих потужних моделей у великих масштабах залишається складним завданням.
Механізми виведення відіграють важливу роль в оптимізації продуктивності, зменшенні затримок і максимальному використанні ресурсів. У цій статті ми розглянемо чотири провідні рішення: TensorRT-LLM, vLLM, Hugging Face TGI та LMDeploy.
Кожен з них має унікальні переваги: апаратне прискорення точності від NVIDIA, інноваційне керування пам'яттю від vLLM, готова до виробництва екосистема від TGI або орієнтація на швидкість і простоту від LMDeploy. Приєднуйтесь до нас, ми порівняємо ці движки, щоб допомогти вам знайти ідеальний варіант для ваших робочих навантажень GenAI.
TensorRT-LLM - це рішення NVIDIA для швидкої та плавної роботи великих мовних моделей. Побудований на фреймворку TensorRT, він створений для того, щоб витиснути з графічних процесорів NVIDIA кожну краплю продуктивності. Це досягається завдяки таким трюкам, як злиття шарів, налаштування точності (FP16, INT8, FP8...) та оптимізація ядра, яка скорочує час обчислень, не порушуючи точності моделі.
Справа не лише у швидкості. TensorRT-LLM ефективно працює з великими моделями, розумно керуючи пам'яттю, щоб не допустити збоїв під час виконання. Він також підтримує динамічну пакетну обробку, дозволяючи вам обробляти кілька запитів одночасно, не вичерпуючи пам'ять. Якщо ви вже використовуєте обладнання NVIDIA, це не проблема, оскільки він тісно пов'язаний з їх екосистемою, наприклад, CUDA та cuDNN, і навіть інтегрується з Triton Inference Server від NVIDIA та NVIDIA Dynamo.
Тим не менш, вона не ідеальна для всіх. Налаштування може стати проблемою, якщо ви не знайомі з інструментами NVIDIA, і воно менш гнучке, якщо ви використовуєте не NVIDIA обладнання. Проте, з точки зору потужності та оптимізації на графічних процесорах NVIDIA, його важко перевершити.
vLLM дуже добре справляється з великими обсягами завдань виведення. Це проект з відкритим вихідним кодом, який блищить, коли вам потрібна висока пропускна здатність без уповільнення. Секретний соус - PagedAttention, трюк, який керує пам'яттю набагато краще, ніж більшість. Замість того, щоб завантажувати все одразу і з'їдати оперативну пам'ять, він розбиває кеш ключ-значення на частини, захоплюючи тільки те, що потрібно. Менше відходів, більше швидкості.
Він також дуже гнучкий. Працює з популярними моделями, такими як LLaMA або Mistral, прямо з коробки, і підтримує багато апаратних засобів, включаючи графічні процесори NVIDIA або AMD. Ви також отримуєте динамічні пакети для ефективного групування запитів, забезпечуючи безперебійну роботу конвеєра. Налаштування досить просте, якщо ви звикли до Python та PyTorch.
Основним обмеженням vLLM є його відносна незрілість на ринку, що означає, що він ще не може запропонувати повний набір функцій, доступний у більш усталених рішеннях. Однак для організацій, які шукають ефективне рішення, що забезпечує високопродуктивний висновок, vLLM є чудовим вибором.
Hugging Face TGI (Text Generation Inference) створений для тих, хто хоче запустити моделі без головного болю. Це інструмент, створений командою Hugging Face, тому він чудово поєднується з їхньою величезною бібліотекою попередньо навчених моделей - BERT, GPT тощо. Він розроблений для реального використання, наприклад, для чат-ботів або додатків, де генерація тексту повинна працювати швидко і без збоїв.
TGI справляється з важкою роботою завдяки таким функціям, як безперервна пакетна обробка, яка тримає систему зайнятою, підміняючи нові запити, коли старі закінчуються. Він підтримує прискорення графічного процесора і може масштабуватися, якщо у вас є відповідне обладнання. Крім того, він має вбудовану систему безпеки, наприклад, фільтрацію поганих результатів, що дуже зручно для виробництва. Ви можете розгорнути його за допомогою Docker за кілька кроків, тому його відносно легко налаштувати.
У чому підступ? Він прив'язаний до екосистеми Hugging Face, тому, якщо ви ще не в цьому світі, він може здатися вам обмежувальним. Тим не менш, для готового до використання варіанту plug-and-play, TGI - чудовий вибір.
LMDeploy - це набір інструментів від команд MMRazor та MMDeploy, створений для стиснення, розгортання та запуску великих мовних моделей без зайвого клопоту. Що робить його особливим? Він має чудову швидкість декодування - до 1.8 разів більше запитів на секунду, ніж vLLM на графічному процесорі A100. Це стало можливим завдяки таким трюкам, як постійна пакетна обробка, блоковане кешування KV та спритні ядра CUDA, які не дають графічному процесору перевантажуватись.
Він має два двигуни: TurboMind для максимальної продуктивності та PyTorch для полегшення роботи. TurboMind є зіркою - він виконує 4-бітовий висновок у 2.4 рази швидше, ніж FP16, і з легкістю справляється з великими моделями, такими як Llama-2 70B. Ви також можете квантувати ваги та кеш KV для економії пам'яті без шкоди для точності. Розгортання також є легким - одна команда встановлює сервер на декількох машинах, якщо вам це потрібно. Крім того, він запам'ятовує історію чату в багатораундових переговорах, щоб не витрачати час на переробку старої роботи.
Недоліки? TurboMind вибагливий - він поки що не дуже добре працює з моделями, що потребують уваги, такими як Mistral, з розсувними вікнами. І якщо ви не використовуєте графічні процесори NVIDIA, ви застрягнете з повільнішим рушієм PyTorch. Проте, для швидкості та простоти на правильному обладнанні, LMDeploy є чудовим вибором.
Давайте розберемо, як ці движки оцінюють затримку (як швидко виконується один запит), пропускну здатність (скільки запитів вони можуть обробити) і масштабованість (наскільки добре вони справляються з великими навантаженнями або більшою кількістю обладнання).
TensorRT-LLM демонструє відмінні показники затримки, якщо у вас є графічні процесори NVIDIA. Він добре оптимізований для обладнання NVIDIA, тому одиночні запити виконуються швидко: менше 50 мс для більшості моделей на A100. Пропускна здатність також відмінна, особливо при динамічній пакетній обробці. Бенчмарки BentoML показують, що цей движок досягає 700 токенів в секунду при 100 одночасних користувачах для Llama 3 70B Q4 на графічному процесорі A100 з 80 ГБ. TensorRT-LLM добре працює в сценаріях з довгими вхідними даними і високою частотою запитів, пропонуючи хорошу пропускну здатність. Масштабованість на декількох графічних процесорах підтримується з коробки з відмінною продуктивністю.
vLLM також має хорошу пропускну здатність, особливо у важких для декодування робочих навантаженнях, з високою пропускною здатністю і низькою затримкою після нещодавніх оновлень. Бенчмарки BentoML показують, що цей рушій досягає 600-650 токенів на секунду при 100 одночасних користувачах для Llama 3 70B Q4 на графічному процесорі A100 80 ГБ. Затримка хороша, але не така хороша, як у TensorRT-LLM: близько 60-80 мс для одиночних запусків. Він добре масштабується на різних графічних процесорах, навіть змішуючи бренди, але він менш відшліфований для величезних установок.
Hugging Face TGI працює подібно до vLLM, забезпечуючи баланс продуктивності та простоти використання. Затримка пристойна: 50-70 мс на хорошому графічному процесорі. Бенчмарки BentoML показують, що цей движок досягає 600-650 токенів в секунду при 100 одночасних користувачах для Llama 3 70B Q4 на графічному процесорі A100 80GB. Його створено для масштабування для виробництва, тому він безперебійно працює з більшою кількістю користувачів або машин, особливо з Docker.
LMDeploy виграє за швидкістю декодування. Він перевершує за швидкістю генерації токенів, особливо для невеликих моделей, і має низький час до першого токена (TTFT) для квантованих великих моделей. Затримка низька: 40-60 мс. І пропускна здатність відмінна. Бенчмарки BentoML показують, що цей движок досягає 700 токенів в секунду при 100 одночасних користувачах для Llama 3 70B Q4 на графічному процесорі A100 80GB. Масштабування легко здійснюється за допомогою налаштування сервера, але для досягнення найкращих результатів він сильно покладається на графічні процесори NVIDIA; режим PyTorch відстає.
Підсумок: TensorRT-LLM і LMDeploy лідирують за швидкістю роботи. Ваш вибір залежить від вашого обладнання та кількості запитів, які ви обробляєте.
Квантифікація знижує точність моделі, зменшуючи використання пам'яті та пришвидшуючи висновок, що важливо для середовищ з обмеженими ресурсами. Ось як працює кожен рушій:
TensorRT-LLM підтримує FP8, FP4, INT4 з квантуванням ваги з урахуванням активації (AWQ) та INT8 зі SmoothQuant, пропонуючи надійні можливості для оптимізації продуктивності NVIDIA GPU.
vLLM забезпечує гнучкість завдяки GPTQ, AWQ, INT4, INT8 і FP8, адаптуючись до різних апаратних засобів і вимог до точності.
Hugging Face TGI інтегрує біти і байти для 8-розрядного і 4-розрядного квантування і GPT-Q для квантування тільки за вагою, що підходить для виробничих розгортань.
LMDeploy пропонує 4-бітну AWQ, 8-бітне квантування та онлайн квантування кешу INT8/INT4 KV, що підвищує ефективність для великих моделей на обмеженому обладнанні.
Апаратна підтримка визначає, де ви можете розгорнути ці рушії, впливаючи на масштабованість і продуктивність:
TensorRT-LLM є ексклюзивною розробкою NVIDIA CUDA, що використовує графічні прискорювачі для високої продуктивності.
vLLM підтримує NVIDIA CUDA, AMD ROCm, AWS Neuron і CPU, пропонуючи широку сумісність для різних конфігурацій.
Hugging Face TGI працює з NVIDIA CUDA, AMD ROCm, Intel Gaudi та AWS Inferentia, забезпечуючи гнучкість для різних апаратних середовищ.
LMDeploy оптимізовано для NVIDIA CUDA, що забезпечує максимальну продуктивність на графічних процесорах NVIDIA, але з обмеженою підтримкою інших платформ.
Процес налаштування та інтеграції може вплинути на терміни розробки. Ось як це відбувається з кожним движком:
TensorRT-LLM вимагає перетворення контрольних точок, створення рушія TensorRT і налаштування параметрів, що робить його складним і трудомістким для інженерів.
vLLM є зручним у використанні завдяки вичерпній документації, простоті встановлення та безшовній інтеграції з бібліотекою Python.
Hugging Face TGI користується перевагами екосистеми Hugging Face, пропонуючи попередньо зібрані образи Docker та ретельну документацію для швидкого розгортання.
LMDeploy має просте налаштування за допомогою однієї команди для запуску сервера та API Python для налаштування, поєднуючи простоту з гнучкістю.
Вибір правильного рушія залежить від вашого сценарію використання, апаратного забезпечення та навичок.
TensorRT-LLM - це ваш основний рушій виведення, якщо ви запускаєте великі моделі на графічних процесорах NVIDIA і вам потрібна кожна унція швидкості (подумайте про додатки з низькою затримкою, такі як чат-боти в реальному часі або асистенти ШІ, де відповіді повинні генеруватися за мілісекунди). Це ідеальний варіант для компаній, які вже занурені у світ NVIDIA, але це може бути надмірністю, якщо ви прагнете простоти.
vLLM - це чудовий компроміс між швидкістю та простотою. Він дуже добре працює для стартапів або дослідників, які хочуть щось гнучке і швидке в налаштуванні.
Hugging Face TGI еквівалентний vLLM за швидкістю та простотою. Він легко розгортається, плавно масштабується і прив'язується до модельного хабу Hugging Face, тому ідеально підходить для команд, яким потрібне рішення без зайвого клопоту.
LMDeploy, як і TensorRT-LLM, вирізняється високою продуктивністю. Він підходить користувачам з графічними процесорами NVIDIA, яким потрібне просте налаштування та висока продуктивність, але він менш зручний, якщо ваші моделі не сумісні з TurboMind.
Якщо ви не можете або не хочете розгортати власну модель GenAI самостійно, ви можете скористатися NLP Cloud і використовувати швидкі генеративні моделі ШІ в масштабах виробництва. Спробуйте швидкий висновок в NLP Cloud прямо зараз!
Якщо у вас є питання про механізми виведення в цілому, будь ласка, не соромтеся запитувати нас, ми завжди раді допомогти!
Julien
Технічний директор NLP Cloud