“RTX ile Yüksek Performanslı Yapay Zeka Uygulamaları İçin NVIDIA TensorRT Kullanımı”

NVIDIA TensorRT for RTX, artık C++ ve Python uygulamalarında entegrasyon için SDK olarak indirilebilir durumda. Bu yenilik, NVIDIA GeForce RTX GPU’larını destekleyen yüksek performanslı AI çıkarımı için optimize edilmiş bir çözümdür. İlgili cihazlar ise NVIDIA Turing’den başlayarak en son NVIDIA Blackwell nesline kadar, aynı zamanda en yeni NVIDIA RTX PRO serisini de kapsamaktadır.

Bu ilk sürüm; konvolüsyonal sinir ağları (CNN), konuşma modelleri ve dağılım modelleri gibi geniş bir iş yükü yelpazesi için yüksek performanslı çıkarım sunmaktadır. TensorRT for RTX, yaratıcı, oyun ve üretkenlik uygulamaları için ideal bir çözümdür. Ayrıca, geliştiricilerin hızlıca başlayabilmesi için başlangıç API örnekleri ve demosu içeren bir GitHub proje deposu da mevcuttur.

TensorRT for RTX Nedir?

TensorRT for RTX, NVIDIA’nın önceden kanıtlanmış TensorRT çıkarım kütüphanesi üzerine kurulmuş bir sistemdir ve NVIDIA RTX GPU’larındaki AI modellerinin dağıtımını basitleştirir. Bu sistem, RTX hızlandırmalı masaüstü, dizüstü ve iş istasyonlarında AI modellerinin etkin bir şekilde kullanılmasına olanak tanır.

TensorRT for RTX, NVIDIA TensorRT’nin yerini alacak şekilde tasarlanmıştır. Runtime’da, Just-In-Time (JIT) optimizasyonu sunan bu sistem, kullanıcıların RTX hızlandırmalı PC’lerinde doğrudan geliştirilmiş çıkarım motorlarını derleyebilmesini sağlar. Bu da uzun önceden derleme adımlarını ortadan kaldırarak motorların hızlıca üretilmesine, uygulama taşınabilirliğinin artmasına, dağıtım akışının kolaylaşmasına ve çalışma zamanı performansının iyileşmesine yardımcı olur.

TensorRT for RTX, hafif uygulamalara entegrasyon ve bellek kısıtlı ortamlarda dağıtım için 200 MB altındaki kompakt bir yapıya sahiptir. Bu durum, tüketici sınıfı cihazlarda gerçek zamanlı, hızlı yanıtlama gerektiren AI uygulamalarını pratik ve performanslı hale getirmektedir.

A line graph showing GPU processing time on the Y-axis and Step Number on the X axis when using Dynamic Shapes. Step Number 1 shows a GPU processing time of 270ms, and steps 2 through 50 show a processing time of 100ms.
Dinamik şekiller kullanıldığında FLUX.1-dev transformer modelinin performansı hakkında bilgiler.

TensorRT for RTX SDK, aşağıdaki bileşenleri içermektedir:

  • Windows (zip) ve Linux (tar) desteği
  • C++ geliştirme için başlık dosyaları
  • Hızlı prototipleme için Python bağlamaları
  • Dağıtım için optimizasyon ve çalışma zamanı kütüphaneleri
  • ONNX modelleri içeri aktarmak için parser kütüphanesi
  • Dağıtımı ve benchmark yapmayı kolaylaştıran geliştirici araçları

TensorRT for RTX SDK’sını kurulum kılavuzunu takip ederek indirebilirsiniz.

TensorRT for RTX Özellikleri

TensorRT for RTX optimizasyonları iki aşamada uygulanmaktadır:

  • 1. Aşama: Önceden derleme (AOT) optimizasyonu ile model grafiği geliştirilen ve dağıtım için serileştirilebilen bir motora dönüştürülmektedir.
  • 2. Aşama: Çalışma zamanında, JIT optimizasyon motoru, kurulu RTX GPU’su üzerinde çalışma için motoru özelleştirmektedir.

Özelleştirilen bu optimizasyon akışını incelemek için helloWorld örneğine göz atabilirsiniz.

ONNX model dağıtımı için tensorrt_rtx adında bir komut satırı aracı da sunulmakta ve TensorRT for RTX motorlarının derlenmesi ve profilinin belirlenmesi için kullanılmaktadır.

Dinamik Şekiller

Dinamik şekiller özelliği, ağ giriş ve çıkışlarının bazı veya tüm tensor boyutlarını çalışma zamanında belirleme imkanı sunmaktadır.

Dinamik boyutlar, boyutlarının -1 olarak atanması ile belirtilmektedir.

auto input = network->addInput("input", nvinfer1::DataType::kFLOAT, nvinfer1::Dims2{-1, kInputSize});

Dinamik giriş boyutlarının optimize edileceği aralıkları tanımlayan optimizasyon profilleri yapılandırma aşamasında belirtilmelidir.

nvinfer1::IOptimizationProfile* profile = builder->createOptimizationProfile();
profile->setDimensions("input", nvinfer1::OptProfileSelector::kMIN, nvinfer1::Dims2(1, kInputSize));
profile->setDimensions("input", nvinfer1::OptProfileSelector::kOPT, nvinfer1::Dims2(4, kInputSize));
profile->setDimensions("input", nvinfer1::OptProfileSelector::kMAX, nvinfer1::Dims2(32, kInputSize));
builderConfig->addOptimizationProfile(profile);

Çalışma zamanında, yürütme bağlamı oluşturulduğunda, JIT optimizasyonları tüm giriş şekilleri aralığına göre çalışabilen yedek çekirdekler üretmektedir. İstediğiniz optimizasyon profili ve tüm dinamik boyutların çalışma zamanındaki şekilleri belirlenmelidir.

context->setOptimizationProfileAsync(0, stream);
context->setInputShape("input", nvinfer1::Dims2(1, kInputSize));

Dinamik şekillerin TensorRT for RTX’teki uygulaması, TensorRT’den daha büyük bir avantaj sunmakta; çünkü şekil özel çekirdekler, anlık olarak kullanılabilir bir şekilde oluşturulabilmektedir. Bu, yedek çekirdekler kullanılırken, arka planda derlenmekte olan öze özel çekirdeklerin otomatik olarak seçilmesini sağlar. Böylece, kullanıma göre performans optimizasyonları gerçekleştirilir.

Runtime Cache

Runtime cache, JIT derlenmiş çekirdekleri depolamak için kullanılabilir ve runtime yapılandırma nesnesi ile oluşturulmaktadır.

auto runtimeCache = 
std::unique_ptr<nvinfer1::IRuntimeCache>(runtimeConfig->createRuntimeCache());
runtimeConfig->setRuntimeCache(*runtimeCache);

Yürütme bağlamı, tüm çıkarım işlemleri için ekli runtime cache’i kullanır ve yeni JIT derlenmiş çekirdekler bu cache’e eklenir. İsteğe bağlı olarak, cache bir dosyaya serileştirilerek uygulama açılış sürelerini azaltmak ve peşin performans sağlamak amacıyla kalıcı hale getirilebilir.

auto serializedRuntimeCache = 
std::unique_ptr<nvinfer1::IHostMemory>(runtimeCache->serialize());

Runtime cache hakkında daha fazla bilgi için belgelere göz atabilirsiniz.

AOT Olmadan GPU’lar

TensorRT for RTX AOT – optimize edilmiş motorlar, NVIDIA Ampere, Ada ve Blackwell nesli RTX GPU’larında çalıştırılabilir (tam destek matrisine göz atabilirsiniz) ve derleme işlemi için GPU’ya ihtiyaç duymazlar. Eğer geniş bir taşınabilirlik gerekli değilse, geliştiriciler, TensorRT for RTX’in hesaplama yeteneği API’sini kullanarak hedef GPU mimarilerini sınırlayarak motor boyutunu ve derleme zamanını azaltabilmektedir.

Ağırlıksız Motorlar ve Yenileme

TensorRT for RTX, ağırlık olmadan motor oluşturma imkanı sunar. Bu, uygulama paketinin gönderim boyutunu minimallestirmek için önemlidir, örneğin, ağırlıklar motorla birlikte, bir ONNX modeli olarak gönderildiğinde.

Ağırlık çalkantılı bir motor inşa ederken, motorun yenileme yapılabilir olduğunun belirtilmesi önemlidir. Bu, gerektiği durumda ağırlıkların daha sonra güncellenebileceği anlamına gelir.

Uygulama ile ilgili geri bildirimlerinizi, sorularınızı veya tartışmalarınızı GitHub’daki sorun sayfasında ya da TensorRT for RTX geliştirici forumunda paylaşabilirsiniz. Ayrıca, Discord kanalımızda da bizimle bağlantı kurabilirsiniz.

Kaynak

Nvdia Blog

Exit mobile version