Model dan platform AI

TensorRT-LLM: Panduan Lengkap untuk Mengoptimalkan Inferensi Model Bahasa Besar untuk Kinerja Maksimal

mm
Tambahkan Unite.AI ke sumber pilihan Anda di Google

Seiring meningkatnya permintaan akan model bahasa besar (LLM), memastikan inferensi yang cepat, efisien, dan dapat diskalakan menjadi lebih penting dari sebelumnya. NVIDIA’s (NVDA ) TensorRT-LLM hadir untuk mengatasi tantangan ini dengan menyediakan serangkaian alat dan optimasi yang dirancang khusus untuk inferensi LLM. TensorRT-LLM menawarkan berbagai peningkatan kinerja, seperti kuantisasi, fusi kernel, batching dalam penerbangan, dan dukungan multi-GPU. Peningkatan ini memungkinkan pencapaian kecepatan inferensi hingga 8x lebih cepat daripada metode berbasis CPU tradisional, mengubah cara kami menerapkan LLM dalam produksi.

Panduan komprehensif ini akan menjelajahi semua aspek TensorRT-LLM, dari arsitektur dan fitur kunci hingga contoh praktis untuk menerapkan model. Baik Anda seorang insinyur AI, pengembang perangkat lunak, atau peneliti, panduan ini akan memberikan pengetahuan untuk memanfaatkan TensorRT-LLM untuk mengoptimalkan inferensi LLM pada GPU NVIDIA.

Meningkatkan Kecepatan Inferensi LLM dengan TensorRT-LLM

TensorRT-LLM memberikan peningkatan dramatis dalam kinerja inferensi LLM. Menurut pengujian NVIDIA, aplikasi yang menggunakan TensorRT menunjukkan kecepatan inferensi hingga 8x lebih cepat dibandingkan dengan platform berbasis CPU saja. Ini adalah kemajuan penting dalam aplikasi waktu nyata seperti chatbot, sistem rekomendasi, dan sistem otonom yang memerlukan respons cepat.

Bagaimana Cara Kerjanya

TensorRT-LLM mempercepat inferensi dengan mengoptimalkan jaringan saraf selama penerapan menggunakan teknik seperti:

  • Kuantisasi: Mengurangi presisi bobot dan aktivasi, mengurangi ukuran model dan meningkatkan kecepatan inferensi.
  • Fusi Lapisan dan Tensor: Menggabungkan operasi seperti fungsi aktivasi dan perkalian matriks menjadi satu operasi.
  • Pengaturan Kernel: Memilih kernel CUDA optimal untuk komputasi GPU, mengurangi waktu eksekusi.

Optimasi ini memastikan bahwa model LLM Anda berkinerja secara efisien di berbagai platform penerapan, dari pusat data hiper skala hingga sistem tertanam.

Mengoptimalkan Kinerja Inferensi dengan TensorRT

Dibangun di atas model pemrograman paralel CUDA NVIDIA, TensorRT menyediakan optimasi yang sangat spesifik untuk inferensi pada GPU NVIDIA. Dengan menyederhanakan proses seperti kuantisasi, pengaturan kernel, dan fusi operasi tensor, TensorRT memastikan bahwa LLM dapat berjalan dengan latensi minimal.

Beberapa teknik paling efektif termasuk:

  • Kuantisasi: Ini mengurangi presisi numerik parameter model sambil mempertahankan akurasi tinggi, secara efektif mempercepat inferensi.
  • Fusi Tensor: Dengan menggabungkan beberapa operasi menjadi satu kernel CUDA, TensorRT meminimalkan overhead memori dan meningkatkan throughput.
  • Pengaturan Kernel Otomatis: TensorRT secara otomatis memilih kernel terbaik untuk setiap operasi, mengoptimalkan inferensi untuk GPU tertentu.

Teknik-teknik ini memungkinkan TensorRT-LLM untuk mengoptimalkan kinerja inferensi untuk tugas pembelajaran dalam seperti pemrosesan bahasa alami, mesin rekomendasi, dan analitik video waktu nyata.

Mengakselerasi Pekerjaan AI dengan TensorRT

TensorRT mengakselerasi pekerjaan pembelajaran dalam dengan mengintegrasikan optimasi presisi seperti INT8 dan FP16. Format presisi yang dikurangi ini memungkinkan inferensi yang jauh lebih cepat sambil mempertahankan akurasi. Ini sangat berharga dalam aplikasi waktu nyata di mana latensi rendah adalah persyaratan kritis.

Optimasi INT8 dan FP16 khususnya efektif dalam:

  • Streaming Video: Tugas pemrosesan video berbasis AI, seperti deteksi objek, mendapat manfaat dari optimasi ini dengan mengurangi waktu pemrosesan bingkai.
  • Sistem Rekomendasi: Dengan mempercepat inferensi untuk model yang memproses sejumlah besar data pengguna, TensorRT memungkinkan personalisasi waktu nyata dalam skala besar.
  • Pemrosesan Bahasa Alami (NLP): TensorRT meningkatkan kecepatan tugas NLP seperti generasi teks, terjemahan, dan ringkasan, membuatnya cocok untuk aplikasi waktu nyata.

Terapkan, Jalankan, dan Skalakan dengan NVIDIA Triton

Setelah model Anda dioptimalkan dengan TensorRT-LLM, Anda dapat dengan mudah menerapkan, menjalankan, dan menskalakan menggunakan NVIDIA Triton Inference Server. Triton adalah perangkat lunak sumber terbuka yang mendukung batching dinamis, ensemble model, dan throughput tinggi. Ini menyediakan lingkungan yang fleksibel untuk mengelola model AI dalam skala.

Fitur Inti TensorRT-LLM untuk Inferensi LLM

API Python Sumber Terbuka

TensorRT-LLM menyediakan API Python yang sangat modular dan sumber terbuka, menyederhanakan proses mendefinisikan, mengoptimalkan, dan menjalankan LLM. API ini memungkinkan pengembang untuk membuat LLM kustom atau memodifikasi LLM yang sudah ada tanpa memerlukan pengetahuan mendalam tentang CUDA atau kerangka kerja pembelajaran dalam.

Batching dalam Penerbangan dan Perhatian Berhalaman

Salah satu fitur unggulan TensorRT-LLM adalah Batching dalam Penerbangan, yang mengoptimalkan generasi teks dengan memproses beberapa permintaan secara bersamaan. Fitur ini meminimalkan waktu tunggu dan meningkatkan utilitas GPU dengan batching dinamis urutan.

Selain itu, Perhatian Berhalaman memastikan bahwa penggunaan memori tetap rendah bahkan saat memproses urutan input panjang. Sebagai gantinya untuk mengalokasikan memori kontigu untuk semua token dalam sebuah urutan, perhatian berhalaman memecah data cache kunci-nilai menjadi “halaman” memori yang dapat dialokasikan dan dibebaskan secara dinamis, mengoptimalkan penggunaan memori.

Dukungan Multi-GPU dan Multi-Node

Untuk model yang lebih besar atau beban kerja yang lebih kompleks, TensorRT-LLM mendukung multi-GPU dan multi-node. Kemampuan ini memungkinkan distribusi komputasi model di beberapa GPU atau node, meningkatkan throughput dan mengurangi waktu inferensi secara keseluruhan.

Dukungan FP8

Dengan munculnya FP8 (titik mengambang 8-bit), TensorRT-LLM memanfaatkan GPU H100 NVIDIA untuk mengkonversi bobot model ke format ini untuk inferensi yang dioptimalkan. FP8 memungkinkan konsumsi memori yang berkurang dan komputasi yang lebih cepat, terutama berguna dalam penerapan skala besar.

Arsitektur dan Komponen TensorRT-LLM

Memahami arsitektur TensorRT-LLM akan membantu Anda memanfaatkan kemampuannya untuk inferensi LLM. Mari kita pecah komponen kunci:

Definisi Model

TensorRT-LLM memungkinkan Anda untuk mendefinisikan LLM menggunakan API Python sederhana. API ini membuat representasi grafis dari model, membuatnya lebih mudah untuk mengelola lapisan kompleks yang terlibat dalam arsitektur LLM seperti GPT atau BERT.

Ikatan Bobot

Sebelum mengkompilasi model, bobot (atau parameter) harus diikat ke jaringan. Langkah ini memastikan bahwa bobot disematkan dalam mesin TensorRT, memungkinkan inferensi yang cepat dan efisien. TensorRT-LLM juga memungkinkan pembaruan bobot setelah kompilasi, menambah fleksibilitas untuk model yang memerlukan pembaruan sering.

Pencocokan Pola dan Fusi

Fusi Operasi adalah fitur kuat lain dari TensorRT-LLM. Dengan menggabungkan beberapa operasi (seperti perkalian matriks dengan fungsi aktivasi) menjadi satu kernel CUDA, TensorRT meminimalkan overhead yang terkait dengan peluncuran kernel multiple. Ini mengurangi transfer memori dan mempercepat inferensi.

Plugin

Untuk memperluas kemampuan TensorRT, pengembang dapat menulis plugin—kernel kustom yang melakukan optimasi atau operasi tertentu yang tidak diliput oleh perpustakaan TensorRT standar.

Benchmark: Peningkatan Kinerja TensorRT-LLM

TensorRT-LLM menunjukkan peningkatan kinerja yang signifikan untuk inferensi LLM di berbagai GPU. Berikut adalah perbandingan kecepatan inferensi (diukur dalam token per detik) menggunakan TensorRT-LLM di berbagai GPU NVIDIA:

Model Presisi Panjang Input/Output H100 (80GB) A100 (80GB) L40S FP8
GPTJ 6B FP8 128/128 34,955 11,206 6,998
GPTJ 6B FP8 2048/128 2,800 1,354 747
LLaMA v2 7B FP8 128/128 16,985 10,725 6,121
LLaMA v3 8B FP8 128/128 16,708 12,085 8,273

Benchmark ini menunjukkan bahwa TensorRT-LLM memberikan peningkatan kinerja yang substansial, terutama untuk urutan yang lebih panjang.

Praktik: Menginstal dan Membangun TensorRT-LLM

Langkah 1: Buat Lingkungan Kontainer

Untuk kemudahan penggunaan, TensorRT-LLM menyediakan gambar Docker untuk membuat lingkungan yang dikontrol untuk membangun dan menjalankan model.

docker build --pull \
--target devel \
--file docker/Dockerfile.multi \
--tag tensorrt_llm/devel:latest .

Langkah 2: Jalankan Kontainer

Jalankan kontainer pengembangan dengan akses ke GPU NVIDIA:

docker run --rm -it \
--ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all \
--volume ${PWD}:/code/tensorrt_llm \
--workdir /code/tensorrt_llm \
tensorrt_llm/devel:latest

Langkah 3: Bangun TensorRT-LLM dari Sumber

Di dalam kontainer, kompilasi TensorRT-LLM dengan perintah berikut:

python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt
pip install ./build/tensorrt_llm*.whl

Langkah 4: Tautkan Waktu Jalankan TensorRT-LLM C++

Ketika mengintegrasikan TensorRT-LLM ke dalam proyek C++ Anda, pastikan jalur include proyek Anda menunjuk ke direktori cpp/include. Ini berisi header API yang stabil dan didukung. Perpustakaan TensorRT-LLM dihubungkan sebagai bagian dari proses kompilasi C++ Anda.

Contohnya, konfigurasi CMake proyek Anda mungkin termasuk:

include_directories(${TENSORRT_LLM_PATH}/cpp/include)
link_directories(${TENSORRT_LLM_PATH}/cpp/build/tensorrt_llm)
target_link_libraries(your_project tensorrt_llm)

Integrasi ini memungkinkan Anda untuk memanfaatkan optimasi TensorRT-LLM dalam proyek C++ kustom, memastikan inferensi yang efisien bahkan dalam lingkungan rendah tingkat atau kinerja tinggi.

Fitur Lanjutan TensorRT-LLM

TensorRT-LLM lebih dari sekadar perpustakaan optimasi; itu termasuk beberapa fitur lanjutan yang membantu menangani penerapan LLM skala besar. Di bawah, kita akan menjelajahi beberapa fitur ini secara rinci:

1. Batching dalam Penerbangan

Batching tradisional melibatkan menunggu sampai batch selesai sebelum memproses, yang dapat menyebabkan keterlambatan. Batching dalam Penerbangan mengubah ini dengan memulai inferensi pada permintaan yang selesai dalam batch sambil masih mengumpulkan permintaan lain. Fitur ini meningkatkan throughput secara keseluruhan dengan meminimalkan waktu idle dan meningkatkan utilitas GPU.

Fitur ini sangat berharga dalam aplikasi waktu nyata, seperti chatbot atau asisten suara, di mana waktu respons kritis.

2. Perhatian Berhalaman

Perhatian Berhalaman adalah teknik optimasi memori untuk menangani urutan input panjang. Sebagai gantinya untuk memerlukan memori kontigu untuk semua token dalam sebuah urutan (yang dapat menyebabkan fragmentasi memori), Perhatian Berhalaman memungkinkan model untuk membagi data cache kunci-nilai menjadi “halaman” memori. Halaman-halaman ini dapat dialokasikan dan dibebaskan secara dinamis, mengoptimalkan penggunaan memori.

Perhatian Berhalaman kritis untuk menangani panjang urutan besar dan mengurangi overhead memori, terutama dalam model generatif seperti GPT dan LLaMA.

3. Plugin Kustom

TensorRT-LLM memungkinkan Anda untuk memperluas fungsionalitasnya dengan plugin kustom. Plugin adalah kernel kustom yang melakukan tugas tertentu seperti mengoptimalkan blok perhatian multi-kepala.

Misalnya, Flash-Attention plugin adalah kernel kustom yang mengoptimalkan lapisan perhatian dalam model Transformer. Dengan menggunakan plugin ini, pengembang dapat mencapai percepatan substantial dalam komputasi perhatian—salah satu komponen paling intensif sumber daya dalam LLM.

4. Presisi FP8 pada NVIDIA H100

Dengan presisi FP8, TensorRT-LLM memanfaatkan inovasi terbaru NVIDIA dalam arsitektur H100 Hopper. FP8 mengurangi jejak memori LLM dengan menyimpan bobot dan aktivasi dalam format titik mengambang 8-bit, menghasilkan komputasi yang lebih cepat tanpa mengorbankan akurasi. TensorRT-LLM secara otomatis mengkompilasi model untuk menggunakan kernel FP8 yang dioptimalkan, lebih lanjut mempercepat waktu inferensi.

Ini membuat TensorRT-LLM menjadi pilihan ideal untuk penerapan skala besar yang memerlukan kinerja dan efisiensi energi kelas atas.

Contoh: Menerapkan TensorRT-LLM dengan Triton Inference Server

Untuk penerapan produksi, Triton Inference Server NVIDIA menyediakan platform yang kuat untuk mengelola model dalam skala. Dalam contoh ini, kita akan mendemonstrasikan cara menerapkan model yang dioptimalkan dengan TensorRT-LLM menggunakan Triton.

Langkah 1: Siapkan Repositori Model

Buat repositori model untuk Triton, yang akan menyimpan file model TensorRT-LLM Anda. Misalnya, jika Anda telah mengkompilasi model GPT2, struktur direktori Anda mungkin terlihat seperti ini:

mkdir -p model_repository/gpt2/1
cp ./trt_engine/gpt2_fp16.engine model_repository/gpt2/1/

Langkah 2: Buat File Konfigurasi Triton

Di direktori model_repository/gpt2/ yang sama, buat file konfigurasi bernama config.pbtxt yang memberitahu Triton cara memuat dan menjalankan model. Berikut adalah konfigurasi dasar untuk TensorRT-LLM:

name: "gpt2"
platform: "tensorrt_llm"
max_batch_size: 8

<p>input [
{
name: "input_ids"
data_type: TYPE_INT32
dims: [-1]
}
]</p>

<p>output [
{
name: "logits"
data_type: TYPE_FP32
dims: [-1, -1]
}
]</p>

Langkah 3: Luncurkan Server Triton

Gunakan perintah Docker berikut untuk meluncurkan Triton dengan repositori model:

docker run --rm --gpus all \
-v $(pwd)/model_repository:/models \
nvcr.io/nvidia/tritonserver:23.05-py3 \
tritonserver --model-repository=/models

Langkah 4: Kirim Permintaan Inferensi ke Triton

Setelah server Triton berjalan, Anda dapat mengirim permintaan inferensi ke sana menggunakan HTTP atau gRPC. Misalnya, menggunakan curl untuk mengirim permintaan:

curl -X POST http://localhost:8000/v2/models/gpt2/infer -d '{
"inputs": [
{"name": "input_ids", "shape": [1, 128], "datatype": "INT32", "data": [[101, 234, 1243]]}
]
}'

Triton akan memproses permintaan menggunakan mesin TensorRT-LLM dan mengembalikan logits sebagai output.

Praktik Terbaik untuk Mengoptimalkan Inferensi LLM dengan TensorRT-LLM

Untuk memanfaatkan sepenuhnya TensorRT-LLM, penting untuk mengikuti praktik terbaik selama optimasi model dan penerapan. Berikut beberapa tips kunci:

1. Profil Model Anda Sebelum Optimasi

Sebelum menerapkan optimasi seperti kuantisasi atau fusi kernel, gunakan alat profiling NVIDIA (seperti Nsight Systems atau Profiler TensorRT) untuk memahami bottleneck saat ini dalam eksekusi model Anda. Ini memungkinkan Anda untuk menargetkan area tertentu untuk perbaikan, menghasilkan optimasi yang lebih efektif.

2. Gunakan Presisi Campuran untuk Kinerja Optimal

Saat mengoptimalkan model dengan TensorRT-LLM, menggunakan presisi campuran (kombinasi FP16 dan FP32) menawarkan percepatan signifikan tanpa kehilangan akurasi yang signifikan. Untuk keseimbangan terbaik antara kecepatan dan akurasi, pertimbangkan untuk menggunakan FP8 di mana tersedia, terutama pada GPU H100.

3. Manfaatkan Perhatian Berhalaman untuk Urutan Panjang

Untuk tugas yang melibatkan urutan input panjang, seperti ringkasan dokumen atau percakapan multi-giliran, selalu aktifkan Perhatian Berhalaman untuk mengoptimalkan penggunaan memori. Ini mengurangi overhead memori dan mencegah kesalahan kehabisan memori selama inferensi.

4. Tuning Paralelisme untuk Konfigurasi Multi-GPU

Saat menerapkan LLM di beberapa GPU atau node, penting untuk menyesuaikan pengaturan untuk paralelisme tensor dan paralelisme pipa untuk memenuhi beban kerja spesifik Anda. Mengkonfigurasi mode-mode ini dengan benar dapat menghasilkan peningkatan kinerja yang signifikan dengan mendistribusikan beban komputasi secara merata di seluruh GPU.

Kesimpulan

TensorRT-LLM mewakili pergeseran paradigma dalam mengoptimalkan dan menerapkan model bahasa besar. Dengan fitur-fitur lanjutannya seperti kuantisasi, fusi operasi, presisi FP8, dan dukungan multi-GPU, TensorRT-LLM memungkinkan LLM untuk berjalan lebih cepat dan lebih efisien pada GPU NVIDIA. Baik Anda bekerja pada aplikasi chat waktu nyata, sistem rekomendasi, atau model bahasa besar, TensorRT-LLM menyediakan alat yang diperlukan untuk mendorong kinerja ke batas.

Panduan ini membawa Anda melalui pengaturan TensorRT-LLM, mengoptimalkan model dengan API Python, menerapkan pada Triton Inference Server, dan menerapkan praktik terbaik untuk inferensi yang efisien. Dengan TensorRT-LLM, Anda dapat mempercepat beban kerja AI, mengurangi latensi, dan mengirimkan solusi LLM yang dapat diskalakan ke lingkungan produksi.

Untuk informasi lebih lanjut, silakan merujuk ke dokumentasi TensorRT-LLM dan dokumentasi Triton Inference Server.

Saya telah menghabiskan lima tahun terakhir dengan membenamkan diri dalam dunia Machine Learning dan Deep Learning yang menarik. Minat dan keahlian saya telah memimpin saya untuk berkontribusi pada lebih dari 50 proyek rekayasa perangkat lunak yang beragam, dengan fokus khusus pada AI/ML. Rasa ingin tahu saya yang terus-menerus juga telah menarik saya ke arah Natural Language Processing, sebuah bidang yang saya ingin jelajahi lebih lanjut.