NVIDIA NeMo, sektördeki en iyi otomatik konuşma tanıma (ASR) modellerini geliştirmeye devam ediyor. Bu modeller, özellikle Hugging Face Açık ASR Lider Tablosu‘nda zirveye oturan performanslarıyla dikkat çekiyor.
Bu NVIDIA NeMo ASR modelleri, sesi metne dönüştürmek için çeşitli mimariler sunarak hem hız hem de doğruluğu optimize ediyor:
- CTC modeli (nvidia/parakeet-ctc-1.1b): Bu model, FastConformer kodlayıcı ve softmax tahmin başlığına sahiptir. Gelecek tahminlerin önceki verilerden bağımsız olarak yapılması, hızlı ve etkili bir çıkarım sağlar.
- RNN-T modeli (nvidia/parakeet-rnnt-1.1b): Bu transdüser modeli, FastConformer kodlayıcıya bir tahmin ve ortak ağ ekleyerek autoregresif hale getirir. Bu özellik nedeniyle, RNN-T modellerinin GPU’larda yavaş olduğu yanlış bir algı oluşabilir.
- TDT modeli (nvidia/parakeet-tdt-1.1b): Token-and-Duration Transducer (TDT) adı verilen yenilikçi bir transdüserdir. Hala autoregresif olmakla birlikte, her aşamada birden fazla tahmin yapabilmesi, çıkarımını hızlandırır.
- TDT-CTC modeli (parakeet-tdt_ctc-110m): Hem transdüser hem de CTC kodlayıcılarının bir hibrit versiyonudur, eğitim sırasında daha hızlı bir yakınsama sağlar.
- AED modeli (nvidia/canary-1b): Bu model, FastConformer üzerine inşa edilmiş bir attention-encoder-decoder (AED) modelidir ve ek hesaplama maliyeti karşılığında en yüksek doğruluğu (en düşük kelime hatası oranı, WER) sunar.
Bu modellerin daha önce hızla ilgili bazı bottleneck’leri bulunmaktaydı. Ancak, NVIDIA, bfloat16
türüne otomatik casting gibi yeniliklerle ve CUDA Graphs ile NeMo ASR modellerinin çıkarım hızını %100’e kadar artırmayı başardı.
Bu yazıda, NVIDIA’nın NeMo ASR modellerinin çıkarım hızını %80’e kadar artırmak için uyguladığı temel iyileştirmeleri göreceksiniz. Öne çıkan bu yenilikler arasında bfloat16
türünde tensor’lara otomatik casting, yenilikçi label-looping algoritması ve CUDA Graphs’ün NeMo 2.0.0 ile entegrasyonu yer alıyor.
Bu bölümde, NVIDIA ASR modellerinin casting yüklerinden, düşük hesaplama yoğunluğundan ve performans kaybı sorunlarından nasıl kurtulduğunu inceleyeceğiz.
NeMo’nun ilk günlerinden itibaren, çıkarım süreci torch.amp.autocast bağlam yöneticisi altında yapılmaktadır. Bu yöneticinin işlevi, float32
ağırlıklarını float16
veya bfloat16
türüne otomatik olarak dönüştürerek yarı hassas tensor çekirdeklerinin kullanılmasını sağlamaktır. Ancak bu sistemde bazı sorunlar mevcuttur:
- Eski autocast davranışları: Autocast, modern modellerde sıkça karşılaşılan
softmax
velayer norm
gibi işlemler nedeniylefloat16
veyabfloat16
değerlerinin float32’ye dönmesine neden olur, ve bu durum fazladan casting’lere yol açar. - Parametre işleme: AMP cast önbelleğinin çalışabilmesi için parametrelerin
requires_grad=True
olması beklenir. - Önbellek sık temizleme: Önbelleğin her
torch.amp.autocast
bağlam yöneticisi çıkışında temizlenmesi, verimli bir önbellek kullanımını zorlaştırmaktadır.
Bu ek casting süreleri belirgin bir zaman kaybına yol açmaktadır. Örneğin, Parakeet CTC 1.1B modelinin çalıştırılması sırasında yapılan süre ölçümleri gösteriyor ki, bir matrix çarpımının zamanı 400 mikro saniye sürerken, bunun 200 mikro saniye kadar bir kısmı casting işlemleriyle harcanmaktadır.
Bu sorunları aşmak için çıkarım sürecini tam olarak yarı hassas yapmak üzere uygulamak gerekmektedir. Bu, NVIDIA/NeMo üzerinde yapılan geliştirmelerle sağlanmıştır. Bu yöntem, doğruluk kaybı olmaksızın casting zamanını ortadan kaldırmaktadır.
NeMo’da daha önce bazı işlemler sırayla yapılıyordu. Bu durum, her CUDA kernel’inin bir eleman için seçilmesinin yavaşlamasına neden oluyordu. Tam bakalı işleme geçiş yapmak, GPU kaynaklarını tamamen kullanmamıza olanak sundu.
Özellikle CTC açgözlü çözümleri ve özellik normalizasyonu gibi işlem türleri bu yapıdan etkilendi. Batched işleme geçişi sayesinde, bu işlemlerde yaklaşık %20’lik bir hız artışı sağlandı.
RNN-T ve TDT modellerinin sunucular arası GPU çıkarımında elverişsiz olduğu düşünülmekteydi. RNN-T modelinin tahmin ve ortak ağları, tüm süreç boyunca GPU’nun etkinliğinin düşük olmasına neden oluyordu. Bu durumu düzeltmek üzere, CUDA Graph’lar kullanılarak daha dinamik bir akış tasarlandı.
Ayrıca CUDA Graphs, dinamik kontrol akışlarını desteklememekteydi, bu durum while
döngülerini kullanmanın imkansız hale getiriyordu. CUDA Toolkit 12.4’te, bu kontrol akışlarının desteklenmesi ile ilgili yenilikler yapıldı ve bu CUDA Graph’lar üzerinde yapılan geliştirmelerle RNN-T ve TDT üzerine etkili uygulamalar geliştirilmiştir.
Yeni label-looping algoritması ve CUDA Graph’lar, transdüser modellerinin inverse gerçek zaman faktöründe (RTFx) CTC modellerine yaklaşmasını sağladı. Bu gelişmeler, özellikle küçük modellerde dikkat çekici bir hız artışına neden oldu. Tüm bu 10 kat hız artışları, NVIDIA NeMo ASR modelleri‘nde mevcuttur. GPU tabanlı çıkarım bu sayede CPU maliyetlerini %4.5 oranında azaltmayı başarmıştır ve tahmin sayısında büyük kazançlar elde edilmiştir.
NVIDIA’nın sunduğu bu yenilikler, 1 milyon saat ses kaydını işlemek için hem performans hem de maliyet açısından önemli tasarruflar sağlamaktadır. Detaylara daha fazla göz atmak için NVIDIA NeMo ile ilgili kaynaklara ulaşabilirsiniz.