Bizimle iletişime geçin

TensorRT-LLM: Maksimum Performans için Büyük Dil Modeli Çıkarımını Optimize Etmeye Yönelik Kapsamlı Bir Kılavuz

Yapay Zeka

TensorRT-LLM: Maksimum Performans için Büyük Dil Modeli Çıkarımını Optimize Etmeye Yönelik Kapsamlı Bir Kılavuz

mm
TensorRT-LLM NVIDEA niceleme, işlem birleştirme, FP8 hassasiyeti ve çoklu GPU desteği

Büyük dil modelleri (LLM) talebi artmaya devam ettikçe, hızlı, verimli ve ölçeklenebilir çıkarımların sağlanması her zamankinden daha önemli hale geldi. NVIDIA'nın TensorRT-LLM LLM çıkarımı için özel olarak tasarlanmış güçlü araçlar ve optimizasyonlar sağlayarak bu zorluğun üstesinden gelmek için devreye girer. TensorRT-LLM, niceleme, çekirdek birleştirme, uçuş sırasında toplu işlem ve çoklu GPU desteği gibi etkileyici bir dizi performans iyileştirmesi sunar. Bu gelişmeler, geleneksel CPU tabanlı yöntemlerden 8 kata kadar daha hızlı çıkarım hızlarına ulaşmayı mümkün kılarak LLM'leri üretimde dağıtma şeklimizi dönüştürür.

Bu kapsamlı kılavuz, TensorRT-LLM'nin mimarisinden ve temel özelliklerinden modelleri dağıtmak için pratik örneklere kadar tüm yönlerini inceleyecektir. İster bir yapay zeka mühendisi, ister yazılım geliştiricisi veya araştırmacı olun, bu kılavuz size NVIDIA GPU'larında LLM çıkarımını optimize etmek için TensorRT-LLM'den yararlanmanız için gereken bilgiyi verecektir.

TensorRT-LLM ile LLM Çıkarımını Hızlandırma

TensorRT-LLM, LLM çıkarım performansında çarpıcı iyileştirmeler sunar. NVIDIA'nın testlerine göre, TensorRT tabanlı uygulamalar 8x daha hızlı CPU-sadece platformlara kıyasla çıkarım hızları. Bu, sohbet robotları, öneri sistemleri ve hızlı yanıtlar gerektiren otonom sistemler gibi gerçek zamanlı uygulamalarda önemli bir gelişmedir.

Nasıl Rezervasyon Yaparım ?

TensorRT-LLM, şu teknikleri kullanarak dağıtım sırasında sinir ağlarını optimize ederek çıkarımı hızlandırır:

  • niceleme: Ağırlıkların ve aktivasyonların hassasiyetini azaltır, model boyutunu küçültür ve çıkarım hızını artırır.
  • Katman ve Tensör Füzyon: Aktivasyon fonksiyonları ve matris çarpımları gibi işlemleri tek bir işlemde birleştirir.
  • Çekirdek Ayarı: GPU hesaplaması için en uygun CUDA çekirdeklerini seçerek yürütme süresini azaltır.

Bu optimizasyonlar, LLM modellerinizin hiper ölçekli veri merkezlerinden gömülü sistemlere kadar çok çeşitli dağıtım platformlarında verimli bir şekilde çalışmasını sağlar.

TensorRT ile Çıkarım Performansını Optimize Etme

NVIDIA'nın CUDA paralel programlama modeli üzerine inşa edilen TensorRT, NVIDIA GPU'larında çıkarım için oldukça uzmanlaşmış optimizasyonlar sağlar. Kantizasyon, çekirdek ayarı ve tensör işlemlerinin birleştirilmesi gibi süreçleri kolaylaştırarak TensorRT, LLM'lerin minimum gecikmeyle çalışmasını sağlar.

En etkili tekniklerden bazıları şunlardır:

  • niceleme: Bu, yüksek doğruluğu korurken model parametrelerinin sayısal hassasiyetini azaltır ve çıkarımı etkili bir şekilde hızlandırır.
  • Tensör Füzyonu:Birden fazla işlemi tek bir CUDA çekirdeğinde birleştirerek TensorRT, bellek yükünü en aza indirir ve verimi artırır.
  • Çekirdek Otomatik Ayarlama: TensorRT, her işlem için otomatik olarak en iyi çekirdeği seçerek, belirli bir GPU için çıkarımı optimize eder.

Bu teknikler, TensorRT-LLM'nin doğal dil işleme, öneri motorları ve gerçek zamanlı video analitiği gibi derin öğrenme görevleri için çıkarım performansını optimize etmesine olanak tanır.

TensorRT ile AI İş Yüklerini Hızlandırma

TensorRT, aşağıdaki gibi hassas optimizasyonları birleştirerek derin öğrenme iş yüklerini hızlandırır: INT8 ve FP16. Bu azaltılmış hassasiyetli formatlar, doğruluğu korurken önemli ölçüde daha hızlı çıkarım sağlar. Bu, düşük gecikmenin kritik bir gereklilik olduğu gerçek zamanlı uygulamalarda özellikle değerlidir.

INT8 ve FP16 optimizasyonlar özellikle şu durumlarda etkilidir:

  • Video Streaming: Nesne algılama gibi yapay zeka tabanlı video işleme görevleri, karelerin işlenmesi için gereken süreyi azaltarak bu optimizasyonlardan yararlanır.
  • Öneri Sistemleri: TensorRT, büyük miktarda kullanıcı verisini işleyen modeller için çıkarımı hızlandırarak büyük ölçekte gerçek zamanlı kişiselleştirmeye olanak tanır.
  • Doğal Dil İşleme (NLP): TensorRT, metin oluşturma, çeviri ve özetleme gibi NLP görevlerinin hızını artırarak bunları gerçek zamanlı uygulamalar için uygun hale getirir.

NVIDIA Triton ile Dağıtın, Çalıştırın ve Ölçeklendirin

Modeliniz TensorRT-LLM ile optimize edildikten sonra, onu kullanarak kolayca dağıtabilir, çalıştırabilir ve ölçekleyebilirsiniz. NVIDIA Triton Çıkarım Sunucusu. Triton, dinamik toplu işleme, model toplulukları ve yüksek verimi destekleyen açık kaynaklı bir yazılımdır. AI modellerini ölçekte yönetmek için esnek bir ortam sağlar.

Temel özelliklerden bazıları şunlardır:

  • Eşzamanlı Model Yürütme: Birden fazla modeli aynı anda çalıştırarak GPU kullanımını en üst düzeye çıkarın.
  • Dinamik Toplu İşleme: Birden fazla çıkarım isteğini tek bir toplu işte birleştirerek gecikmeyi azaltır ve verimi artırır.
  • Akışlı Ses/Video Girişleri: Canlı video analitiği veya konuşmadan metne dönüştürme hizmetleri gibi gerçek zamanlı uygulamalarda giriş akışlarını destekler.

Bu, Triton'u üretim ortamlarında TensorRT-LLM optimize edilmiş modelleri dağıtmak için değerli bir araç haline getirerek yüksek ölçeklenebilirlik ve verimlilik sağlar.

LLM Çıkarımı için TensorRT-LLM'nin Temel Özellikleri

Açık Kaynak Python API'si

TensorRT-LLM son derece modüler ve açık kaynaklı Python API'si, LLM'leri tanımlama, optimize etme ve yürütme sürecini basitleştirir. API, geliştiricilerin CUDA veya derin öğrenme çerçeveleri hakkında derinlemesine bilgi gerektirmeden, ihtiyaçlarına uyacak şekilde özel LLM'ler oluşturmasını veya önceden oluşturulmuş olanları değiştirmesini sağlar.

Uçuş Sırasında Toplu İşlem ve Sayfalanmış Dikkat

TensorRT-LLM'nin öne çıkan özelliklerinden biri Uçuş Sırasında Toplu İşlem, birden fazla isteği aynı anda işleyerek metin üretimini optimize eder. Bu özellik bekleme süresini en aza indirir ve dizileri dinamik olarak toplu olarak işleyerek GPU kullanımını iyileştirir.

Buna ek olarak, Sayfalanmış Dikkat uzun girdi dizileri işlenirken bile bellek kullanımının düşük kalmasını sağlar. Tüm belirteçler için bitişik bellek ayırmak yerine, sayfalanmış dikkat belleği dinamik olarak yeniden kullanılabilen "sayfalara" böler, bellek parçalanmasını önler ve verimliliği artırır.

Çoklu GPU ve Çoklu Düğüm Çıkarımı

Daha büyük modeller veya daha karmaşık iş yükleri için TensorRT-LLM şunları destekler: çoklu GPU ve çoklu düğüm çıkarımıBu yetenek, model hesaplamalarının birden fazla GPU veya düğüme dağıtılmasına olanak tanır, böylece verim iyileştirilir ve genel çıkarım süresi azaltılır.

FP8 Desteği

Çıkışıyla FP8 (8 bit kayan nokta), TensorRT-LLM, optimize edilmiş çıkarım için model ağırlıklarını bu biçime dönüştürmek üzere NVIDIA'nın H100 GPU'larından yararlanır. FP8, özellikle büyük ölçekli dağıtımlarda yararlı olan azaltılmış bellek tüketimi ve daha hızlı hesaplama sağlar.

TensorRT-LLM Mimarisi ve Bileşenleri

TensorRT-LLM'nin mimarisini anlamak, LLM çıkarımı için yeteneklerini daha iyi kullanmanıza yardımcı olacaktır. Temel bileşenleri parçalayalım:

Model Tanımı

TensorRT-LLM, basit bir Python API'si kullanarak LLM'leri tanımlamanıza olanak tanır. API, bir grafik gösterimi Bu sayede GPT veya BERT gibi LLM mimarilerinde yer alan karmaşık katmanların yönetimi daha kolay hale geliyor.

Ağırlık Bağlamaları

Modeli derlemeden önce, ağırlıklar (veya parametreler) ağa bağlanmalıdır. Bu adım, ağırlıkların TensorRT motoruna gömülmesini sağlayarak hızlı ve verimli çıkarım sağlar. TensorRT-LLM ayrıca derlemeden sonra ağırlık güncellemelerine izin vererek sık güncelleme gerektiren modeller için esneklik sağlar.

Desen Eşleştirme ve Füzyon

Füzyon Operasyonu TensorRT-LLM'nin bir diğer güçlü özelliğidir. Birden fazla işlemi (örneğin, aktivasyon fonksiyonlarına sahip matris çarpımları) tek bir CUDA çekirdeğine birleştirerek, TensorRT birden fazla çekirdek başlatma ile ilişkili ek yükü en aza indirir. Bu, bellek transferlerini azaltır ve çıkarımı hızlandırır.

eklentiler

TensorRT'nin yeteneklerini genişletmek için geliştiriciler şunları yazabilir: eklentileri—çok başlı dikkat bloklarını optimize etme gibi belirli görevleri gerçekleştiren özel çekirdekler. Örneğin, Flaş Dikkat eklenti LLM dikkat katmanlarının performansını önemli ölçüde iyileştirir.

Ölçütler: TensorRT-LLM Performans Kazanımları

TensorRT-LLM, çeşitli GPU'larda LLM çıkarımı için önemli performans kazanımları göstermektedir. İşte farklı NVIDIA GPU'larında TensorRT-LLM kullanılarak çıkarım hızının (saniye başına belirteç olarak ölçülen) karşılaştırması:

Model Hassas Giriş/Çıkış Uzunluğu H100 (80 GB) A100 (80 GB) L40S FP8
GPTJ6B FP8 128/128 34,955 11,206 6,998
GPTJ6B 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

Bu kıyaslamalar, TensorRT-LLM'nin özellikle daha uzun diziler için performansta önemli iyileştirmeler sağladığını göstermektedir.

Uygulamalı: TensorRT-LLM'yi Kurma ve Oluşturma

Adım 1: Bir Konteyner Ortamı Oluşturun

Kullanım kolaylığı için TensorRT-LLM, modeller oluşturmak ve çalıştırmak için kontrollü bir ortam yaratmak amacıyla Docker görüntüleri sağlar.

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


Adım 2: Konteyneri Çalıştırın

Geliştirme konteynerini NVIDIA GPU'larına erişimle çalıştırın:

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

Adım 3: TensorRT-LLM'yi Kaynaktan Derleyin

Konteynerin içerisinde, TensorRT-LLM'yi aşağıdaki komutla derleyin:

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

Bu seçenek özellikle Python bağımlılıklarıyla ilgili uyumluluk sorunlarından kaçınmak istediğinizde veya üretim sistemlerinde C++ entegrasyonuna odaklandığınızda kullanışlıdır. Derleme tamamlandıktan sonra, C++ çalışma zamanı için derlenmiş kitaplıkları cpp/build/tensorrt_llm dizin, C++ uygulamalarınızla entegrasyona hazır.

Adım 4: TensorRT-LLM C++ Çalışma Zamanını Bağlayın

TensorRT-LLM'yi C++ projelerinize entegre ederken, projenizin include yollarının şuraya işaret ettiğinden emin olun: cpp/include dizin. Bu, kararlı, desteklenen API başlıklarını içerir. TensorRT-LLM kitaplıkları, C++ derleme sürecinizin bir parçası olarak bağlanır.

Örneğin, projenizin CMake yapılandırması şunları içerebilir:

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

Bu entegrasyon, özel C++ projelerinizde TensorRT-LLM optimizasyonlarından yararlanmanızı sağlayarak, düşük seviyeli veya yüksek performanslı ortamlarda bile verimli çıkarımlar yapmanızı sağlar.

Gelişmiş TensorRT-LLM Özellikleri

TensorRT-LLM yalnızca bir optimizasyon kütüphanesinden daha fazlasıdır; büyük ölçekli LLM dağıtımlarını ele almaya yardımcı olan birkaç gelişmiş özellik içerir. Aşağıda, bu özelliklerden bazılarını ayrıntılı olarak inceliyoruz:

1. Uçuş Sırasında Toplu İşlem

Geleneksel partileme, işleme tabi tutulmadan önce partinin tamamen toplanmasını beklemeyi gerektirir; bu da gecikmelere neden olabilir. Uçuş Sırasında Toplu İşlem bunu, bir toplu işlem içinde tamamlanan istekler üzerinde çıkarımı dinamik olarak başlatarak ve diğer istekleri toplayarak değiştirir. Bu, boşta kalma süresini en aza indirerek ve GPU kullanımını iyileştirerek genel verimi artırır.

Bu özellik, tepki süresinin kritik öneme sahip olduğu sohbet robotları veya sesli asistanlar gibi gerçek zamanlı uygulamalarda özellikle değerlidir.

2. Sayfalanmış Dikkat

Sayfalanmış Dikkat büyük giriş dizilerini işlemek için bir bellek optimizasyon tekniğidir. Bir dizideki tüm belirteçler için bitişik bellek gerektirmek yerine (bu, bellek parçalanmasına yol açabilir), Paged Attention, modelin anahtar-değer önbellek verilerini belleğin "sayfalarına" bölmesine olanak tanır. Bu sayfalar dinamik olarak tahsis edilir ve ihtiyaç duyulduğunda serbest bırakılır, böylece bellek kullanımı optimize edilir.

Sayfalanmış Dikkat, özellikle GPT ve LLaMA gibi üretken modellerde, büyük dizi uzunluklarını işlemek ve bellek yükünü azaltmak için kritik öneme sahiptir.

3. Özel Eklentiler

TensorRT-LLM, işlevselliğini şu şekilde genişletmenize olanak tanır: özel eklentilerEklentiler, standart TensorRT kütüphanesinin kapsamadığı belirli optimizasyonları veya işlemleri etkinleştiren kullanıcı tanımlı çekirdeklerdir.

Örneğin, Flaş Dikkat eklentisi, Transformer tabanlı modellerde çok başlı dikkat katmanlarını optimize eden iyi bilinen bir özel çekirdektir. Geliştiriciler bu eklentiyi kullanarak, LLM'lerin en kaynak yoğun bileşenlerinden biri olan dikkat hesaplamasında önemli hızlanmalar elde edebilirler.

TensorRT-LLM modelinize özel bir eklenti entegre etmek için özel bir CUDA çekirdeği yazabilir ve bunu TensorRT'ye kaydedebilirsiniz. Eklenti, model yürütme sırasında çağrılacak ve özelleştirilmiş performans iyileştirmeleri sağlayacaktır.

4. NVIDIA H8'de FP100 Hassasiyeti

İle FP8 hassasiyetiTensorRT-LLM, NVIDIA'nın en son donanım yeniliklerinden yararlanır H100 Hopper mimarisi. FP8, ağırlıkları ve aktivasyonları 8 bitlik kayan nokta biçiminde depolayarak LLM'lerin bellek ayak izini azaltır ve bu da çok fazla doğruluktan ödün vermeden daha hızlı hesaplamayla sonuçlanır. TensorRT-LLM, optimize edilmiş FP8 çekirdeklerini kullanmak için modelleri otomatik olarak derler ve çıkarım sürelerini daha da hızlandırır.

Bu, TensorRT-LLM'yi en üst düzey performans ve enerji verimliliği gerektiren büyük ölçekli dağıtımlar için ideal bir seçim haline getirir.

Örnek: Triton Inference Server ile TensorRT-LLM'yi Dağıtma

Üretim dağıtımları için NVIDIA'nın Triton Çıkarım Sunucusu Ölçekte modelleri yönetmek için sağlam bir platform sağlar. Bu örnekte, Triton kullanarak TensorRT-LLM için optimize edilmiş bir modelin nasıl dağıtılacağını göstereceğiz.

Adım 1: Model Deposunu Kurun

Triton için TensorRT-LLM model dosyalarınızı depolayacak bir model deposu oluşturun. Örneğin, bir GPT2 modeli derlediyseniz, dizin yapınız şu şekilde görünebilir:

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

Adım 2: Triton Yapılandırma Dosyasını Oluşturun

Aynısı model_repository/gpt2/ dizin, adında bir yapılandırma dosyası oluşturun config.pbtxt Triton'a modeli nasıl yükleyip çalıştıracağını söyleyen bir komuttur. İşte TensorRT-LLM için temel bir yapılandırma:

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

input [
  {
    name: "input_ids"
    data_type: TYPE_INT32
    dims: [-1]
  }
]

output [
  {
    name: "logits"
    data_type: TYPE_FP32
    dims: [-1, -1]
  }
]

Adım 3: Triton Sunucusunu Başlatın

Triton'u model deposuyla başlatmak için aşağıdaki Docker komutunu kullanın:

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

Adım 4: Çıkarım İsteklerini Triton'a Gönder

Triton sunucusu çalışmaya başladıktan sonra, HTTP veya gRPC kullanarak ona çıkarım istekleri gönderebilirsiniz. Örneğin, curl bir istek göndermek için:

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, isteği TensorRT-LLM motorunu kullanarak işleyecek ve logitleri çıktı olarak döndürecektir.

TensorRT-LLM ile LLM Çıkarımını Optimize Etmek İçin En İyi Uygulamalar

TensorRT-LLM'nin gücünden tam olarak yararlanmak için, hem model optimizasyonu hem de dağıtımı sırasında en iyi uygulamaları takip etmek önemlidir. İşte bazı önemli ipuçları:

1. Optimizasyondan Önce Modelinizin Profilini Çıkarın

Niceleme veya çekirdek birleştirme gibi optimizasyonları uygulamadan önce, modelinizin yürütülmesindeki mevcut darboğazları anlamak için NVIDIA'nın profil oluşturma araçlarını (Nsight Systems veya TensorRT Profiler gibi) kullanın. Bu, iyileştirme için belirli alanları hedeflemenize ve daha etkili optimizasyonlara yol açmanıza olanak tanır.

2. En İyi Performans İçin Karma Hassasiyet Kullanın

TensorRT-LLM ile modelleri optimize ederken, karışık hassasiyet (FP16 ve FP32'nin bir kombinasyonu) doğrulukta büyük bir kayıp olmadan önemli bir hız artışı sunar. Hız ve doğruluk arasında en iyi denge için, özellikle H8 GPU'larında mümkün olduğunda FP100'i kullanmayı düşünün.

3. Büyük Diziler İçin Sayfalanmış Dikkatin Kaldıraç Etkisi

Belge özetleme veya çok turlu konuşmalar gibi uzun girdi dizilerini içeren görevler için her zaman etkinleştirin Sayfalanmış Dikkat bellek kullanımını optimize etmek için. Bu, bellek yükünü azaltır ve çıkarım sırasında bellek yetersizliği hatalarını önler.

4. Çoklu GPU Kurulumları için Paralelliği İnce Ayarlayın

LLM'leri birden fazla GPU veya düğüme dağıtırken, ayarların ince ayarını yapmak önemlidir. tensör paralelliği ve boru hattı paralelliği belirli iş yükünüze uyacak şekilde. Bu modları düzgün bir şekilde yapılandırmak, hesaplama yükünü GPU'lar arasında eşit şekilde dağıtarak önemli performans iyileştirmelerine yol açabilir.

Sonuç

TensorRT-LLM, büyük dil modellerini optimize etme ve dağıtmada bir paradigma değişimini temsil eder. Niceleme, işlem birleştirme, FP8 hassasiyeti ve çoklu GPU desteği gibi gelişmiş özellikleriyle TensorRT-LLM, LLM'lerin NVIDIA GPU'larında daha hızlı ve daha verimli çalışmasını sağlar. Gerçek zamanlı sohbet uygulamaları, öneri sistemleri veya büyük ölçekli dil modelleri üzerinde çalışıyor olun, TensorRT-LLM performans sınırlarını zorlamak için gereken araçları sağlar.

Bu kılavuz, TensorRT-LLM'yi kurma, Python API'siyle modelleri optimize etme, Triton Inference Server'da dağıtma ve verimli çıkarım için en iyi uygulamaları uygulama konusunda size yol gösterdi. TensorRT-LLM ile AI iş yüklerinizi hızlandırabilir, gecikmeyi azaltabilir ve üretim ortamlarına ölçeklenebilir LLM çözümleri sunabilirsiniz.

Daha fazla bilgi için resmiyete bakın TensorRT-LLM belgeleri ve Triton Inference Server belgeleri.

Son beş yılımı, Makine Öğrenimi ve Derin Öğrenmenin büyüleyici dünyasına dalarak geçirdim. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla farklı yazılım mühendisliği projesine katkıda bulunmamı sağladı. Devam eden merakım, beni daha fazla keşfetmeye hevesli olduğum bir alan olan Doğal Dil İşleme'ye de çekti.