Giriş: Neden TensorRT-LLM Hafta Sonunuzu Ayırmaya Değer
Eğer bir GPU'nun LLM'niz emeklerken %60 kullanımda oturduğunu gördüyseniz, masada bırakılmış ücretsiz performans olduğunu bilirsiniz. TensorRT-LLM bu alanı iş hacmine dönüştürür: Kaynaşmış çekirdekler, sayfalandırılmış dikkat, nicemleme ve gecikmeyi azaltan ve saniyedeki belirteç sayısını artıran grafik düzeyi optimizasyonları. Bu nasıl yapılır kılavuzunda, kurulumdan motor oluşturmaya ve sunmaya kadar her şeyi ele alacağız; böylece NVIDIA GPU'larda daha hızlı ve daha ucuz çıkarımı güvenle dağıtabilirsiniz.
Bu eğitim, pratik ve çözüm odaklı bir tarzda yazılmıştır. Kopyalanabilir komutlar, yaygın tuzaklar ve FP16'ya karşı INT8, toplu işleme ve KV önbellek stratejileri için karar noktaları ile soru odaklı bir yapı kullanacağız. Ayrıca, uygun olan yerlerde daha derinlemesine incelemeler için resmi kaynaklara da başvuracağız.
Ne öğreneceksiniz
- TensorRT-LLM için ortamın nasıl kurulacağı
- Motor oluşturma için bir modelin (Hugging Face veya kontrol noktalarından) nasıl hazırlanacağı
- FP16/INT8 motorlarının nasıl oluşturulacağı ve performansın nasıl ayarlanacağı
- Python/C++ ve HTTP sunumu aracılığıyla çıkarımın nasıl çalıştırılacağı
- Nasıl kıyaslama yapılır, toplu işlenir ve hata ayıklanır
Bu kimler için
- NVIDIA GPU'larda LLM'leri dağıtan ML mühendisleri
- Üretimde maliyet/gecikmeyi optimize eden uygulayıcılar
- PyTorch Transformers'dan yüksek düzeyde optimize edilmiş çıkarıma geçen geliştiriciler
- TensorRT-LLM nedir ve ne zaman kullanmalısınız?
TensorRT-LLM, Transformer modellerini yüksek düzeyde optimize edilmiş GPU “motorlarına” derleyen bir çıkarım yığınıdır. Ham PyTorch veya genel çalışma zamanlarına kıyasla, genellikle şunları elde edersiniz:
- Belirteç başına daha düşük gecikme
- Büyük toplu iş boyutlarında daha yüksek iş hacmi
- Sayfalandırılmış KV önbelleği ve nicemleme ile daha iyi bellek verimliliği
NVIDIA GPU'larda çalıştırdığınızda ve üretim sınıfı performansını önemsediğinizde kullanın. Özellikle yalnızca kod çözücülü LLM'ler (örneğin, Llama, Mistral, Phi, BLOOM) ve sohbet robotları, RAG ve yüksek QPS API hizmetleri gibi senaryolar için değerlidir.
- Ön koşullar ve ortam kurulumu
Temel gereksinimler
- Son işlem yeteneğine sahip NVIDIA GPU (örneğin, Ampere, Ada, Hopper)
- Eşleşen CUDA ve TensorRT sürümleri ve uygun sürücüler
- Kaynaktan derleniyorsa Python 3.8+ ve oluşturma araçları
Sürüm notu: Kurulumdan önce uyumlu CUDA/TensorRT sürümleri ve özellikleri için her zaman resmi TensorRT destek matrisini ve sürüm notlarını kontrol edin.
Hızlı başlangıç seçenekleri
- Konteynerli: Önceden yüklenmiş CUDA/TensorRT ile NVIDIA'nın konteynerlerini kullanın; sürüm uyuşmazlıklarından kaçınmanın en hızlı yolu.
- Yerel kurulum: Temel TensorRT için resmi hızlı başlangıcı izleyin, ardından TensorRT-LLM'yi üzerine katmanlayın.
- Modelinizi hazırlama (Hugging Face → TensorRT-LLM)
Ortak kaynaklar
- Hugging Face: Llama/Mistral/BLOOM çeşitleri
- Yerel kontrol noktaları: Özel ince ayarlar
Hazırlık kontrol listesi
- Model mimarisinin TensorRT-LLM tarafından desteklendiğini doğrulayın.
- Model ağırlıklarını ve belirteçleştiriciyi indirin.
- Gerekirse, güvenli tensörleri beklenen biçimlere dönüştürün veya projenin komut dosyaları aracılığıyla ONNX'e aktarın.
İpucu: Resmi hızlı başlangıç, genellikle modelleri getirmek ve doğru ara forma dönüştürmek için komut dosyaları içerir. BLOOM örneğiyle eğitim tarzı bir kılavuz için, Dell'in Hugging Face LLM'lerini TensorRT-LLM'ye dönüştürme kılavuzuna bakın.
- Bir TensorRT-LLM motoru oluşturma (iş akışının kalbi)
Bilmeniz gereken kavramlar
- Motor: Çıkarım için yüklediğiniz derlenmiş, donanım için optimize edilmiş yapıt.
- Hassasiyet: Güçlü bir temel için FP16/BF16; doğruluk korunursa daha yüksek iş hacmi için INT8 veya FP8.
- KV önbelleği: Sayfalandırılmış KV önbelleği bellek parçalanmasını azaltır ve uzun bağlam performansını artırır.
Üst düzey adımlar
- Oluşturma yapılandırmasını tanımlayın: maksimum toplu iş, dizi uzunlukları, hassasiyet, nicemleme ve GPU mimarisi.
- Model kontrol noktalarınıza ve belirteçleştiricinize işaret edin.
- Motoru hedef GPU'larınız için derleyin.
Referans: Resmi belgeler ve yapılandırmalarla motor oluşturma. Hugging Face Metin Üretimi Çıkarımı (TGI) aracılığıyla sunmayı planlıyorsanız, GPU mimarisi ve yapılandırması başına motorları önceden derleme hakkında TRT-LLM arka uç notlarına bakın.
Başlangıç karar ağacı
- İlk oluşturma: FP16, orta maksimum dizi uzunluğu (örneğin, 4K–8K), orta toplu iş (örneğin, 4–8). Doğruluğu doğrulayın.
- Ölçeklendirme: Sayfalandırılmış KV önbelleğini etkinleştirin. Maksimum toplu iş/ışın boyutlarını artırın. FP8 veya INT8 ile deney yapın.
- Üretim: Gecikme/QPS SLO'larını karşılayan yapılandırmaları sabitleyin; senaryo başına ayrı motorlar oluşturun (kısa istemler ve uzun bağlam).
- Çıkarımı çalıştırma: Python, C++ ve HTTP
Üç ortak yolunuz var:
- Python: Hızlı prototipleme, boru hatları ve not defterleri için idealdir.
- C++: Maksimum performans, yerel hizmetlere entegrasyon.
- HTTP Sunumu: Ölçeklenebilir dağıtım için TRT-LLM arka ucu veya çalışma zamanının sunum örnekleriyle TGI'yı kullanın.
Hugging Face TGI arka ucu
- Tam GPU/hassasiyet kurulumunuz için motorları önceden derleyin.
- TRT-LLM arka ucu ile TGI'yı başlatın ve motor dizinine işaret edin.
- /generate veya openai uyumlu rotalar aracılığıyla istekler gönderin ve kopyalarla ölçeklendirin.
- İğneyi hareket ettiren performans ayarı
Nereden başlamalı
- Hassasiyet: FP16 güvenilir temelinizdir. INT8/FP8 gecikmeyi daha da azaltabilir, ancak kaliteyi doğrulayın.
- Toplu işleme: Dinamik toplu işleme ve istek birleştirme, iş hacmini önemli ölçüde artırır; kuyruk gecikmesini ölçün.
- Sayfalandırılmış KV Önbelleği: Uzun istemler ve akış için önemlidir; bellek basıncını azaltır.
- Maksimum uzunluklar: Daha büyük maksimum dizi uzunlukları motor boyutunu artırır ve saati azaltabilir; amaca uygun motorlar oluşturun.
Pratik ipuçları
- Gerçekçi istemlerle kıyaslama yapın: ön doldurma ve kod çözme aşamalarını ayrı ayrı ölçün.
- Belirteçleştirici iş hacmi önemlidir: çerçeve destekliyorsa GPU'da yapın.
- CUDA grafiklerini/kaynaşmış çekirdekleri göz önünde bulundurun: CPU yükünü ve çekirdek başlatma gecikmesini azaltırlar.
- Çoklu GPU için: Model boyutunuza ve gecikme gereksinimlerinize göre tensör paralelliğini veya ardışık düzen paralelliğini tercih edin.
- Kıyaslama: kazanımı kanıtlayın
Kontrol listesi
- Hedef toplu iş boyutlarında belirteç/sn (iş hacmi)
- İsteğe göre ilk belirteç zamanı (TTFT) ve uçtan uca gecikme
- Yoğun QPS altında GPU kullanımı ve bellek alanı
- Nicemlerseniz doğruluk: BLEU/şaşkınlık veya göreve özgü değerlendirmeler
Doğruluğu ve deltaları doğrulamak için temeller (PyTorch - TensorRT-LLM) arasında tutarlı tohumlar ve istem kümeleri kullanın.
- Hata ayıklama ve yaygın tuzaklar
- Uyuşmayan sürümler: Resmi destek matrisine göre CUDA, sürücüler ve TensorRT sürümlerini hizalayın.
- Cihaz için geçersiz motor: Motorları özellikle GPU mimariniz için yeniden oluşturun.
- Oluşturma sırasında OOM: Maksimum dizi uzunluğunu veya toplu işi azaltın; sayfalandırılmış KV'yi etkinleştirin; nicemlemeyi düşünün.
- INT8 ile doğruluk düşüşü: Alana özgü veriler üzerinde kalibre edin; tensör başına nicemlemeyi deneyin ve katman bazında hassasiyeti doğrulayın.
- Yüksek iş hacmine rağmen yavaş TTFT: Sayfalandırılmış KV önbelleğini ayarlayın, CUDA grafiklerini etkinleştirin ve belirteçleştirici darboğazlarını kontrol edin.
- Örnek iş akışı: Hugging Face modelinden üretime
Senaryo: Bir A100 üzerinde düşük gecikmeli bir sohbet modeli istiyorsunuz.
- Model seçin: 7B–13B Llama/Mistral çeşidi.
- Hazırlayın: Ağırlıkları ve belirteçleştiriciyi indirin; mimarinin desteklendiğini doğrulayın.
- İlk motor: FP16, maksimum giriş 4K, maksimum çıkış 1K, toplu iş 4; sayfalandırılmış KV açık.
- Doğrulayın: Çıktıları PyTorch temelinizle karşılaştırın.
- Optimize edin: INT8 veya FP8'i deneyin; TTFT ve iş hacmini ölçün. Sunucu modu için toplu işi artırın.
- Sunun: TGI TRT-LLM arka ucunu kullanın; bir yük dengeleyicinin arkasında kopyaları ölçeklendirin; akış ekleyin.
- Maliyet ve kapasite planlaması
- GPU başına iş hacmi: Hedef bağlamınızda belirteç/sn'yi ölçün. Bunu QPS kapasitesini hesaplamak için kullanın.
- 1 milyon belirteç başına fiyat: Daha hızlı kod çözme ve daha yüksek toplu iş kullanımı ile TRT-LLM genellikle belirteç başına maliyeti düşürür.
- Doğru boyutlu motorlar: Kısa biçimli ve uzun biçimli için ayrı motorlar oluşturarak boşa harcanan alanı en aza indirin.
- Kılavuzun içindeki SSS
S: Her GPU türü için motorları yeniden oluşturmam gerekiyor mu?
C: Evet. Motorlar donanıma özeldir. Üzerinde dağıtım yapacağınız her GPU mimarisi için oluşturun.
S: INT8 kaliteyi ne kadar etkiliyor?
C: Modele ve göreve bağlıdır. İyi kalibrasyon verileriyle, birçok model önemli hızlanmalar sağlarken FP16'ya yakın kaliteyi korur.
S: Uzun bağlamları (örneğin, 32K) çalıştırabilir miyim?
C: Evet, ancak belleği dikkatlice planlayın. Sayfalandırılmış KV önbelleğini kullanın ve blok boyutlarını ayarlayın; daha uzun bağlamların motor ayak izini ve kod çözme maliyetini artırdığını unutmayın.
S: TGI gerekli mi?
C: Hayır. Doğrudan Python/C++ çalıştırabilirsiniz. TGI, otomatik ölçeklendirme ve günlük kaydı ile üretim sınıfı HTTP API'leri için uygundur.
İş akışı hızlandırması için belirtmeye değer
İstemlerde sık sık yineleme yapıyorsanız, motorlar arasında çıktıları karşılaştırıyorsanız veya deneyleri belgeliyorsanız, hızlı yeniden denemeleri, kod bloğu yürütmesini ve web parçacıklarını destekleyen yan yana bir AI asistanı döngünüzü hızlandırabilir. Bu arada, Sider.AI, mühendisler için ayarlanmış bir masaüstü deneyimi sunuyor; kıyaslamaları yakalamak, istemleri test etmek ve TensorRT-LLM hattınızı optimize ederken notlarınızı düzenlemek için kullanışlıdır. Sonraki adımlar kontrol listesi
- Ortamınızı doğrulamak için resmi hızlı başlangıcı okuyun.
- Destek matrisinde CUDA/TensorRT uyumluluğunu doğrulayın.
- Motor oluşturma kılavuzunu izleyin ve önce FP16'yı seçin.
- TGI aracılığıyla sunuluyorsa, motorları önceden derleyin ve TRT-LLM arka ucunu yapılandırın.
- İsteğe bağlı olarak, BLOOM gibi Hugging Face modelleri için eğitim tarzı bir kılavuzu inceleyin.
Temel çıkarımlar
- TensorRT-LLM, Transformer'ınızı maksimum iş hacmi ve daha düşük gecikme için GPU yerel bir motora derler.
- FP16 ile başlayın, sayfalandırılmış KV önbelleğini etkinleştirin ve ölçün. Ardından daha fazla hız için INT8/FP8'i keşfedin.
- Motorlar GPU ve yapılandırmaya özeldir; dağıtım hedefi başına oluşturun.
- Üretim için motorları sağlam bir sunum katmanıyla (örneğin, TGI) eşleştirin ve TTFT, iş hacmi ve kaliteyi izleyin.
SSS
S1:TensorRT-LLM'yi doğru şekilde nasıl kurarım ve ayarlarım?
Eşleşen CUDA/TensorRT ile bir konteyner kullanın veya sürüm kaymasını önlemek için resmi hızlı başlangıcı ve destek matrisini izleyin. Motorları derlemeden önce GPU sürücülerini ve oluşturma araçlarını doğrulayın.
S2:TensorRT-LLM'yi Hugging Face modelleriyle nasıl kullanırım?
Modeli ve belirteçleştiriciyi indirin, desteği doğrulayın ve motoru oluşturmadan önce gerektiği gibi dönüştürün. TGI ile sunuyorsanız, GPU'nuz için motorları derleyin ve arka ucu motor dizinine yönlendirin.
S3:TensorRT-LLM için FP16, FP8 veya INT8'i mi seçmeliyim?
Denge için FP16 ile başlayın, ardından iş hacmini artırmak için FP8/INT8'i deneyin. Nicemlemeden sonra her zaman görev doğruluğunu doğrulayın.
S4:TensorRT-LLM'yi HTTP üzerinden sunabilir miyim?
Evet. Doğrudan Python/C++ kullanabilir veya akışla ölçeklenebilir, üretime hazır API'ler için Hugging Face TGI'nın TRT-LLM arka ucu aracılığıyla sunabilirsiniz.
S5:TensorRT-LLM kullanırken yaygın performans darboğazları nelerdir?
Belirteçleştirici yükü, optimal olmayan toplu işleme ve sayfalandırılmış KV önbelleği eksikliği yaygın sorunlardır. Toplu iş boyutlarını ayarlayın, CUDA grafiklerini etkinleştirin ve TTFT'yi genel belirteç/sn'ye karşı izleyin.