vLLM in Production: Essential English Vocabulary for LLM Serving Engineers (англійською)

Освоєння англійського словника для обслуговування LLM за допомогою vLLM: PagedAttention, неперервне пакування, тензорний паралелізм, кеш KV і компроміс між пропускною здатністю і затримкою.

Розгортання великих мовних моделей у виробництві більше не є проблемою досліджень — це дисципліна системної інженерії. vLLM стала домінуючим відкритим джерелом виведення для обслуговування LLM в масштабі, і інженери, що працюють з ним, потребують точного англійського словника, щоб обговорити продуктивність, архітектуру і компроміси зі своїми командами.

Незалежно від того, приєднуєтеся ви до команди, яка вже використовує vLLM, готуєтеся до технічного інтерв’ ю або пишете документацію для вашої платформи виведення висновків, цей посібник містить необхідний вам основний словник.


Ключовий словник

PagedAttention

** PagedAttention ** є основою інноваційного управління пам’ яттю vLLM. Він зберігає кеш KV в несполучних блоках пам’яті (названих * сторінками *), подібно до того, як операційні системи управляють віртуальною пам’яттю. Це виключає фрагментацію пам’яті і дозволяє набагато більше використання GPU, ніж наївні стратегії розподілу.

“Наше використання GPU стрибнуло з 40% до 85% після того, як ми перейшли на vLLM — PagedAttention виключив марнотраття пам’яті, яке ми бачили з нашим попереднім налаштуванням обслуговування.”

К. В. Кірова (нині — КПІ)

Кеш ** KV ** зберігає проміжні ключі уваги і значення, обчислені під час фази попереднього заповнення, отже їх не потрібно перераховувати під час створення токенів. Без кешу KV, створення кожного нового токену вимагало б переобробки всього запиту з нуля.

“Кеш KV для 128k-контекстного запиту при розмірі пакета 32 споживав 18 ГБ VRAM — ми повинні були обмежити максимальну довжину контексту, щоб залишитися в межах нашого бюджету пам’яті.”

Неперервне пакування

** Неперервне пакування ** (також відоме як * планування на рівні ітерацій *) — це метод, за якого сервер виведення динамічно додає нові запити до поточної партії, коли існуючі запити завершуються, замість очікування на завершення всієї партії. Це значно покращує використання GPU, коли запити мають змінну довжину.

  • “До постійного пакетування один дуже довгий запит затримував би весь пакет. Тепер, короткі запити завершуються і виходять, в той час як довгий продовжує працювати. “*

Передзаповнення vs Декодування

Процес виведення LLM має дві окремі фази. Фаза ** prefill ** обробляє весь запит на введення одним проходженням, заповнюючи кеш KV. Фаза ** декодування ** генерує вихідні токени один за одним, з урахуванням кешованих значень попереднього заповнення. Ці фази мають дуже різні обчислювальні характеристики — префілювання обмежено обчисленням, декодування обмежено пропускною здатністю пам’яті.

  • “Ми проаналізували нашу завантаженість і виявили, що 60% часу нашого графічного процесора було витрачено на попереднє заповнення. Для нашого випадку використання, фрагментоване попереднє заповнення допомогло збалансувати затримку між короткими і довгими запитами. “*

Паралелізм тензорів

** Тензорна паралельність ** — це розподілена стратегія виведення, яка розділяє окремі шари моделі (зокрема, матриці ваги) на декілька графічних процесорів. Кожен GPU має частину кожного шару, а результати синхронізуються за допомогою операцій all-reduce. Це дозволяє ефективно обслуговувати моделі, які не вміщуються на одному GPU.

“Ми запускаємо Llama 3 70B з тензорним паралелізмом через 4 H100s — кожен GPU має приблизно 17 мільярдів параметрів і вони спілкуються через NVLink.”

Пропускна здатність проти затримки

** Пропускна здатність ** вимірює кількість токенів (або запитів) за секунду, які система обробляє для всіх одночасних користувачів. ** Затримка ** вимірює час очікування окремого користувача — зазвичай виражається як час до першого токена (TTFT) і затримка між токенами (ITL). Вищий пропускна здатність і нижча затримка часто знаходяться в напрузі: більші партії збільшують пропускну здатність, але збільшують затримку для окремих запитів.

“Наша SLA вимагає p95 TTFT нижче 500 мс, але максимізація пропускної здатності спонукає нас до більших партій, які розбивають бюджет. Ми налаштували максимальний розмір партії, щоб знайти правильний баланс.”

OpenAI-сумісний сервер

vLLM виставляє OpenAI-сумісний сервер - HTTP API, який реалізує ті ж кінцеві точки, що і OpenAI API ( /v1/completions, /v1/chat/completions ). Це означає, що будь-який клієнтський код, написаний для OpenAI API, може вказувати на самостійно розміщений екземпляр vLLM з мінімальними змінами.

  • “Ми мігрували нашу програму з OpenAI API до vLLM, змінивши один базовий URL - OpenAI-сумісний інтерфейс означав нуль змін коду програми.” *

Черга запитів

Коли використовується вся потужність GPU, вхідні запити зберігаються у черзі ** запитів ** перед тим, як їх буде заплановано на GPU. Планувальник vLLM керує цією чергою разом з активною партією. Зрозуміти глибину черги і час очікування є важливим для планування пропускної здатності.

  • “Під час пікового навантаження глибина черги запитів досягла 200 — середній час очікування у черзі становив 8 секунд. Ми додали другу репліку, щоб привести це до 1 секунди.”*

Корисні фрази

  • “Ми досягаємо нашої цілі пропускної здатності 2000 токенів за секунду, але TTFT підвищується до 900 мс під навантаженням — нам потрібно налаштувати планувальник.”
  • “Модель не вміщується на одному GPU, тому ми використовуємо тензорний паралелізм на двох вузлах з паралелізму конвеєра між ними.”
    • “Тип кешу KV вимушує викинути активні послідовності — нам потрібно або зменшити максимальну довжину контексту, або додати пам’ яті.” *
  • “Наше розгортання vLLM виставляє кінцеву точку, сумісну з OpenAI, тому решта стека не потребувала змін.”
  • “Ми проводимо профілірування передзаповнення і декодування окремо, оскільки вони мають абсолютно різні вузли — передзаповнення обмежено обчислювальною потужністю, а декодування обмежено пропускною здатністю.”

Поширені помилки

Неправильно вказати пропускну здатність і затримку

Нерідні носії іноді використовують прохідність і затримка взаємозамінно, або використовують «швидкість», щоб мати на увазі обидва. У виробничому обслуговуванні LLM це різні метрики, які часто конфліктують. Пропускна здатність — це швидкість (токенів/ секунду для всіх користувачів); затримка — це тривалість (мілісекунди на запит). Скажіть * “Наша пропускна здатність становить 1500 токенів / с, але наша затримка p99 занадто висока” *, а не * “Наша швидкість хороша, але повільна” *.

Неправильне використання « cache » як дієслова

Поширеною помилкою є твердження * « модель кешує увагу » *, коли правильним висловлюванням є * « ключі уваги і значення зберігаються в кеші KV » * або * « фаза попереднього заповнення заповнює кеш KV » *. Кеш — це іменник (структура даних); дією є * « заповнити » *, * « зберегти у » * або * « прочитати з » * кешу.

Неправильное произношение технических акронимов

** VRAM ** вимовляється як окремі літери: « V- RAM », а не « vram ». ** GPU ** — це « G- P- U », а не « gypu ». ** KV cache ** — це « K- V cache », а не « kev cache ». Використання неправильної мови на зустрічах може підірвати вашу репутацію, навіть якщо ви правильно розумієте технічні питання.


Освоєння словника vLLM дозволяє вам повністю брати участь у перегляді архітектури, ретроспективах подій і обговореннях планування обсягів. Терміни вище - особливо відмінність між prefill і decode, і напруга між пропускною здатністю і затримкою - постійно з’являються в будь-якій команді, що працює з LLM в виробництві. Як тільки ви зможете використовувати їх з точністю, ви побачите, що складні розмови щодо продуктивності стануть значно яснішими.


Пов’язані статті

Національний склад населення: Невідомий Невідомий Невідомий Невідомий Невідомий Невідомий Невідомий Невідомий Невідомий Невідомий Невідомий

Світ обслуговування великої мовної моделі (LLM) швидко розвивається, і технічний словник - * PagedAttention *, * неперервне пакетування *, * тензорний паралелізм *, * KV кеш *, і постійний танець між * пропускною здатністю * і * затримкою * - може відчувати себе неймовірно щільним. Для розробників, чия перша мова не є англійською, ця складність представляє значну перешкоду, окрім простого розуміння самих концепцій. Це не просто про знання визначення; це про ефективне спілкування в технічній команді, значний внесок в перегляд коду, і, врешті-решт, будівництво надійних і високоефективних систем.

Поширеним сценарієм є отримання коментаря на запит збирання, який описує оптимізацію керування кешом KV vLLM. Припустимо, що ви отримали такий повідомлення: « Ця зміна вводить передчасне вилучення кешу KV, що значно впливає на пропускну здатність. Нам потрібно переконатися, що достатньо контексту збережено для підтримки оптимальної продуктивності.» Без чіткого розуміння термінології, легко відчувати себе пригніченими і не впевненими у тому, як конструктивно відповісти. Формулювання – «передчасне виселення», «значно впливає на пропускну здатність» – здається майже навмисно непрозорим. Зрозуміти, що * пропускна здатність * відноситься до обсягу токенів, оброблених за секунду, а * вилучення * відноситься до вилучення даних з кешу, є критичним, але навіть тоді, вираження обґрунтованого контр- аргументу вимагає точної англійської мови.

Аналогічно, розгляньте повідомлення Slack під час сеансу усунення неполадок: « Пік затримки після збільшення розміру парти здається незвичайним; чи можете ви дослідити потенційні проблеми з конфліктом з налаштуванням тензорного паралелізму? » Сам термін * тензорний паралелізм * - розподіл обчислень по декількох GPU - може бути заплутаним, не знаючи, що це основна стратегія оптимізації для масштабування vLLM. Запитання прояснюючих питань, таких як: «Чи можете ви розібратися, як збільшений розмір партії взаємодіє з конфігурацією тензорного паралелізму?», Демонструє залученість і бажання зрозуміти, але формулювання цього питання чітко англійською вимагає більше, ніж просто перекладу слів; це вимагає розуміння спільної інженерної фрази.

Ключовим є створення словника, що ґрунтується на практичному застосуванні. Сфокусування на компромісах - визнання того, що оптимізація для однієї метрики (наприклад, затримка) часто негативно впливає на іншу (наприклад, пропускна здатність) - є надзвичайно важливим. Навчання описувати вплив змін за допомогою кількісних термінів («зменшення затримки на 15 мс») є не менш важливим. Не бійтеся просити про пояснення; просте, добре сформоване питання, що демонструє справжню цікавість, завжди буде краще, ніж спроба інтерпретувати неоднозначну мову.

# Example vLLM CLI command (illustrative)
vllm --model mistralai/Mistral-7B-Instruct-v0.1 \
    --tensor-parallelism 2 \
    --batch-size 64 \
    --continuous-batching true

Цей приклад показує використання --tensor-parallelism для налаштування розподілу по декількох GPU, і --batch-size для керування кількістю даних, оброблених в кожній партії. Зрозуміння цих прапорців є фундаментальним для обговорення характеристик продуктивності з vLLM.

Поширені запитання

Про що ця стаття "vLLM in Production: Essential English Vocabulary for LLM Serving Engineers (англійською)"?

Освоєння англійського словника для обслуговування LLM за допомогою vLLM: PagedAttention, неперервне пакування, тензорний паралелізм, кеш KV і компроміс між пропускною здатністю і затримкою.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "vLLM in Production: Essential English Vocabulary for LLM Serving Engineers (англійською)"?

Приблизно 8 min.