Microsoft Bing Görsel Arama, dünya genelindeki kullanıcıların fotoğraflar kullanarak içerik bulmalarına olanak tanır. Bu özelliğin temelinde, Microsoft’un TuringMM görsel gömme modeli yer alır; bu model, görüntüleri ve metinleri paylaşılmış yüksek boyutlu bir alana haritalar. İnternetteki milyarlarca görüntü üzerinde çalışan bu sistemde, performans son derece kritik bir önem taşır.
Bu yazıda, TuringMM boru hattını NVIDIA TensorRT ve NVIDIA’nın CV-CUDA ve nvImageCodec gibi hızlandırma kütüphaneleriyle optimize etme çabalarımız detaylandırılmaktadır. Bu çabalar, %5.13 oranında bir hız artışı ve önemli ölçüde toplam sahip olma maliyeti (TCO) düşüşü sağladı. Internet ölçeğindeki görsel aramalar için temel gömme boru hatlarının optimizasyonunu sağlamak amacıyla Microsoft Bing ekibiyle nasıl iş birliği yaptığımızı paylaşacağız.
Microsoft Bing Multimedia’da kıdemli veri ve uygulamalı bilimci olan Andrew Stewart, şunları belirtti: “Bing Görsel Arama ekibi, NVIDIA hızlandırma teknolojileri olan TensorRT, CV-CUDA ve nvImageCodec ile yapılan iyileştirmeler sayesinde, milyarlarca resim üzerinde çalışan bir çevrimdışı indeksleme boru hattında %5.13 oranında harikulade bir sonlandırma süresi iyileştirmesi başardı. Online sistemler, Bing’in Görsel Niyet gibi, kullanıcılar için daha hızlı sonuçlar getirmekte veya beklenen gecikme bütçesi içinde ek işlevsellik ekleme yeteneği sağlamaktadır.”
Multimodal AI ve Görsel Arama
Multimodal AI, görsel arama gibi uygulamaları güçlendirir. Bu tür uygulamalar, metin, fotoğraf, ses ve video gibi farklı veri modlarının birbirleriyle sorunsuz etkileşimini gerektirir. CLIP (Kontrastif Dil-Görüntü Ön Eğitim) modeli, ortak görüntü-metin anlayışı için popüler bir modeldir. CLIP modelleri, görüntüler için bir encoder bir de metin için bir encoder içeren çift encoder mimarisi kullanarak, yüzlerce milyon görüntü-altyazı çiftini işler.
Her iki encoder’in çıktısı, ortak yüksek boyutlu bir alanda hizalanarak, girdi metin ve görüntü çiftinin ortak anlamsal anlayışını temsil eden tek bir yüksek boyutlu vektör veya gömme üretir. Bu multimodal gömmeler, metin tabanlı görsel arama ve geri getirme, sıfırdan görüntü sınıflandırma, görüntü başlığı yazma ve etiketleme, metin girişli içerik oluşturma/düzenleme, metin destekli içerik denetleme gibi geniş bir AI tabanlı görsel görev yelpazesini güçlendirmek için kullanılır.
Microsoft Bing Görsel Arama
Microsoft Bing Görsel Arama, milyarlarca görsel için büyük ölçekli vektör gömmeleri hesaplamayı gerektirir. Bu tür bir çevrimdışı sistemi bulut veya veri merkezinde çalıştırmak, gömme veritabanını doldurmak için birkaç haftadan birkaç aya kadar sürebilir. Birden çok iş yükünün paylaşılan bir kümede çalıştığı durumlarda, hesaplama kaynaklarının etkili bir şekilde kullanımı ve her iş yükünün tamamlanma süresinde azalma sağlamak daha da kritik hale gelir.
Diğer yandan, görsel arama veya görüntü başlığı yazma gibi çevrimiçi görevlerde, her istekte gerçek zamanlı tepki verme öncelikli bir gerekliliktir.
İyileştirmeler Öncesindeki Model ve Boru Hattı
Görsel gömme modeli, Bing altyapısındaki birçok model gibi, çeşitli Microsoft’un derin öğrenme hizmetleri için çıkarım görevlerini yürütmeye adanmış bir GPU sunucu kümesinde çalışır. Bu küme içinde, model, her bir örnekte bir çıkarım sunucu çözümünde çalıştırılmaktadır. Çıkarım sunucusu, merkezi iş yönlendiricisinden işlenmesi için bir dizi görüntü alır ve bu görüntülerin her birinin tahmin edilen gömmelerini geri göndermesi beklenir.
İş yükü, internet üzerinde yeni yayınlanan tüm görüntüleri belli bir zaman diliminde işlemekten oluşmaktadır. İşlem görecek görüntüler, 32 görüntüden oluşan taleplerde bir araya getirilir ve bu talepler GPU çıkarım sunucularına gönderilir. Bu görüntüler farklı kaynaklardan internet aracılığıyla toplandıkları için, boyut ve dosya biçiminde çeşitlilik göstermektedir. Bu nedenle görev, her partiyi tekdüzelik sağlamak amacıyla yeniden biçimlendirmek zorundadır.
Bu ölçekte görüntü işleme, hesaplama açısından pahalı bir süreçtir. İşlemler, görüntülerin okunması ve çözülmesi ile başlar. Görüntülerin büyük çoğunluğu JPEG formatındayken, diğer yaygın dosya formatları da içerebilir. İstek partisi içindeki tüm görüntüler, modelin beklenen giriş şekli olan 224×224’e eşit bir boyuta yeniden boyutlandırılmalıdır.
Ayrıca, görüntü üzerinde bazı temel ön işleme işlemleri uygulanır; bunlar arasında kırpma, normalizasyon ve kanal ile tensör düzeninin yeniden sıralanması bulunmaktadır. Bu çeşitli görüntü spesifikasyonları ile başa çıkabilmek için, görüntüleri yüklemek ve işlemek amacıyla OpenCV başlangıçta seçilmiştir.
Asıl çıkarım görevi, önceden işlenmiş bu giriş partisi üzerinde görsel gömme modelinin çalıştırılmasını içerir. Model, bir ONNX grafiği olarak dışa aktarılır ve ONNXRuntime model yürütme arka ucu olarak kullanılır. ONNXRuntime çerçevesi, standart ONNX opset ile ifade edilebilecek herhangi bir model için yürütme uyumluluğu sağlamak için birleşik bir işlem seti sunar. Bu çerçeve, bu işlemlerin belirli bir donanım platformu veya hızlandırıcı için uygulamasıdır. Varsayılan Yürütme Sağlayıcısı, CPU yürütmesi içindir.
ONNX grafiklerini GPU’larla hızlandırmanın farklı yolları bulunmaktadır. Öncelikle, ONNX grafiklerini doğrudan NVIDIA TensorRT kullanarak çalıştırabilirsiniz. İkincisi, ONNXRuntime, NVIDIA tarafından desteklenen iki Yürütme Sağlayıcısı sunmaktadır:
- CUDA Yürütme Sağlayıcısı: Genel amaçlı bir GPU hızlandırma çözümü sunarak oldukça iyi bir performans ve esneklik sağlar. ONNX spesifikasyonuna uyan geniş bir model yelpazesi için uygundur. Bing’in ilk uygulaması, ONNXRuntime ile CUDA Yürütme Sağlayıcısını kullanıyordu.
- TensorRT Yürütme Sağlayıcısı: NVIDIA GPU’lar üzerinde derin öğrenme çıkarımı için maksimum performans ve verimlilik sağlayarak, azaltılmış hassasiyet ve katman birleştirme gibi ileri düzey iyileştirmelerden yararlanır. Performansın, verimliliğin ve düşük gecikmenin kritik olduğu dağıtım senaryoları için idealdir.
Görsel Gömme Modeli Boru Hattının İyileştirilmesi
Microsoft Bing Görsel Arama ekibiyle işbirliği yaparak bu boru hattındaki iyileştirme fırsatlarını belirledik. Yapısal olarak yüksek GPU kaynağı kullanma imkanı sağlayan birkaç zorluk hemen fark edildi.
İlk gözlemlenen fırsat, TensorRT kullanımındadır. TensorRT’nin son sürümleri, transformer mimarilerindeki birleştirilmiş dikkat katmanları için gittikçe daha iyi bir desteğe sahiptir. Bu, hesaplama açısından maliyetli** bu katmanların daha verimli bir şekilde çalıştırılmasına olanak tanır ve bu durum, sonlandırma süresi üzerindeki etkisini büyük ölçüde artırır.
JPEG dosya formatını çözmenin önemine pek dikkat edilmez. Ancak büyük ölçekli modeller ile çalışırken, bir megapiksel görüntüyü yüklemenin ve çözmenin, o görüntü için çıkarım görevinden daha uzun sürebileceğini sıkça görebiliriz. Bing’in görsel gömme boru hattı da bunun bir istisnası değildi; OpenCV’nin imread
çağrısından kaynaklanan önemli darboğazlar ölçülebilir şekilde vardı.
Bunu hafifletmek için, NVIDIA’nın fotoğraf formatı çözücüleri kütüphanesi olan nvImageCodec boru hattına dahil edildi. Bu kütüphane, çeşitli dosya formatlarını çözmek için GPU’ları kullanmaktadır. Eğer özel bir donanım hızlandırıcı kullanılamıyorsa, kütüphane geleneksel yazılıma geçiş yaparak gücü GPU ile hızlandırmayı sürdürür; eğer bu da mümkün olmazsa CPU hızlandırmasıyla devam eder.
Bu, ham görüntü verileriyle çalışırken uyumluluğun ve kesintisiz entegrasyonun sağlanmasına olanak tanır. Son olarak, nvImageCodec aynı zamanda toplu çözümlemeyi destekler, bu da birden fazla görüntünün aynı anda çözülmesi anlamına gelir; böylece belirli işlemlerin çözümleme aşamasında paralelize edilmesi sağlanır. Bu da GPU verimliliğini artırır.
Ayrıca, görüntü ön işlemleri CV-CUDA ile hızlandırılmıştır; bu kütüphane, yaygın görüntü işleme işlemlerinin GPU ile hızlandırılmış versiyonlarını içermektedir. Bu işlemler, görüntü grupları üzerinde hızlı bir şekilde çalışmak için optimize edilmiştir: İşlenmesi gereken görüntü sayısı arttıkça bu işlemlerin verimliliği de artar.
Bazı CV-CUDA işlemleri, değişken şekilli görüntü gruplarını destekler. Bu, farklı boyutlardaki görüntülerin bir araya getirilebilmesini sağlar; böylece grup içindeki farklı boyutlara rağmen, işlem paralelleştirilir. Ayrıca, CV-CUDA ile nvImageCodec entegrasyonu, görüntü verilerini doğrudan GPU belleklerinde işlemeyi sağlayarak CPU’ya veri aktarımını azaltır.
Sonuçta, her iki kütüphanenin Python bağlayıcıları sayesinde, uygulama basitleştirilmiştir. Hem nvImageCodec hem de CV-CUDA için mevcut olan Python API’leri, bu kütüphanelerden daha önce bilen kullanıcıların aşina olabileceği OpenCV API’sine benzer şekilde çalışmaktadır. Aşağıda bu işlemlerin kodu yer almaktadır:
decoder = nvimgcodec.Decoder
images = decoder.decode(batch_queries)
images_batch = cvcuda.ImageBatchVarShape(len(images))
for image in images:
images_batch.pushback(cvcuda.as_image(image))
images_batch = cvcuda.resize(images_batch, [(256, 256)] * len(images), cvcuda.Interp.LINEAR)
stack = cvcuda.stack([cvcuda.as_tensor(image) for image in images_batch])
stack = cvcuda.customcrop(stack, cvcuda.RectI(16, 16, 224, 224))
stack = cvcuda.cvtcolor(stack, cvcuda.ColorConversion.RGB2BGR)
stack = cvcuda.convertto(stack, np.float32)
stack = cvcuda.reformat(stack, "NCHW")
stack = stack.cuda
Son olarak, ONNXRuntime, IOBindings kullanma yeteneğine sahiptir. Bu, çerçevenin bir özelliğidir; hedef hızlandırıcıda bellek tamponlarını önceden tahsis etme ve doldurma işlemini sağlar. ONNXRuntime-CUDA ve ONNXRuntime-TensorRT durumunda, bu, modelin giriş veri grubunu doğrudan önceden tahsis edilmiş GPU bellek bloğuna sağlamaya olanak tanır; böylece CPU ve GPU arasındaki bellek kopyalarının sayısını azaltır.
Optimize edilmiş boru hattı, çıkarım görevlerinin çoğunu GPU cihazına kaydederek hem daha optimal hem de daha hızlı işlem yapmayı sağlamakla kalmaz, aynı zamanda sonlandırma süresi için daha fazla güç verimliliği sunar.
Sonuçlar
Elde edilen sonuçlar, GPU kaynaklarının optimal kullanımının derin öğrenme ve görüntü işleme iş yüklerini büyük ölçüde hızlandırabileceğini göstermektedir; bu durum, temel düzeyde zaten GPU hızlandırması kullanan bir sistemde bile geçerlidir. NVIDIA TensorRT, çoğu performans iyileştirmesinin kaynağıydı; NVIDIA görüntü çözme ve işleme kütüphaneleri ise toplamda %27’lik bir sonlandırma süresi iyileştirmesi sağladı.
Uygulama | Aktarım Hızı | Hızlanma |
OpenCV + ONNXRuntime-CUDA ile Temel | 88 QPS | – |
OpenCV + ONNXRuntime-TensorRT ile Boru Hattı | 356 QPS | 4.05 |
nvImageCodec + CV-CUDA + ONNXRuntime-TensorRT ile Boru Hattı | 452 QPS | 5.14 |
Boru hattının görüntü işleme bileşeni, sonlandırma süresi taleplerine önemli bir gecikme katkısı sunmaktadır. Farklı boyutlardaki görüntülerin kullanılması, gecikme sayılarının değişken olmasına neden olmaktadır; çünkü görüntüleri çözme ve yeniden boyutlandırma süresi, görüntü çözünürlüğü ile orantılıdır. Bu sürecin hızlandırılması, bazı durumlarda %6’lık iyileştirmelere yol açabilir; bu da Bing tarafından yapılan dağıtım için belirlenen donanım özellikleri ile mümkündür.
Ortalama grup başına görüntü boyutu | ||||
Kütüphane | İşlem | Küçük (~400×400) |
Orta (~800×800) |
Büyük (~1600×1600) |
OpenCV Tek iş parçacıklı CPU |
Görüntü çözme | 28.4 ms | 162.3 ms | 406.2 ms |
Ön işleme | 6.3 ms | 14.4 ms | 24.0 ms | |
Toplam | 34.7 ms | 176.7 ms | 430.2 ms | |
nvImageCodec + CV-CUDA GPU hızlandırmalı |
Görüntü çözme | 5.9 ms | 29.4 ms | 62.7 ms |
Ön işleme | 3.2 ms | 5.2 ms | 6.3 ms | |
Toplam | 9.1 ms | 34.6 ms | 69.0 ms | |
GPU hızlandırma hızlanması | 3.8x | 5.1x | 6.2x |
Sonuç
NVIDIA hızlandırma kütüphaneleri, TensorRT, CV-CUDA ve nvImageCodec, Microsoft Bing Görsel Arama’yı büyük ölçüde optimize etti. Boru hattının başlangıç uygulaması, GPU hızlandırması için ONNXRuntime kullanıyordu; ancak OpenCV üzerinden gerçekleşen görüntü çözme ve ön işleme üzerindeki darboğazlar performansı kısıtlıyordu. Bu sorunların üstesinden gelmek için NVIDIA hızlandırma kütüphanelerinin entegrasyonu, hem görüntü çözme hem de model çıkarım hızlarını artırdı.
TensorRT kullanımı, görüntü çözümlemesi için nvImageCodec ve ön işleme için CV-CUDA’nın eklenmesiyle elde edilen %5.13 oranında bir hız artışı sağlandı. Bu iyileştirmeler, bazı durumlarda görüntü işleme süresinin %6.2’ye kadar düşmesine yardımcı oldu. Böylece, sistemin geçiş gücü iyileştirilmiş oldu ve Bing, görsel arama görevlerini daha verimli bir biçimde gerçekleştirebiliyor; enerji kullanımı ve işlem süreleri önemli ölçüde azalmış oldu.
NV-CLIP, NVIDIA’nın CLIP modelinin profesyonel bir versiyonudur ve NVIDIA NIM mikroservisi olarak mevcuttur. NIM mikroservisleri, AI yeteneklerini uygulamalara entegre etmeyi kolaylaştıran optimize edilmiş konteynerler şeklinde modeller sunmaktadır. Her NIM konteyneri, bu önceden eğitilmiş AI modelleri ile gerekli tüm çalışma bileşenlerini barındırır. NV-CLIP ile başlayın.