Menyajikan LLM di Produksi dengan Text Generation Inference (TGI)
Text Generation Inference (TGI) adalah toolkit buatan Hugging Face yang dirancang khusus untuk menyajikan large language model di balik API HTTP produksi. TGI memadukan lapisan web Rust dengan backend inferensi Python, didistribusikan sebagai image Docker siap pakai, dan menyediakan Messages API yang kompatibel dengan OpenAI sehingga klien yang sudah ada bisa dipakai dengan perubahan minimal. Tutorial ini membahas cara men-deploy TGI, menyetel launcher-nya, dan memanggilnya dari curl, klien OpenAI, serta klien Hugging Face Hub.
Apa Itu TGI
TGI adalah server inferensi yang dikelola Hugging Face dan menjadi penggerak layanan Inference Endpoints mereka. Secara arsitektur, tanggung jawabnya terbagi:
- Sebuah router/webserver Rust menangani HTTP, validasi request, keputusan batching, dan streaming token. Rust menjaga jalur penanganan request tetap cepat dan aman memori di bawah konkurensi.
- Sebuah model server Python (satu proses per shard) menjalankan forward pass model di GPU, memakai kernel attention dan batching yang teroptimasi.
Pemisahan ini membuat lapisan jaringan yang sibuk tetap ringan, sementara pekerjaan numerik berat berada di kode Python/CUDA yang sudah teruji. Karena TGI dibuat oleh tim yang sama di balik library Transformers dan Hub, pemuatan model, penanganan tokenizer, dan autentikasi model gated terhubung secara alami dengan ekosistem Hugging Face lainnya.
Fitur Utama
- Continuous batching. Request yang masuk bergabung ke batch yang sedang berjalan begitu slot tersedia, bukan menunggu jendela batch tetap. Ini menjaga GPU tetap sibuk dan meningkatkan throughput pada beban campuran.
- Tensor parallelism (sharding). Model dapat dibagi ke beberapa GPU dengan
--num-shard, memungkinkan model yang tidak muat di satu kartu. - Attention teroptimasi. TGI memakai kernel Flash Attention dan Paged Attention untuk mengurangi pemakaian memori dan mempercepat prefill maupun decode.
- Streaming token. Server-Sent Events (SSE) mengalirkan token saat diproduksi, sehingga menurunkan latensi yang dirasakan pada antarmuka chat.
- Kuantisasi. Dukungan bawaan untuk
bitsandbytes, GPTQ, AWQ, dan skema lain agar model besar muat di VRAM yang lebih kecil. - Messages API kompatibel OpenAI. Endpoint
/v1/chat/completionsyang meniru bentuk request/response OpenAI.
Jika Anda sudah membaca tutorial vLLM kami: kedua server melakukan continuous batching dan paged attention, serta sama-sama menyediakan API gaya OpenAI. Perbedaan praktisnya ada pada pengemasan dan ekosistem. TGI mengutamakan Docker, terintegrasi erat dengan Hub dan Inference Endpoints, serta digerakkan oleh satu binary launcher dengan flag yang eksplisit. Perbandingan lebih konkret ada di bagian akhir.
Prasyarat
- Mesin dengan satu atau beberapa GPU NVIDIA dan driver terbaru.
- Docker dengan NVIDIA Container Toolkit terpasang, agar
--gpus allberfungsi. - Akun Hugging Face dan access token jika Anda berencana menyajikan model gated seperti keluarga Llama. Buat token di Settings → Access Tokens.
Pastikan akses GPU di dalam Docker sebelum melanjutkan:
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
Jika tabel GPU tercetak, runtime container dapat melihat perangkat keras Anda.
Jalur Tercepat: Menjalankan TGI dengan Docker
TGI didistribusikan sebagai image container di ghcr.io/huggingface/text-generation-inference. Yang minimum Anda butuhkan adalah ID model dan akses GPU. Kita akan memakai model Mistral instruct, yang terbuka dan cukup kecil untuk berjalan di satu GPU kelas menengah.
# Gunakan kembali direktori host untuk cache model agar pengulangan tidak mengunduh ulang
mkdir -p $HOME/.cache/huggingface
docker run --gpus all --shm-size 1g -p 8080:80 \
-v $HOME/.cache/huggingface:/data \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id mistralai/Mistral-7B-Instruct-v0.3
Beberapa detail penting di sini: