Турбо пуњење модела Llama 2 70B са NVIDIA H100
Пут убрзане LLM инференције

Потрага за перформансама у Perplexity-јевом машином за одговоре подстиче нас да усвојимо најновију технологију коју NVIDIA и AWS нуде. У овом блогу са задовољством делимо резултате наших најновијих експеримената: поређење инференције модела Llama 2 70B кроз различите хардверске и софтверске поставке.
Наша платформа за LLM инференцију, pplx-api, изграђена је на врхунском стек-у који покрећу библиотека отвореног кода. У време од када је почела јавна бета верзија за pplx-api у октобру, суочавамо се са изазовима скалирања и учимо како најбоље да подесимо нашу конфигурацију како бисмо постигли масовно скалирање. Ово нас је навело да покренемо експерименте са сљедећим водећим питањима:
Који је сирови добитак у перформансама од преласка наших GPU-ова са NVIDIA A100 на NVIDIA H100, при чему све остале поставке остају исте?
Који је добитак у ефикасности квантизације са 8-битним покретним запетама (fp8), за коју H100 додаје матерну подршку? Колика је цена тачности ове квантизације?
Како тензорски паралелизам и величина серије утичу на кашњење и проток токена?
Узимајући у обзир горе наведено, која конфигурација резултира најскалабилнијом равнотежом перформанси и исплативости?
Експериментална поставка
Извели смо сљедећи експеримент као серију локалних референтних тестова да бисмо избегли мрежно кашњење.
Кључне метрике:
Кашњење: Укупно време које је серверу за инференцију потребно да генерише свој пуни одговор.
Проток: Број излазних токена, по секунди, по GPU-у, које сервер за инференцију може да генерише за све кориснике и захтеве.
Константе:
Сљедећи фактори би утицали на кључне метрике, па смо их одржали доследним кроз различите покушаје експеримента.
AI модел
Перформансе се скалирају са величином LLM-а. Више параметара захтева више прорачуна што резултира споријом инференцијом. На пример, Llama 2 13B је бржа од Llama 2 70B када су остале поставке једнаке. Држимо се Llama 2 70B у овом експерименту зато што желимо да оптимизујемо опслуживање најспособнијих модела отвореног кода.
Скуп података улазних/излазних токена
Количина улазних и излазних токена у сваком узорку захтева/одговора може утицати на мерења перформанси. Генерално, генерисање излазних токена доминира укупним временом одговора. Када узорковање података само подстиче одговоре „да/не“ од LLM-а, тада је одговор бржи у поређењу са узорцима који траже од LLM-а да пише есеје. Наш скуп података се састоји од синтетичких захтева са 1024 улазна токена који подстичу 512 излазних токена. Ова дистрибуција је изабрана да одговара уоченој дистрибуцији саобраћаја на нашој јавној имплементацији Llama 2 70B.
Верзија софтвера
NVIDIA TensorRT-LLM (издање v0.5.0) је библиотека отвореног кода за оптимизацију LLM инференције. Издата крајем 2023. године, она синтетише многе NVIDIA оптимизације инференције и пружа флексибилан слој прилагођавања за кључне параметре овог експеримента: величину серије, квантизацију и тензорски паралелизам.
Варијабле
Експериментисали смо кроз 4 осе конфигурације: тензорски паралелизам, GPU архитектуру, квантизацију и максималну величину серије. Ове осе су међусобно повезане јер свака представља компромис у односу на критични ресурс у грлу – GPU меморију.
GPU архитектура
Архитектура GPU-а Hopper девете генерације (H100-HBM3-80GB / p5.48xlarge) садржи огромну листу функција у односу на свог претходника, Ampere (A100-SXM4-80GB / p4de.24xlarge), укључујући 2x-6x брзине прорачуна и скоро 2x пропусни опсег GPU меморије. Пропусни опсег GPU меморије је критична метрика за инференцију јер примарно уски грло кашњења матричних множења инференције долази од учитавања гигабајта података модела из GPU меморије у регистре за израчунавање. На основу ових статистика, хипотетисали смо да ће поређење „јабука-са-јабука“ између NVIDIA H100 и A100 показати побољшање од 2 пута и у кашњењу и у пропусној моћи.
Још једна кључна разлика између NVIDIA H100 и A100 је у томе што H100 тензорско језгро матерно додаје подршку за инструкције са 8-битним покретним запетама (fp8), што отвара врата за даље оптимизације детаљно описане испод. Због тога користимо fp8 и fp16 посебно за H100.
Да бисмо одржали меморију по GPU-у константном у овом експерименту, држали смо се чворова са 8x80GB GPU меморије и за наше NVIDIA A100 и за H100. Поред омогућавања већих величина серија, GPU меморија је важна зато што се параметри модела учитавају у GPU меморију током покретања сервера ради брзог приступа. На пример, ако је сваки од 70 милијарди параметара у нашем моделу 16-битни број са покретном запетом, онда је модел величине око 140GB, што не стаје на један GPU. Одатле потиче потреба за тензорским паралелизмом, који објашњавамо испод.
Тензорски паралелизам
Тензорски паралелизам се односи на број GPU уређаја који се троше за покретање сервера за инференцију. Када доделимо одређени број GPU-ова, TensorRT-LLM удружује њихове ресурсе како би нам помогао да достигнемо минимални захтевани буџет меморије за покретање Llama 2 70B. Наша хипотеза је да ће мањи тензорски паралелизам резултирати већим кашњењем (због мање потрошених ресурса за задовољење сваке серије), али већом пропутном моћи по GPU-у (због боље искоришћености) у поређењу са већим тензорским паралелизмом.
Квантизација
Квантизација је смањење прецизности у тежинама и активацијама које користе неуронске мреже. Ову технику користимо да преполовимо потрошњу GPU меморије када прелазимо са fp16 на fp8. Ово омогућава покретање истог модела са мањом укупном употребом GPU меморије, омогућавајући мањи тензорски паралелизам, што повећава пропутоу моћ.
Имплементације квантизације имају потенцијал да деградирају тачност. Стога смо оценили тачност за различите прецизности упоређујући њихову статистику перплексије, меру колико добро LLM предвиђа сваки следећи токен у реченици, на WikiText корпусу. За 8-битну покретну запету и 8-битну тежину са 8-битном активацијом и SmoothQuant (w8a8 SQ), није било значајне промене у перплексији (< 1%) у поређењу са fp16 на WikiText-у, тако да смо се осећали сигурно да наставимо. Међутим, w4a16 је показао значајну промену od 7% у перплексији, што се потенцијално може приписати још мањој прецизности и неопходним динамичким конверзијама између int4 и fp16.
Величина серије
Паралелизам путем серија је класична стратегија за извлачење перформанси из система ограниченог ресурсима. Обрадом више захтева у сваком пролазу напред кроз неуронску мрежу, познато је да серије повећавају пропутоу моћ по цену одређеног кашњења. Серије такође изазивају већу потрошњу GPU меморије јер величина KV кеша који управља механизмом пажње расте линеарно са величином серије.
У случају модела Llama 2 70B (који има 80 слојева), fp16 са величином серије 32 за величину контекста 4096, величина KV кеша износи значајних 40 GB. Ово на крају спречава Llama 2 70B fp16, чије тежине саме по себи заузимају 140GB, да се удобно уклопи у 160GB GPU меморије која је доступна на тензорском паралелизму 2 (TP-2).
Резултати
Прошли смо кроз компатибилне комбинације 4 варијабле експеримента и представљамо најинформативније трендове у наставку.
Побољшање кашњења квантизације је око 10% када се упореде H100 fp16 → fp8 и A100 fp16 → w8a8 са SmoothQuant. Међутим, мешовита прецизност w4a16 заправо има боље перформансе при малим величинама серија и лошије при већим величинама серија у поређењу са fp16. Ово може бити због низа фактора, укључујући мање оптимизована језгра за израчунавање, време кастовања између int4 и fp16, и чињеницу да w4a16 и даље користи 16-битне покретне запете за активације, што резултира без уштеда у димензијама KV кеша. Пошто је w4a16 такође показао мању тачност, закључујемо да треба да се држимо w8a8 SQ за A100 и fp8 за H100.
У нашој првој слици представљамо само конфигурације TP-8. H100 постиже кашњење од 54% и пропустљивост од 184% у поређењу са A100 када оба користе fp16 / BS-128 / TP-8, што се побољшава на кашњење од 49% и пропустљивост од 202% када се користи fp8 на H100. Ово побољшање перформанси може се приписати повећању рачунарске снаге и пропусног опсега меморије између H100 и A100. Треба напоменути да је разлика мање изражена под мањим величинама серија где искоришћеност може бити мања.
Како градимо нашу платформу, желимо да испоштујемо одређене захтеве за кашњењем за наше кориснике уз максимизирање пропусне моћи. Стога, уместо да поредимо A100 насупрот H100 при истој величини серије, за нас заправо има више смисла да поредимо њихову пропустну моћ само под конфигурацијама где оне задовољавају захтев за кашњењем. Поставили смо границу на 25600ms кашњења за завршетак 512 излазних токена и утврдили да H100 / TP-8 / fp8 / BS-128 даје 251% пропусне моћи у поређењу са A100 / TP-8 / fp16 / BS-64, пошто је у стању да обради двоструку величину серије уз мање кашњење. С обзиром на то да квантизација обезбеђује уштеду GPU меморије, сада морамо да оценимо како тензорски паралелизам може додати следећи слој оптимизације.
Када је реч о квантизацији и архитектури, постоје јасни победници: H100 доминира над A100, а квантизација смањене прецизности побољшава искоришћеност меморије, кашњење и пропустљивост. Међутим, величина серије и тензорски паралелизам представљају компромис у нашим кључним метрикама. Већа величина серије оптимизује пропустљивост по цену повећаног кашњења и потрошње меморије. Са друге стране, већи тензорски паралелизам повећава укупан скуп доступне меморије и оптимизује кашњење, али се компромитује са пропустљивошћу због трошкова синхронизације дистрибуираног матричног множења и захватањем више GPU ресурса.
Конфигурација нашег експеримента која максимизира пропустљивост је H100 / fp8 / TP-2 / BS-128, са 767 излазних токена у секунди по GPU-у. Ово је побољшање од 460% у односу на A100 / fp16 / TP-8 / BS-64. Међутим, оно долази по цену удвострученог кашњења - ближе 42000ms за 512 излазних токена - тако да можда није прикладно као производна конфигурација. Резултати за TP-4 BS-128 (626 tok/sec/gpu при времену одговора од 26188ms) и TP-2 BS-32 (435 tok/sec/gpu при времену одговора од 18821ms) могу представљати боље компромисе на нашим кључним метрикама.
Закључак
Наши резултати показују да:
Достижемо кашњење од 54% и пропустљивост од 184% користећи H100 у поређењу са A100 за исту конфигурацију, што се побољшава на 49% и 202% респективно када H100 искористи своју матерну подршку за fp8.
При максимизирању пропустљивости под ограничењем кашњења, H100 / fp8 / TP-8 / BS-128 даје 251% пропустљивости у поређењу са A100 / fp16 / TP-8 / BS-64, пошто може да обради двоструку серију већом брзином.
Коришћењем предности H100 са TP-2 са fp8, можемо постићи 373% пропустљивости модела A100 / fp16 / TP-8 / BS-128, уз повећање кашњења мање од 10%.
Величина серије и тензорски паралелизам представљају компромис између пропустљивости и кашњења за оператера система за LLM инференцију.
Ови резултати чине да се осећамо самоуверено у погледу потпуног преласка на H100 GPU-ове у нашем хардверском стеку који је претходно покретао A100. Узбуђени смо што можемо да потврдимо перформансе које рекламира NVIDIA и радо се радујемо њиховим следећим пробојима у убрзаном хардверу.
Шта је следеће
Наша следећа граница за оптимизацију је испитивање тачности и утицаја перформанси структуриране реткости и int4 прецизности, што би могло значајно да смањи отисак GPU меморије модела Llama 2 70B и донесе побољшања кашњења до 2 пута. Узбуђени смо што настављамо пут ултра брзе инференције и надамо се да ћемо омогућити нашим корисницима да изграде моћне апликације на врху наше платформе.
У блиској будућности, pplx-api ће укинути ограничења стопе и понудити више прилагођених Perplexity LLM-ова, укључујући LLM са интернетом са утемељењем за чињенице.
Пријавите се за Perplexity Pro на perplexity.ai/pro. Добијте приступ нашем врхунском pplx-api-ју и искористите ове напредне могућности у својим пројектима. Сазнајте више о pplx-api-ју на нашем блогу.
Заинтересовани сте да обликујете будућност вештачке интелигенције? Запошљавамо! Будите део тима који покреће инфраструктуру генеративних LLM-ова масовних размера. Истражите могућности на Perplexity каријерама.
Аутори:
Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats