LLM Inference with TGI: Reduce Latency and Save VRAM

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1All 1566 services
LLM Inference with TGI: Reduce Latency and Save VRAM
Medium
~3-5 days
Frequently Asked Questions

AI Development Areas

AI Solution Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1317
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1226
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    925
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1156
  • image_logo-advance_0.webp
    B2B Advance company logo design
    620
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    894

Problem: LLM inference with unpredictable latency and high memory consumption

When deploying LLM inference in production, latency jumps from 200 ms to 5 seconds, GPU memory overflows under peak load, and each new request requires restarting the pipeline. Teams spend weeks tuning inference, yet the result remains unstable. Text Generation Inference (TGI) from HuggingFace solves these problems at the production-server level: it is written in Rust and Python, natively integrated with HuggingFace Hub, and supports advanced techniques—continuous batching, Flash Attention 2, tensor parallelism, and speculative decoding.

How TGI reduces latency and boosts throughput

TGI uses continuous batching (in-flight batching): new requests are added to the active batch without waiting for previous ones to finish. This achieves GPU utilization above 95% and reduces average queue wait time. Flash Attention 2 provides O(n) memory instead of O(n²)—critical for long contexts. In practice, we achieved p99 latency under 300 ms for Llama-3-8B with 100 concurrent requests. Adopting TGI pays off by cutting GPU infrastructure costs up to 60%.

Why TGI over a custom implementation?

Custom inference requires manual memory management, batching, and parallelization. TGI provides a production-ready server with continuous batching, tensor parallelism, and quantization built-in. This lowers the barrier: Docker images deploy in minutes. The trade-off in flexibility is offset by stability and reduced debugging time—for instance, speculative decoding accelerates generation by 20–30% without model changes.

Quick start

# Docker (recommended)
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
# Client via official package
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)

Key TGI capabilities

  • Continuous batching (in-flight batching): new requests join the batch during ongoing generation.
  • Flash Attention 2: efficient self‑attention with O(n) memory vs O(n²).
  • Tensor Parallelism: distribute model across multiple GPUs via --num-shard.
  • Speculative Decoding: via --speculate N—draft model generates N tokens, target verifies.
  • Quantization: built‑in support for GPTQ, AWQ, EETQ, BitsAndBytes for LLM quantization.

Configuration for different scenarios

Scenario Model num_shard max_input_length max_total_tokens max_batch_prefill_tokens Additional
Maximum throughput Mixtral-8x7B 2 8192 16384 131072 --max-waiting-tokens 20, --dtype bfloat16
Minimum latency Llama-3-8B 1 2048 4096 4096 --max-concurrent-requests 32, --waiting-served-ratio 1.2
VRAM saving Llama-2-13B (AWQ) 1 2048 4096 4096 --quantize awq, --dtype float16

Custom Handlers

TGI allows adding preprocessing/postprocessing via a custom handler:

# custom_handler.py
class CustomHandler:
    def __init__(self):
        self.tokenizer = AutoTokenizer.from_pretrained(...)

    def preprocess(self, inputs: dict) -> dict:
        """Transform incoming request before 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:
        """Post-process model output."""
        generated = model_output["generated_text"]
        return {"generated_text": generated.split("<|assistant|>")[-1].strip()}

Monitoring and metrics

TGI exports Prometheus metrics at /metrics:

tgi_request_duration_seconds_bucket  # latency histogram
tgi_batch_inference_duration_seconds  # batch inference time
tgi_request_input_length              # input lengths
tgi_request_generated_tokens          # generated token lengths
tgi_batch_current_size                # current batch size
tgi_queue_size                        # queue size

Which to choose: TGI or vLLM?

Parameter TGI vLLM
HF Hub integration Native Via HF
Performance Similar Slightly higher on NVIDIA
Custom backend Limited More flexible
Docker image Ready-made Needs building
Streaming SSE out of the box Yes
Documentation Excellent Good

For most use cases, both offer similar performance. TGI is more convenient when operating in the HF ecosystem.

Process and what’s included

We offer turnkey TGI implementation. Stages:

  1. Infrastructure audit—we assess load, latency, VRAM usage, and existing pipeline.
  2. Configuration selection—we choose the model, quantization (INT4 vs FP16), number of shards, and continuous batching parameters.
  3. Deployment—we configure the Docker image, integrate with your API, and set up monitoring via Prometheus + Grafana.
  4. Optimization—we tune p99 latency, throughput, and memory footprint. We use speculative decoding to accelerate generation by 20–30%.
  5. Documentation and training—we deliver operation instructions, configuration templates, and dashboards. We conduct a workshop for your team.

Estimated implementation time: 2 to 4 weeks depending on infrastructure complexity.

Results and guarantees

Our MLOps engineers have 5+ years of experience in MLOps and have completed over 20 LLM inference projects for chatbots, RAG systems, and assistants. We guarantee stable operation—average uptime 99.9% after deployment. Specific metrics: p99 latency reduction of 30%, VRAM savings up to 50% on 7B models with INT4 quantization. This translates to GPU-hour cost reductions—in some projects savings reach 60%. Get a consultation on TGI setup—we’ll recommend the best configuration for your case. Contact us for a project assessment.