“NVIDIA RTX AI PC’lerde Windows Uygulamaları için Yüksek Performanslı AI Modellerinin Dağıtımı”

Bugün, Microsoft geliştiricilere Windows ML’yi sunuyor. Windows ML, C#, C++ ve Python geliştiricilerinin PC donanımında (CPU, NPU ve GPU’lar) AI modellerini en verimli şekilde çalıştırmasını sağlıyor. NVIDIA RTX GPU’larda, GPU’ların Tensor Core’larından ve FP8 ile FP4 gibi mimari gelişmelerden yararlanarak NVIDIA TensorRT ile RTX Yürütme Sağlayıcısı (EP) kullanılıyor ve bu sayede Windows tabanlı RTX AI PC’lerde en hızlı AI çıkarım performansı elde ediliyor.

“Windows ML, GeForce RTX ve RTX Pro GPU’lar için tam TensorRT hızlandırmasını serbest bırakıyor ve Windows 11 üzerinde olağanüstü AI performansı sağlıyor” diyor, Windows Platform ve Geliştirici’den Albay Logan Iyer. “Bugün geliştiricilerin güçlü AI deneyimleri oluşturup dağıtmaya başlaması için heyecanlıyız.”

Windows ML ve TensorRT için RTX EP’yi Tanıyalım

Video 1. NVIDIA RTX AI PC’lerde Windows uygulamalarında yüksek performanslı AI modelleri dağıtma

Windows ML, ONNX Runtime API’lerini kullanarak çıkarım işlemini gerçekleştiriyor. Bu API’ler, CPU, NPU ve GPU donanımındaki yürütme sağlayıcılarının dinamik başlatma ve bağımlılık yönetimini yönetiyor. Ayrıca, Windows ML, gerekli yürütme sağlayıcısını otomatik olarak indirdiğinden, uygulama geliştiricilerin farklı donanım üreticileri arasında bağımlılıkları ve paketleri yönetmesine gerek kalmamaktadır.

Diagram showing the Windows ML architecture stack, illustrating steps from applications to execution providers
Şekil 1. Windows ML yığın diyagramı

NVIDIA TensorRT için RTX Yürütme Sağlayıcısı (EP), Windows ML geliştiricilerine ONNX Runtime kullanırken birçok avantaj sunuyor:

  • RTX GPU’lar üzerinde *önceki DirectML uygulamalarına göre* %50 daha hızlı throughput ile düşük gecikmeli çıkarım yapma.
  • Windows ML ile doğrudan entegre olmuş esnek bir EP mimarisi ve ORT ile entegrasyon.
  • Son kullanıcı cihazlarında yaygın dağıtım için *just-in-time compilation* (anı anında derleme) özelliği. TensorRT için RTX içindeki derleme süreci hakkında daha fazla bilgi almak için buraya göz atabilirsiniz.
  • Tensor Core’lar üzerinde *FP8* ve *FP4* gibi mimari gelişmeleri kullanma.
  • 200 MB’ın altında hafif bir paket.
  • LLM’lerden (aşağıda belirtilen ONNX Runtime GenAI SDK uzantısı), difüzyon, CNN ve daha fazlasını kapsayan çeşitli model mimarileri için destek.

TensorRT için RTX EP hakkında daha fazla bilgi almak için şu bağlantıya göz atabilirsiniz.

Şekil 2. Windows ML ile Direct ML arasında çeşitli modeller için jenerasyon throughput hızlanması. Veriler NVIDIA RTX 5090 GPU ile ölçülmüştür.

Yürütme Sağlayıcısını Seçmek

Windows ML ile birlikte sunulan ONNX Runtime 1.23.0 sürümü, cihaz seçiminde üretici ve yürütme sağlayıcı bağımsız API’ler sunuyor. Bu özellik, her donanım üretici platformu için en uygun yürütme sağlayıcısından yararlanmayı sağlayan uygulama mantığını büyük ölçüde azaltıyor. Aşağıda, NVIDIA GPU’ları için maksimum performansı elde etmek adına nasıl etkili bir şekilde yapılabileceğine dair bir kod örneği bulunmaktadır.

// İstenen yürütme sağlayıcı kütüphanelerini kaydet
auto env = Ort::Env(ORT_LOGGING_LEVEL_WARNING);
env.RegisterExecutionProviderLibrary("nv_tensorrt_rtx", L"onnxruntime_providers_nv_tensorrt_rtx.dll");

// Seçenek 1: ONNX Runtime yürütme politikasına güvenin
Ort::SessionOptions sessions_options;
sessions_options.SetEpSelectionPolicy(OrtExecutionProviderDevicePolicy_PREFER_GPU);

// Seçenek 2: EpDevices üzerinden geçiş yaparak manuel cihaz seçimi yapın
std::vector<Ort::ConstEpDevice> ep_devices = env.GetEpDevices();
std::vector<Ort::ConstEpDevice> selected_devices = select_ep_devices(ep_devices);

Ort::SessionOptions session_options;
Ort::KeyValuePairs ep_options;
session_options.AppendExecutionProvider_V2(env, selected_devices, ep_options);
# İstenen yürütme sağlayıcı kütüphanelerini kaydet
ort.register_execution_provider_library("NvTensorRTRTXExecutionProvider", "onnxruntime_providers_nv_tensorrt_rtx.dll")

# Seçenek 1: ONNX Runtime yürütme politikasına güvenin
session_options = ort.SessionOptions()
session_options.set_provider_selection_policy(ort.OrtExecutionProviderDevicePolicy.PREFER_GPU)

# Seçenek 2: EpDevices üzerinden geçiş yaparak manuel cihaz seçimi yapın
ep_devices = ort.get_ep_devices()
ep_device = select_ep_devices(ep_devices)

provider_options = {}
sess_options.add_provider_for_devices([ep_device], provider_options)

Önceden Derlenmiş Çalışma Zamanları

Model çalışma zamanları artık EP context ONNX dosyaları kullanılarak önceden derlenebiliyor. Her yürütme sağlayıcısı, bu özelliği kullanarak bir ONNX modelinin tüm alt grafiklerini optimize edebiliyor ve EP spesifik uygulama sunabiliyor. Bu süreç, Windows ML ile hızlı yükleme sürelerini sağlamak için disk üzerine serileştirilerek kullanılabiliyor; genelde bu, Direct ML’deki geleneksel işlemci temel yöntemlerden daha hızlıdır.

Aşağıdaki grafik, TensorRT için RTX EP’nin derleme süresi aldığını, ancak daha hızlı yükleyip modeli çalıştırmanın mümkün olduğunu gösteriyor çünkü optimizasyonlar zaten serileştirilmiştir. Ayrıca, TensorRT için RTX EP’deki çalışma zamanı önbellek özelliği, derleme aşamasında oluşturulan çekirdeklerin serileştirilip bir dizine kaydedilmesini sağlar, böylece bir sonraki çıkarmalar için yeniden derlenmeleri gerekmez.

Şekil 3. DeepSeek-R1-Distill-Qwen-7B model çalışma sürelerinin karşılaştırılması: ONNX modeli, ONNX EP context dosyaları ve EP context ve Runtime Cache ile. Daha düşük değer daha iyidir.

Veri Transferinin Aşırı Yükü

Yeni ONNX Runtime cihaz API’si, her yürütme sağlayıcısı için mevcut olan cihazları listelemeye olanak tanıyor. Bu yeni anlayış sayesinde, geliştiriciler artık *ekstra EP bağımlı tür belirtimleri* olmadan cihaz spesifik tensörleri tahsis edebiliyor. CopyTensors ve IOBinding’i kullanarak, bu API, geliştiricilerin *EP-agnostic, GPU hızlandırılmış çıkarım süreçlerini* minimal veri transferi aşırı yüküyle gerçekleştirmesine olanak sağlıyor; bu da daha iyi bir performans ve daha temiz bir kod tasarımı getiriyor.

Şekil 5, ONNX Runtime Device API’sini kullanarak Stable Diffusion 3.5 Medium modelinin performansını gösteriyor. Şekil 4 ise aynı model için difüzyon döngüsündeki tek bir iterasyonun zamanını, I/O bağlantıları ile ve onsuz gösteriyor.

Şekil 4. Stable Diffusion 3.5 Medium modelinin AMD Ryzen 7 7800X3D CPU + RTX 5090 GPU ile PCI 5 üzerinden çalıştırılması. Daha düşük zaman daha iyidir.

NVIDIA Nsight sistemlerini kullanarak, IO binding kullanılmadığında ana bilgisayar ile cihaz arasındaki tekrarlayan kopyaların ötesinde performans aşırılıklarını görselleştirdik:

Şekil 5. Ekstra senkronize PCI trafiğinin oluşturduğu aşırılıkları gösteren Nsight Systems zaman çizgisi.

Her çıkarım çalıştırmasından önce giriş tensörünün bir kopya işlemi gerçekleşiyor ki bu yeşil ile vurgulanan profilimizde gösteriliyor ve bir çıkış için ana bilgisayardan cihaza kopyalama işlemi de hemen hemen aynı süreyi alıyor. Ayrıca, ONNX Runtime varsayılan olarak sayfanabilir hafızayı kullanıyor; bu nedenle, ana bilgisayardan cihaza kopyalama işlemi bir gizli senkronizasyon sağlıyor, ancak CUDA’nın cudaMemCpyAsync API’si ONNX Runtime tarafından kullanılıyor.

Diğer yandan, giriş ve çıkış tensörleri IO bağlı iken, girişin ana bilgisayardan cihaza kopyasını sadece çok model çıkarım boru hattı öncesinde gerçekleştiriyoruz. Aynı şey, çıkışın cihazdan ana bilgisayara kopyalanması için geçerli, sonrasında ana bilgisayarı GPU ile senkronize ediyoruz. Yukarıdaki asenkron Nsight izi, kopyalama veya senkronizasyon işlemi olmadan döngü içerisinde birden fazla çıkarım çalışması gerçekleştirmektedir ve bu sayede ana bilgisayar kaynaklarını serbest bırakıyoruz. Bu senaryo için *5.5 milisaniye total copy time* ile 30 iterasyonlu bir döngü için kopyalama süresinde %75’lik bir azalma sağlıyoruz!

TensorRT için RTX Özelleştirmeleri

TensorRT için RTX yürütmesi, performansı artırmak için özel seçenekler sunuyor. Bu optimizasyonlardan en önemlileri aşağıda listelenmiştir:

  • CUDA grafikleri: enable_cuda_graph ayarını etkinleştirerek, TensorRT’den gönderilen tüm CUDA çekirdeklerini yakalayan bir grafik oluşturmak mümkündür; böylece CPU üzerindeki başlatma aşırılıkları azaltılır. Bu yöntem, *LLM’ler için yaklaşık %30 performans kazancı* sağlar ve geleneksel AI modelleri ile CNN mimarileri gibi birçok model türü için geçerlidir.
Şekil 6. CUDA grafikleri etkinleştirildiğinde elde edilen throughput hız artışlarını gösterir; veriler NVIDIA RTX 5090 GPU ile birkaç LLM üzerinde ölçülmüştür.
  • Çalışma zamanı önbelleği: nv_runtime_cache_path, derlenmiş çekirdeklerin hızlı yükleme süreleri sağlaması amacıyla depolanabileceği bir dizine işaret eder; bu özellik, EP context düğümleri oluşturdular.
  • Dinamikk şekiller: Bilinmeyen dinamik şekil aralıklarını, profile_{min|max|opt]_shapes ayarlarını ayarlayarak veya modelin giriş şekillerini belirli sabit şekillerle doldurmak için AddFreeDimensionOverrideByName kullanarak, mevcut şekilleri geçersiz kılabilirsiniz. Bu özellikle deneysel aşamadadır.

Özet

Microsoft ile iş birliği yaparak, Windows uygulama geliştiricilerine NVIDIA RTX GPU’lar için maksimum performans sunan Windows ML ve TensorRT için RTX EP’yi sunmaktan heyecan duyuyoruz. Topaz Labs ve Wondershare Filmora gibi önde gelen Windows uygulama geliştiricileri, şu anda Windows ML ve TensorRT için RTX EP’yi uygulamalarına entegre etmek için çalışıyorlar.

Windows ML, ONNX Runtime API’leri ve TensorRT için RTX EP ile başlamanız için aşağıdaki kaynaklardan yararlanabilirsiniz:

Gelecek iyileştirmeleri takip etmeye devam edin ve örneklerimizde gösterilen yeni API’larla hızlı bir şekilde uyum sağlayın. Eğer yanında bir özellik isteği varsa, lütfen GitHub‘da bir sorun açmaktan çekinmeyin!

Teşekkürler

Bu bloga katkılarından dolayı Gaurav Garg, Kumar Anshuman, Umang Bhatt ve Vishal Agarwal’a teşekkür ederiz.

Kaynak

Nvdia Blog

Exit mobile version