Otomotiv araç yazılımı geliştirme alanında, otonom araçlara daha fazla büyük ölçekli yapay zeka (AI) modelleri entegre edilmektedir. Bu modeller, görsel AI modellerinden, otonom sürüş için kullanılan uçtan uca AI modellerine kadar geniş bir yelpazeyi kapsamaktadır. Şimdi, hesaplama gücüne olan talep keskin bir şekilde artmış durumda; bu da sistem kararlılığı ve gecikmesi üzerinde olumsuz bir etki yaratabiliyor.
Bu sorunları çözmek için NVIDIA DRIVE SoC’lerinde bulunan Programlanabilir Görüş Hızlandırıcı (PVA), enerji verimliliğini ve genel sistem performansını artırmak için kullanılabilir. PVA kullanarak, genellikle GPU veya diğer donanım motorları tarafından işlenen görevler, yüklerini azaltarak ve kritik görevleri daha verimli bir şekilde yönetmelerine olanak tanıyacak şekilde aktarılabilir.
Bu yazıda, PVA donanım motoruna ve DRIVE platformundaki SDK’ya kısaca bir giriş yapıyoruz. PVA motorunun, ön işleme, son işleme ve diğer bilgisayarla görme algoritmaları dahil olmak üzere bilgisayarla görme (CV) hattındaki tipik kullanım durumlarını sergileyerek, etkinliğini ve verimliliğini vurguluyoruz. Son olarak, örnek olarak, NIO’nun NVIDIA PVA motorunu nasıl kullandığını ve veri hattındaki optimize edilmiş algoritmalarla GPU veya video görüntü oluşturucu (VIC) görevlerini nasıl harcadığını ayrıntılı bir şekilde açıklıyoruz, bu sayede otonom araç sistemlerinin genel performansını artırıyoruz.
PVA Donanımının Genel Görünümü
PVA motoru, görüntü işleme ve bilgisayarla görme algoritmalarının hızlandırılması için optimize edilmiş, ileri düzey bir çoklu komut kelimesi (VLIW) tek komut çoklu veri (SIMD) dijital sinyal işlemcisidir.
PVA, son derece düşük güç tüketimi ile mükemmel performans sunar. PVA, heterojen bir hesaplama boru hattının parçası olarak CPU, GPU ve diğer hızlandırıcılarla eşzamanlı ve uyumlu bir şekilde kullanılabilir.
NVIDIA Orin üzerindeki CV kümesinde bir PVA örneği bulunmaktadır; bu yüksek performanslı sistem-on-chip (SoC), özellikle otonom araçlar ve robotik için geliştirilmiştir.
Her PVA içinde iki vektör işleme alt sistemi (VPS) bulunmaktadır. Her VPS aşağıdakilere sahiptir:
- 1 vektör işleme birimi (VPU) çekirdeği
- 1 ayrılmış arama birimi (DLUT)
- 1 vektör belleği (VMEM)
- 1 komut ön belleği (I-cache)
VPU çekirdeği, ana işlemci birimidir. Bilgisayarla görme için optimize edilmiş bir vektör SIMD VLIW DSP’dir. Komutları I-cache üzerinden alır ve verileri VMEM üzerinden erişir.
DLUT, paralel arama işlemlerinin verimliliğini artırmak için geliştirilmiş özel bir donanım bileşenidir. Tek bir kopyanın bulunduğu arama tablosu ile bağımsız olarak bunları paralel olarak gerçekleştirme yeteneği sunar, böylece bellek kullanımını en aza indirir ve veri bağımlı bellek bankası çatışmalarını önleyerek genel sistem performansını artırır.
VPU VMEM, VPU için yerel veri depolama sağlar, çeşitli görüntü işleme ve bilgisayarla görme algoritmalarının etkin bir şekilde uygulanmasına olanak tanır. R5 ve diğer sistem düzeyindeki bileşenlerle veri alışverişini kolaylaştırmak için dış VPU konaklarından erişim destekler.
VPU I-cache, talep üzerine VPU’ya komut verisi tedarik eder, sistem belleğinden kaybolan komut verilerini ister ve VPU için geçici komut depolama sağlar.
Her VPU görevinde R5, DMA’yı yapılandırır, isteğe bağlı olarak VPU programını VPU I-cache’e önceden yükler ve bir görev işleme çiftini başlatır. Orin PVA ayrıca, herset VPS ve DMA arasında paylaşılacak L2 SRAM belleği de içerir.
Veri taşımak için kullanılan iki DMA cihazı, dış bellek, PVA L2 belleği, iki VMEM (her VPS’de bir tane), R5 TCM (sıkı bağlı bellek), DMA tanımlayıcı belleği ve PVA düzeyindeki yapılandırma kayıtları arasında veri taşıma işlemlerinde görev alır.
Araçların hafif yük altında olduğu sistemlerde, iki paralel DMA erişimi DRAM’e gidiş dönüş başına 15 GB/s’ye kadar okuma/yazma bant genişliği sağlayabilir. Yoğun yük altında bu bant genişliği, her biri için 10 GB/s’ye kadar ulaşabilir.
Bilişim kapasiteleri açısından, INT8 GMACs (Giga Çarpma-Toplayıcı İşlemleri) 2048’dir; DLUT hariç. FP32 GMACs ise her PVA örneği için 32’dir.
PVA SDK’ya Giriş
CUDA toolkit’in GPU’lar için olduğu gibi, NVIDIA PVA SDK, PVA donanımının yeteneklerini kullanan bilgi görselleştirme algoritmaları geliştirmek için tasarlanmıştır. PVA SDK, CV ve DL/ML algoritmalarının geliştirilmesi, dağıtımı ve güvenlik sertifikasyonu için çalışma zamanı API’leri, araçlar ve eğitimler sunar. Kodun Tegra PVA’da ikili yürütmeye dönüştürülmesi için sorunsuz bir derleme-ulaşım çerçevesi sağlar.
PVA SDK, yazılım geliştirmeyi destekleyen çeşitli kaynaklar sunar:
- Kapsamlı bir başlangıç kılavuzu
- Gerçek bir VPU’yu taklit eden x86 yerel bir emülatör, geliştirmenin ve işlevsel hata ayıklamanın yapılmasına imkan tanır
- Optimize eden bir C/C++ derleyicisi, hata ayıklayıcılar ve entegre geliştirme ortamı içeren eksiksiz bir kod üretim araç seti
- NVIDIA Nsight Systems gibi görsel performans analiz araçları ve VPU kodu performans metrikleri için API’ler içeren profilleme araçları
- Adım adım eğitimler, PVA kavramlarını temel örneklerden ileri düzey optimizasyonlara kadar tanıtır
- VPU iç işleyişleri hakkında ayrıntılı bilgi sağlayan geniş belgeler ve referans kılavuzları içermektedir
PVA SDK, otonom sürüş ve robotik gibi yaygın bilgi görselleştirme kullanım durumlarını desteklemek için birçok hazır algoritma sunar. Bu algoritmalara üretim ortamında varsayılan olarak (kaynak koduna erişim ile) kullanılabilir veya PVA SDK özelliklerini kullanarak özelleştirilmiş algoritmalar geliştirebilirsiniz.
NVIDIA, PVA SDK’ya dayanarak yaygın CV kullanım durumlarına uygun olarak birçok önceden geliştirilmiş algoritma sunmaktadır. PVA algoritmalarını, üretimde kullanılabilir veya sadece kendi değerli algoritmalarınızı geliştirmek için referans olarak kullanabilirsiniz.
Tipik PVA Kullanım Durumları
Otonom araç geliştiricilerinin çoğu, SoC’lerinde yetersiz hesaplama kaynakları ile karşı karşıyadır ve bu da CPU, GPU, VIC ve DLA üzerindeki yüksek yükler doğurmaktadır. Bu sorunları ele almak için PVA donanımı, bu yoğun şekilde kullanılan donanım motorlarından işleme görevlerini offload etmek için düşünülmektedir.
Aşağıda taşınabilecek bazı işlem görevlerine örnekler verilmiştir:
- Görüntü işleme: Bazı görüntü işleme ve CV görevleri PVA’ya geçebilir, böylece GPU, CPU, VIC ve hatta DLA’dan yük azaltılabilir.
- Derin öğrenme işlemleri: Derin öğrenme ağları içerisinde, belirli katmanlar veya hesaplama yoğun operatörler (ROI uyarlamalar gibi) PVA’ya taşınabilir. Ayrıca, bazı durumlarda, küçük derin öğrenme ağları tamamen PVA’ya aktarılabilir.
- Matematiksel hesaplamalar: PVA, bir vektör SIMD VLIW DSP olarak, matris hesaplaması, FFT gibi matematiksel hesaplamaları verimli bir şekilde gerçekleştirebilir.
Aşağıda referans olarak iki kullanım durumu ayrıntılı bir şekilde sunulmuştur:
- AI boru hatlarında ön işleme ve son işleme görevlerinin PVA’ya aktarılması
- Saf CV veya hesaplama yoğun boru hatlarının PVA’ya taşınması
AI Boru Hatlarında Ön İşleme ve Son İşlemeyi PVA’ya Aktarma
Bu, CV boru hattının tipik bir kullanım durumudur. Girdi görüntüleri, gerçek zamanlı senaryolar için canlı bir kameradan veya çevrimdışı senaryolar için bir_decoder’dan_ gelir. Boru hattı, üç aşamadan oluşur:
- Ön işleme
- AI çıkarımı
- Son işleme
PVA donanım motoru, CV boru hattının ön işlemeyi, AI çıkarımını ve son işlemesini etkin ve verimli bir şekilde yönetmek için kritik bir rol oynayabilir.
Ön İşleme
Ön işleme, modelin girişi ile hizalamak veya normalleştirmek için temel CV görevlerini içerir. Bu, yeniden haritalama (bozulma düzeltme), kesme, yeniden boyutlandırma ve renk dönüşümü (YUV’den RGB’ye) gibi işlemleri kapsar.
Bazı durumlarda, görüntüler NVDEC’den (Tegra SoC’deki kod çözücü donanım motoru) geldiklerinde görüntü düzeni blok lineardır. Bu durumda, ön işleme aşamasında blok lineer görüntüyü bir basamak lineer görüntüye dönüştürmek için daha fazla adım atılmalıdır.
Ön işleme görevleri için PVA donanım motoru mükemmel bir şekilde uyum sağlamaktadır. Ancak, bellek açısından sınırlı durumlarda, PVA’nın hesaplama gücünü tam anlamıyla kullanabilmek için bitişik PVA işlemlerinin birleştirilmesi düşünülmelidir.
AI Çıkarımı
AI çıkarımı, iş ihtiyaçlarına bağlı olarak iş dünyası gereksinimleri doğrultusunda gereken temel CV görevlerini yerine getirir. Bu aşama, daha iyi performans için GPU veya DLA (Derin Öğrenme Hızlandırıcısı) üzerinde gerçekleştirilebilir.
PVA çalışma zamanı API’leri, hem NvSciSync hem de yerel CUDA akışlarını destekleyerek, CPU’nın planlama için devre dışı bırakıldığı gecikmeyi önleyerek GPU veya DLA ile ilgili etkin bir şekilde çalıştırılmasına olanak tanır.
Kullanım durumuna bağlı olarak, AI modeli YOLO veya R-CNN nesne tespiti için, lojistik regresyon veya k-en yakın komşu (KNN) sınıflandırma için ve diğer modeller üzerinde çalışabilir.
Son İşleme
Son işleme, tespit sonuçlarını rafine eder. Bu, dışlama işlemleri ile outlier (anormal sonuç) giderme, farklı adayları birleştirme işlemleri veya en iyi hedefi seçmek için maksimum bastırma (NMS) uygulamalarını içerebilir. PVA donanımı, bu görevleri etkili bir şekilde gerçekleştirebilir.
Saf CV veya Hesaplama Yoğun Boru Hatlarını PVA’ya Taşımak
Bu daha spesifik ve karmaşık bir kullanım durumudur; tüm adımlar PVA üzerinde gerçekleştirilebilir. Temel olarak, girdi görüntülerinde özellik noktalarını tespit etmek ve izlemek veya belirli senaryolarda seyrek optik akışı hesaplamakla ilgilidir:
- Görsel piramit, görüntüyü ölçek alanında genişletir.
- Belirli bir tespit algoritması, görüntüdeki özellik noktalarını veya köşeleri tanımlar.
- Bir izleme algoritması, bu özellik noktalarını çerçeve çerçeve takip eder.
Önceki kullanım durumundan farklı olan bazı anahtar yönler şunlardır:
- Hesaplama yoğun işleme: Verilerin her adımı hesaplama açısından yoğundur ve 2D görüntüleri işler. Bu algoritmalar iyi vektörleştirilmiş olup PVA donanımında son derece verimli bir şekilde yürütülebilir. En önemlisi, PVA’nın hesaplama kapasitesi tamamen kullanılmış olur.
- Sıkı bir şekilde bağlı adımlar: İzleme bilgilerini, izlemeyi geliştirmek için bir önceki adımlara döndüren ek bir veri döngüsü vardır. Bu, adımları daha sıkı bağlayarak işler.
- Saf CV boru hattı: Bu kullanım durumu, makine öğrenimi ağlarını içermeyen saf bir bilgisayarla görme boru hattıdır. Her adım öngörülebilir ve açıklanabilir olup yalnızca geleneksel CV algoritmalarına odaklanır.
PVA kullanarak bu görevleri gerçekleştirmek, GPU, VIC, CPU ve DLA üzerindeki yükleri hafifletebilir, böylece daha kararlı ve verimli bir sistem elde edilebilir.
NIO’nun Veri Hattı Optimizasyonu
NIO Inc., premium akıllı elektrikli araçların tasarım, geliştirme ve üretimi üzerine uzmanlaşmış önde gelen bir Çinli otomobil üreticisidir.
NIO’nun aşağıdaki veri hattı, canlı kameralar veya H.264 videolarından gelen görüntülerde ilgi alanlarını kimliksizleştirme, maskeleme veya değiştirme işlemlerini yapmak için özel algoritmalar ve teknikler kullanmaktadır.
Veri Hattının Orijinal Şeması
Şekil 4, NIO’nun veri hattının orijinal versiyonunu göstermektedir. H264 videolarını çözümlemek için NVDEC kullanılmakta, bu süreçte blok lineer YUV görüntüleri üretmektedir. Blok lineer, NVIDIA’ya özel bir iç formattır; bu nedenle dış kullanıcılar bu görüntüleri doğrudan işleyemez.
Daha sonra, blok lineer görüntüleri bir basamak lineer formata dönüştürmek için VIC motoru kullanılır. Ardından, VIC motoru aracılığıyla YUV’den RGB’ye renk dönüşümü gerçekleştirilir. Bu görüntüler daha sonra AI modelleri tarafından analiz edilerek ilgi alanındaki nesnelerin tespit edilmesi sağlanır. AI modeli nesne için sınırlayıcı kutular ürettikten sonra, VIC veya CUDA kullanarak orijinal YUV basamak lineer görüntülerinin üzerine mozaikler veya maskeler eklenir.
Son olarak, işlenmiş kareler tekrar blok lineer formattan basamak lineer formata döndürülmekte ve ardından NVENC ile H264 videolarına sıkıştırılmaktadır.
CV İşlemlerini PVA ile Değiştirme
NIO’nun durumunda, hem GPU hem de VIC yoğun bir şekilde yüklenmiştir. Bu boru hattının ayrıntılarına göre bazı CV operatörleri şunlardır:
- Blok lineer ve basamak lineer formatlar arasında düzen dönüşümü
- YUV’den RGB’ye renk dönüşümü
- Mozaikleme ve maskeleme
Bu operatörler PVA’ya aktarılabilir; böylece GPU ve VIC üzerinde kaynak tasarrufu sağlanabilir.
Hem düzen dönüşümü hem de renk dönüşümü, PVA için bellek açısından yoğun görevlerdir ve DMA bant genişliği bu noktada daralmaya neden olmaktadır. PVA’daki diğer hesaplama kaynakları, sınırlayıcı kutu ve YUV PL görüntüsüne dayalı mozaikleme veya maskeleme için kullanılabilir.
Yürütmeyi daha da hızlandırmak için, her PVA örneği iki VPU içerdiğinden PVA algoritmalarını paralel olarak çalıştırabilirsiniz ki bu da DRAM ile veri alışverişi için her birinin bağımsız bir DMA denetleyicisine sahip olması anlamına gelir.
Veri Hattı Optimizasyonu
Geleneksel bir veri işleme boru hattında gecikmeler, iki kaynaktan kaynaklanmaktadır:
- Farklı işlev modülleri veya donanım hızlandırıcıları arasında veri kopyalamaktan kaynaklanan yük, bu örnekte PVA ve DLA üzerinden gerçekleştirilmektedir.
- Birden fazla algoritmik işlem gerçekleştirmek ve eşitlemek için ek senkronizasyon yükü gereklidir.
Bu yükler, NVIDIA DriveOS SDK’nın sağladığı NVStreams çerçevesi kullanılarak azaltılabilir. PVA donanım hızlandırıcısı, NVStreams API’leri ile birlikte etkili çalışır ve toplam gecikmeyi en aza azaltmak için verilerin sıfır kopya geçişlerinin ve asenkron görev gönderiminin yapılmasını sağlar.
Sıfır Kopya Arayüzü
Farklı donanım bileşenleri ve uygulamalar, bellek tamponları için kendi erişim kısıtlamalarına veya gereksinimlerine sahip olabilir. Sıfır kopya hedefine ulaşmak için, birleşik bellek mimarisi, hızlandırıcıların ve farklı uygulamaların NVIDIA DRIVE SoC üzerindeki aynı fiziksel belleği paylaşmalarına olanak tanır.
Bellek tamponları öncelikli olarak tahsis edilmeden önce, ayrıntılı gereksinimler toplanır ve uzlaştırılır; böylece tahsis edilen bellek tamponu gerekli modüller arasında paylaşılabilir durumda olur. Bu özellik, NvStreams API’leri aracılığıyla gerçekleştirilir.
Paylaşılabilir bellek tamponu başarıyla tahsis edildikten sonra, farklı donanım modülleri veya uygulamalar arasında veri geçişleri sıfır kopya yöntemiyle gerçekleştirilebilir. Bu çözüm, işlem arası iletişim (IPC) veya sanal makineler arasında geçişler içeren durumlar için geçerlidir. Yonga setleri arası veri geçişleri için ise yüksek hızlı PCIe, aynı NvStreams çerçevesi altında kullanılabilir.
Donanım Hızlandırıcı Temelli Zamanlama
NIO’nun veri hattı, birden fazla donanım hızlandırıcısı içermekte ve bu motorlar arasındaki senkronizasyonu yönetmek için NvSciSync kullanılabilir. Bu, NVIDIA NvStreams kütüphanesinin bir parçasıdır ve farklı donanım bileşenleri arasında işlemlerin belirli bir düzenle gerçekleştirilmesini sağlar.
Öncelikle, hızlandırıcılarda çalışan görevler arasında senkronizasyon noktaları eklenir. Bir görev başladığında, sonraki donanım hızlandırıcıları, önceki görev tamamlanana kadar bu senkronizasyon noktasında bekler. Bir görev tamamlandığında, onu izleyen hızlandırıcı, senkronizasyon noktasını serbest bırakır ve bu da bir sonraki hızlandırıcının kendisine atanan görevi gerçekleştirebilmesini otomatik olarak tetikler. Bu işlem, CPU’nın yalnızca ilk yapılandırmalar için devreye girmesini sağlar ve donanım motorları arasında etkili senkronizasyon sağlar.
PVA Görev Seviyesi Temelli Zamanlama
Orijinal boru hattında tüm görev gönderimleri ve senkronizasyonlar, CPU tarafından tek tek kontrol edilmektedir. Yani CPU, görevleri hesaplama motorlarına gönderir ve her bir algoritma görevinin tamamlanmasını senkronizasyon ile bekler.
PVA, bir seferde birden fazla görev göndermeyi ve yalnızca son görevde beklemeyi destekler. Tüm gönderilen PVA görevleri belirtilen sırayla işlenir ve görevlerin tümü tamamlanana kadar görevler üzerinde işlem yapılır. Birden fazla görevin topluca gönderilmesi; PVA görev gönderimlerine bağlı CPU yükünü azaltarak, CPU’nun diğer değerli görevler için serbest kalmasını sağlar ve toplam sistem gecikmesini azaltır.
PVA SDK kullanarak, PVA algoritmaları için tam potansiyeli kullanmak üzere zamanlama stratejileri belirleyebiliriz. Örneğin, belirli algoritmaların tek bir VPU üzerinde gerçekleştirilmesini ayarlayabilirsiniz.
Her iki VPU’yu kullanırken, görevler arasındaki sıralama gereksinimleri varsa, iki VPU üzerinde ardışık olarak işlemleri gerçekleştirilmek üzere ayarlanabilir. Ardışık bir gereklilik yoksa, PVA görevleri VPU’lar boşaldığında en kısa sürede gerçekleştirilir. Bu, birden çok görev yürütme gecikmesini önemli ölçüde azaltır.
Üretim Hazırlığı
Şekil 6, PVA ile CV işlemlerinin değiştirilip DLA motoruna DL modelinin taşındıktan sonra üretime hazır NIO veri hattını göstermektedir. Daha fazla bilgi için, tinyurl.com/ydqxxgqe adresine bakabilirsiniz.
Bu optimize edilmiş boru hattında, PVA ve DLA çözümü iş ihtiyaçlarını etkin bir şekilde karşılamaktadır. Bu yaklaşım hem uygulanabilir hem de oldukça etkilidir. Sonuç olarak, toplam GPU kaynak kullanımı %10 oranında azaltılmıştır ve VIC motoru, sistem içindeki diğer yüksek öncelikli görevler için serbest bırakılmıştır. Blok lineer ve basamak lineer dönüşümleri sırasında geçici değişkenler için ek bellek tahsis etmeye gerek kalmamaktadır; bu da önemli memori tasarrufu sağlamaktadır.
NIO’nun iç incelemesine göre, PVA bu sistemi çalıştırırken bir VPU örneğinde yaklaşık %50 yükle çalışmaktadır. Bir PVA iki VPU içerdiğinden, NIO veri hattındaki toplam yük yaklaşık %25’tir. Bu, PVA’nın bu boru hattında ek görevler için hala kullanılabilir hesaplama kapasitesine sahip olduğunu göstermektedir.
Daha Fazla Optimizasyon
Bu pipeline’ı daha fazla optimize etmek için, aşağıdaki adımlardan birini veya her ikisini uygulamayı düşünebilirsiniz:
- PVA’ya basit bir derin öğrenme modeli ile DLA’nın yerini alarak, şu anda yalnızca %25 kullanımda olan PVA’yı kullanabilirsiniz. İç testler, Yolo-Fastest ağının başarıyla PVA’ya port edilebildiğini, nesneleri beklenildiği gibi tespit ettiğini göstermiştir.
- Ön işleme, derin öğrenme çıkarımı ve son işleme aşamalarını tek bir PVA kernelinde birleştirerek, ek DMA iletimlerine gerek kalmadan genel DMA bant genişliğini azaltmayı değerlendirin.
Sonuç
PVA’ya dayalı optimizasyon çözümü, NIO’nun pipeline’ının performansını önemli ölçüde artırmakta ve NIO’nun seri üretim araçlarında yaygın olarak kullanılmaktadır. Görevlerin PVA’ya aktarılması sayesinde, GPU hesaplama kaynakları serbest bırakılmakta, derin öğrenme TOP’larını artırmakta ve daha karmaşık derin öğrenme ağlarının uygulanmasını sağlamaktadır.
NIO, NVIDIA DRIVE platformunun ek hesaplama yeteneklerinden yararlanarak daha verimli algoritmalar geliştirmeye devam etmekte ve bunun sonucunda ürünlerinin zekasını ve rekabetçiliğini artırmaktadır.
Özetle, PVA, otonom araç geliştirme alanında karmaşık görsel görevlerin daha verimli ve etkili bir şekilde işlenmesine imkan tanıyarak genel sistem performansını artırma potansiyeli sunmaktadır.