LLM-інференс з TGI: знижуємо latency та економимо VRAM
Проблема: інференс мовних моделей (LLM) з непередбачуваними затримками та високим споживанням пам'яті
При розгортанні інференсу мовних моделей (LLM) у production latency скаче від 200 мс до 5 секунд, GPU пам'ять переповнюється при пікових навантаженнях, а кожен новий запит вимагає перезапуску пайплайну. Команди витрачають тижні на налаштування інференсу, результат все одно нестабільний. Text Generation Inference (TGI) від HuggingFace вирішує ці проблеми на рівні production-сервера: він написаний на Rust та Python, нативно інтегрований з HuggingFace Hub і підтримує передові техніки — continuous batching, Flash Attention 2, tensor parallelism та speculative decoding.
Як TGI знижує latency та підвищує throughput?
TGI використовує continuous batching (in-flight batching): нові запити додаються в активний батч, не чекаючи завершення попередніх. Це дозволяє утилізувати GPU на 95%+ і скоротити середній час очікування в черзі. Flash Attention 2 дає O(n) пам'ять замість O(n²) — критично для довгих контекстів. Ми на практиці досягали latency p99 менше 300 мс для Llama-3-8B при 100 конкурентних запитах. Впровадження TGI окупається за рахунок зниження витрат на GPU-інфраструктуру до 60%.
Чому TGI краще за самостійну реалізацію?
Самописний інференс вимагає ручного управління пам'яттю, батчуванням та розпаралелюванням. TGI надає production-готовий сервер з continuous batching, підтримкою tensor parallelism та квантизацією з коробки. Це знижує поріг входу: Docker-образ розгортається за хвилини. Втрати в гнучкості компенсуються стабільністю та скороченням часу на налагодження: наприклад, speculative decoding прискорює генерацію на 20-30% без зміни моделі.
Швидкий старт
# Docker (рекомендується) docker run --gpus all \ -p 8080:80 \ -v /data/models:/data \ ghcr.io/huggingface/text-generation-inference:2.1 \ --model-id meta-llama/Llama-3-8b-instruct \ --max-input-length 4096 \ --max-total-tokens 8192 \ --max-batch-prefill-tokens 32768 \ --num-shard 1 \ --dtype bfloat16 \ --huggingface-hub-token $HF_TOKEN # Клієнт через офіційний пакет from huggingface_hub import InferenceClient client = InferenceClient(model="http://localhost:8080") response = client.text_generation( prompt="Explain transformer attention in simple terms", max_new_tokens=512, temperature=0.7, repetition_penalty=1.1, stream=False ) # Streaming for token in client.text_generation(prompt, stream=True): print(token, end="", flush=True) Ключові можливості TGI
- Continuous batching (in-flight batching): нові запити додаються в батч під час генерації попередніх.
- Flash Attention 2: ефективна реалізація self-attention з O(n) пам'яттю замість O(n²).
- Tensor Parallelism: розподіл моделі на кілька GPU через
--num-shard. - Speculative Decoding: через
--speculate N— draft модель генерує N токенів, target верифікує. - Quantization: підтримка GPTQ, AWQ, EETQ, BitsAndBytes з коробки для квантизації LLM.
Конфігурація для різних сценаріїв
| Сценарій | Модель | num_shard | max_input_length | max_total_tokens | max_batch_prefill_tokens | Додатково |
|---|---|---|---|---|---|---|
| Максимальний throughput | Mixtral-8x7B | 2 | 8192 | 16384 | 131072 | --max-waiting-tokens 20, --dtype bfloat16 |
| Мінімальна latency | Llama-3-8B | 1 | 2048 | 4096 | 4096 | --max-concurrent-requests 32, --waiting-served-ratio 1.2 |
| Економія VRAM | Llama-2-13B (AWQ) | 1 | 2048 | 4096 | 4096 | --quantize awq, --dtype float16 |
Custom Handlers
TGI дозволяє додати preprocessing/postprocessing через custom handler:
# custom_handler.py class CustomHandler: def __init__(self): self.tokenizer = AutoTokenizer.from_pretrained(...) def preprocess(self, inputs: dict) -> dict: """Перетворення вхідного запиту перед inference.""" prompt = inputs.get("inputs", "") full_prompt = f"<|system|>You are a helpful assistant.<|end|>\n<|user|>{prompt}<|end|>\n<|assistant|>" return {"inputs": full_prompt, **{k: v for k, v in inputs.items() if k != "inputs"}} def postprocess(self, model_output: dict) -> dict: """Постобробка виводу моделі.""" generated = model_output["generated_text"] return {"generated_text": generated.split("<|assistant|>")[-1].strip()} Моніторинг та метрики
TGI експортує Prometheus метрики на /metrics:
tgi_request_duration_seconds_bucket # latency histogram tgi_batch_inference_duration_seconds # batch inference time tgi_request_input_length # довжини входів tgi_request_generated_tokens # довжини згенерованих токенів tgi_batch_current_size # поточний розмір батча tgi_queue_size # розмір черги очікування Що вибрати: TGI чи vLLM?
| Параметр | TGI | vLLM |
|---|---|---|
| Інтеграція з HF Hub | Нативна | Через HF |
| Продуктивність | Схожа | Трохи вища на NVIDIA |
| Custom backend | Обмежений | Більш гнучкий |
| Docker образ | Готовий | Потрібно збирати |
| Streaming | SSE з коробки | Так |
| Документація | Відмінна | Хороша |
Для більшості use cases обидва варіанти дають близьку продуктивність. TGI зручніший при роботі в HF екосистемі.
Процес роботи та що входить
Ми пропонуємо впровадження TGI під ключ. Етапи:
- Аудит поточної інфраструктури — оцінюємо навантаження, затримки, обсяг VRAM та існуючий пайплайн.
- Вибір конфігурації — підбираємо модель, квантизацію (INT4 проти FP16), кількість шардів та параметри continuous batching.
- Розгортання — налаштовуємо Docker-образ, інтегруємо з вашим API, підключаємо моніторинг через Prometheus + Grafana.
- Оптимізація — тюнимо latency p99, throughput, memory footprint. Використовуємо speculative decoding для прискорення на 20-30%.
- Документація та навчання — передаємо інструкції з експлуатації, конфігураційні шаблони, дашборди. Проводимо workshop для вашої команди.
Орієнтовні терміни впровадження — від 2 до 4 тижнів залежно від складності інфраструктури.
Результати та гарантії
Наші MLOps-інженери мають 5+ років досвіду в MLOps, реалізували понад 20 проєктів з інференсу LLM для чат-ботів, RAG-систем та асистентів. Гарантуємо стабільність роботи — середній uptime 99.9% після впровадження. Конкретні цифри: зниження latency p99 на 30%, економія VRAM до 50% на моделях 7B при використанні INT4 квантизації. Це дозволяє скоротити витрати на GPU-години — в деяких проєктах економія сягає 60%. Отримайте консультацію з налаштування TGI — підкажемо, яка конфігурація підійде саме вам. Зв'яжіться з нами для оцінки вашого проєкту.







