2 puan yazan GN⁺ 2023-12-14 | 1 yorum | WhatsApp'ta paylaş
  • Apple Silicon için MLX framework ile Whisper large modeli çalıştırılarak, 10 dakikalık ses transkripsiyonunda dizüstü bilgisayar ile yüksek performanslı GPU arasındaki fark karşılaştırıldı
  • Varsayılan koşullarda M1 Pro MacBook 216 saniye, RTX 4090 ise 186 saniye sürdü; RTX 4090 yaklaşık 30 saniye, yani yaklaşık %16 daha hızlıydı
  • RTX 4090 üzerinde insanely-fast-whisper kullanıldığında whisper-large-v3 transkripsiyonu 8 saniyeye kadar düştü; bu da model ve uygulama optimizasyonunun donanım karşılaştırmasını büyük ölçüde değiştirebildiğini gösteriyor
  • macOS MPS çalıştırması 4 dakika 23 saniye sürdü; M2 Ultra 76 GPU çekirdeği ve M3 Max 40 GPU çekirdeği, M1’den çok daha hızlı olup birbirine benzer hızlar gösterdi
  • Güç artışı, boşta duruma kıyasla RTX 4090 PC’de +242W, M1 Pro MacBook’ta +38W oldu; genel sonuçlar hassas bir benchmark değil, MLX performansı hakkında fikir veren bir karşılaştırma niteliğinde

MLX ile Whisper benchmark’i çalıştırma

  • Apple, Apple Silicon için makine öğrenimi framework’ü MLX’i yayımladı; beraberinde gelen örneklerden Whisper benchmark için kullanıldı
  • Mevcut Whisper benchmark deposuna yeni bir dosya eklendi ve daha önce indirilmiş whisper large modeliyle aynı ses dosyası transkribe edildi
  • Çalıştırma kodu transcribe(audio=audio_file, model='large') çağrısını yaptıktan sonra başlangıç ve bitiş zamanları arasındaki farkla toplam süreyi ölçüyor
  • Dönen sonuç bir segment listesidir; her segmentte avg_logprob, compression_ratio, start, end, text, tokens gibi alanlar bulunur
  • Bu sonuç yapısı, RTX 4090 üzerinde Python Whisper çalıştırıldığında elde edilenle aynıdır

Temel sonuçlar: M1 Pro ve RTX 4090

  • 10 dakikalık ses dosyası için M1 Pro + MLX çalışma süresi 0:03:36.296329, yani yaklaşık 216 saniyedir
  • Aynı dosyada Nvidia RTX 4090 çalışma süresi 0:03:06.707770, yani yaklaşık 186 saniye olarak ölçüldü
  • RTX 4090, M1 Pro’dan yaklaşık 30 saniye daha hızlı; oran olarak yaklaşık %16 daha hızlı seviyede
  • Ölçüm sırasında M1 Pro’nun tüm grafik çekirdekleri tamamen kullanıldı; diğer programlar kapatıldı ve masaüstü arka planı gibi öğeler de devre dışı bırakıldı
  • Ancak Nvidia için optimize edilmiş bir model kullanılırsa RTX 4090’ın transkripsiyon süresi 8 saniyeye kadar düşüyor

Test donanımı

  • MacBook

    • 14 inç MacBook M1 Pro, 2021 modeli
    • 8 CPU çekirdeği: 6 performans çekirdeği, 2 verimlilik çekirdeği
    • 32GB RAM
    • 16 GPU çekirdeği
  • PC

    • Intel Core i7-12700KF 8×3.60GHz
    • RAM 2×32GB 3200MHz DDR4 Kingston FURY Beast
    • Kingston KC3000 PCIe 4.0 NVMe 1000GB SSD
    • Okuma 7000MB/s, yazma 6000MB/s
    • GeForce RTX 4090 24GB GDDR6X, Palit RTX 4090 GameRock OmniBlack

insanely-fast-whisper’ın karşılaştırmayı değiştirmesi

  • Hacker News yorumlarında, aynı 10 dakikalık dosyanın insanely-fast-whisper ve RTX 4090 ile çalıştırıldığı bir sonuç paylaşıldı
  • whisper-large-v3 ile transkripsiyon 8 saniyenin altında tamamlandı; transkripsiyon başlamadan önceki model yükleme süresi de dahil edildiğinde süre 15 saniyeydi
  • Daha sonra doğrudan çalıştırılan insanely-fast-whisper --file-name audio.mp3 --flash True komutunda da 8 saniyelik transkripsiyon doğrulandı
  • Çıktı günlüklerinde Flash Attention 2 ile ilgili uyarılar ve GPU’ya taşıma ile ilgili uyarılar vardı, ancak transkripsiyon tamamlandı ve output.json oluşturuldu
  • macOS’te --device mps --batch-size 4 ile çalıştırılabildi ve aynı dosyanın transkripsiyonu 0:04:23 sürdü

M2 Ultra ve M3 Max güncellemesi

  • Ivan, aynı ses dosyasını M2 Ultra 76 GPU çekirdeği ve M3 Max 40 GPU çekirdeği üzerinde çalıştırdı
  • İki sistem de M1 Pro’dan çok daha hızlı sonuçlar verdi ve birbirlerine benzer hızdaydı
  • Karşılaştırma sayıları %100 kesin bir benchmark olarak görülmemeli; diğer süreçler, yükleme süresi, cold start ve warm start sonuçları etkileyebilir

Güç tüketimi ve ölçüm sınırlamaları

  • Boşta durum ile GPU çalışırkenki durum arasındaki güç farkı Shelly priz ile ölçüldü
  • PC, RTX 4090 çalışırken boşta duruma kıyasla +242W arttı
  • MacBook, M1 GPU’nun 16 çekirdeği çalışırken boşta duruma kıyasla +38W arttı
  • Güç ölçümü de %100 kesin bir değer olmaktan çok, yönü gösteren bir referans değere daha yakın
  • Genel test, bilimsel bir ölçümden ziyade MLX framework’ünün ne düzeyde performans verebildiğini kabaca gösteren bir karşılaştırmadır

Gerçek kullanım arka planı

  • Testin amacı, podcast arama motoru podpodgogo.com’un işletimiyle bağlantılı
  • On binlerce podcast bölümünü transkribe edip tam metin aramasına uygun hale getiriyor ve bazı veri madenciliği işlemleri de yapıyor
  • Güncelleme geçmişi
    • 11 Aralık: Donanım özellikleri ve model yüklemesi olmayan ek testler eklendi
    • 12 Aralık: RTX 4090 en hızlı tüketici tipi grafik kartı olarak özetlendi ve M2/M3 sayıları güncellendi
    • 13 Aralık: Hacker News’te Nvidia için optimize edilmiş Whisper ile ilgili yorumlar doğrulandı

1 yorum

 
GN⁺ 2023-12-14
Hacker News yorumları
  • Whisper 4090 üzerinde çok verimsiz çalıştırılmadıysa, bu sonuç şüpheli görünüyor
    Bende 3090 ve M1 Max 32GB var; Whisper denemedim ama Llama ve Stable Diffusion çıkarım performansı farkı çok büyüktü. Özellikle Stable Diffusion’da SDXL, 3090’da yaklaşık 9 saniye, M1 Max’te ise yaklaşık 1 dakika 10 saniye sürdü

    • SDXL gibi latent diffusion model çıkarım rakamlarını alıp Whisper gibi bir encoder-decoder transformer çıkarımına genelliyorsunuz
      İki model mimarisinin neredeyse hiçbir ortak yanı yok; Stable Diffusion, CLIP’in önceden eğitilmiş metin kodlayıcısını kullansa da bu da encoder-decoder transformer’dan oldukça farklı
    • Apple Silicon üzerinde Whisper optimizasyonu zaten epey ilerledi; whisper.cpp bunun avantajlarını iyi kullanan bir örnek
      Ayrıca bu yazı yeni Apple MLX framework’ünü ele alıyor, dolayısıyla Llama veya Stable Diffusion testlerinde muhtemelen kullanılmamış olabilir
    • Henüz erken aşama dokümantasyon olsa da MLX belgelerine bakınca, GAN’larda ve özellikle Stable Diffusion’da çok kullanılan convolution işlemlerinin MLX’te anlamlı bir iyileşme görmediği, bazı durumlarda CPU’dan bile yavaş göründüğü anlaşılıyor
      Bunun donanım sınırı mı yoksa MLX kütüphanesindeki optimizasyon eksikliği mi olduğunu bilmiyorum; ancak bu kadar belirgin kullanım senaryosunu öylece göz ardı etmiş olmaları pek olası görünmüyor
      Convolution’ların yüksek hassasiyet ve çok daha büyük tile kümeleri kullanması; tüm dönüşüm GPU’ya sığmadığında pahalı context switch’ler gerektirmesi daha makul geliyor
    • Bende 4090 ve M1 Max 64GB var; Llama 2’de 4090 açık ara üstün
    • Whisper’ı çok kullandım; aynı kalitede daha az bellek kullanırken performansı bir-iki basamak daha iyi olan sürümler vardı ve nedenini tam olarak anlamıyorum
      Bu yüzden aynı yazılım ve aynı model değilse Whisper performansı hakkındaki sezgilere çok temkinli yaklaşmak gerekiyor
      Aynı olsa bile platforma özgü optimizasyonlar istendiği düşünüldüğünde, karşılaştırmanın anlamı hâlâ sınırlı
  • Bu, OpenAI Whisper deposunu kullanıyor gibi görünüyor
    Düzgün bir karşılaştırma için 4090 üzerinde faster-whisper veya insanely-fast-whisper ile MLX karşılaştırılmalı
    faster-whisper sıralı çalışıyor; insanely-fast-whisper ise sesi 30 saniyelik bölümlere ayırıp işliyor
    Üretimde Whisper kullanıyoruz; önceki bölüm metnini dahil etmenin kaliteyi artırdığını düşündüğümüz için faster-whisper kullanıyoruz
    Kabaca faster-whisper, OpenAI/whisper’dan genelde 4–5 kat daha hızlı; insanely-fast-whisper ise faster-whisper’dan tekrar 3–4 kat daha hızlı olabilir

    • insanely-fast-whisper’ın CPU’da bile gerçek zamanlı transkripsiyon yapabilecek kadar hızlı olup olmadığını merak ediyorum
      Buradaki modeller kuantize model değil, hâlâ fp16 gibi görünüyor; bu yüzden daha da hızlanma payı var gibi
      Düzenleme: CPU çıkarımını henüz desteklemediğini gördüm; eklenirse ilginç olur
    • insanely-fast-whisper’ın beam size olarak 5 mi yoksa 1 mi kullandığını merak ediyorum
      5’e ayarlandığında hız karşılaştırmasını da görmek isterim; ideal olarak bu parametre kullanıcıya açılmalı
      Ses kalitesi çok kötü olan kayıtlarla uğraştığım için transkripsiyon kalitesi önemli; kaliteyi feda eden hız karşılaştırmaları benim için pek anlamlı değil
  • Bu yazının özü, yeni yayımlanan Apple MLX’ten yararlanması ve kodun Apple’a özgü optimizasyonlar kullanması
    https://news.ycombinator.com/item?id=38539153

    • Optimize edilmiş bir Nvidia uygulamasıyla karşılaştırılmış da değil
      Whisper’ın daha hızlı uygulamaları var
      Düzenleme: Madem oltaya geldim, yazıda kullanılan 10 dakikalık dosyayı indirip 4090’da insanely-fast-whisper ile çalıştırdım; kurulum iki komutla bitti
      whisper-large-v3 ile dosyanın transkripsiyonu 8 saniyeden kısa sürdü; transkripsiyon başlamadan önceki model yükleme süresi dahil edildiğinde 15 saniyeydi
      Bu ek süre doğal olarak ses uzunluğuna bağlı değil
      Bu durumda 4090, Apple’ın en yüksek performansından 6–12 kat hızlı demek
      Zaten takacak bir gaming PC’niz varsa M2 Ultra’dan çok daha ucuz; içinde 4090 olan hazır bir PC’yi sıfır alsanız bile hâlâ daha ucuz
      Şaşırtıcı değil; üst seviye Mac sahibi insanların cihazlarının her şeyi iyi yaptığına inanmak isteyen hüsnükuruntusunu çok görüyorum
      Apple M serisi çipler çok etkileyici ve büyük RAM de harika, ancak yüksek performanslı makine öğrenmesinde Nvidia ile rekabet etmek zor
    • Açıkçası bunun neden umursanması gerektiğini bilmiyorum
      Mac’iniz varsa o Mac’in performansını kullanırsınız; gaming PC’niz varsa o PC’nin performansını kullanırsınız
      İkisi de olsa bile büyük olasılıkla her gün kullandığınız cihazda çalışan yapay zekayı kullanırsınız
  • insanely-fast-whisper ile karşılaştırıldığında nasıl olacağını merak ediyorum: https://github.com/Vaibhavs10/insanely-fast-whisper
    Optimizasyonları kullanmazsanız bire bir karşılaştırmanın mümkün olduğunu anlıyorum; ama o optimizasyon MLX’e taşınmadıysa hâlâ 4090 kullanmak daha iyi gibi görünüyor
    Son zamanlarda MLX’e baktım; Mac’te kesinlikle popülerlik kazanacak gibi, Swift bağlamaları çıkarsa iOS’te de öyle olabilir: https://github.com/ml-explore/mlx/issues/15
    Ancak şu anda C++20 derleme sorunları engel oluyor olabilir

    • Nvidia’nın güçlü olduğu nokta tam da burası
      Hangi donanım benchmark’ta kazanırsa kazansın, popüler bir modelse genelde inanılmaz derecede elle optimize edilmiş bir CUDA implementasyonu çıkar ve geri kalanını ezer
      Nadir istisnalar da var; örneğin PyTorch’un torch.compile’a emek vermesi sayesinde AMD’de GPT-Fast’in belirli dar kullanım senaryolarında iyi çalışması gibi
      Apple Silicon’da böyle bir istisna aklıma gelmiyor
    • Düzgün karşılaştırma için 4090’da insanely-fast-whisper kodunu çalıştırmak gerekir
      Orijinal benchmark’ların ikisini de rahatça geçer gibi geliyor, ama batch size’ı 24’ten çok daha küçük tutmak gerekecek gibi
      Günümüz ölçütlerine göre Whisper’ın gerçek zamanın 3–4 katında çalışması çok yavaş sayılır; bu benchmark’ı CPU’yla bile geçebilirsiniz
    • Yazı insanely-fast sonuçlarıyla güncellenmiş
  • Bunun başka modellere de uygulanıp uygulanmadığını, yoksa Whisper’ın seri yapısı ve tamsayı işlemleri nedeniyle özellikle mi seçildiğini merak ediyorum
    https://github.com/ml-explore/mlx-examples/tree/main/stable_... buna işaret ediyor gibi

    At the time of writing this comparison convolutions are still some of the least optimized operations in MLX.
    Asıl mesele, CPU/GPU’ya doğrudan bağlı 64 GB’tan fazla çok hızlı RAM kullanabilmek ve gecikme ile ortak erişilebilirlik açısından avantaj sağlamak gibi görünüyor
    Bu sistemlerin güç paketine bakınca rakamlar gerçekten etkileyici
    Ancak minimum RAM yapılandırmalı M3 Max sisteminin fiyatının 4090’ın yaklaşık 2 katı olduğunu da hesaba katmak gerek

    • Apple Silicon’ın belleğinin hızlı olması, uzun süredir 2 kanallı bellekte kalan tüketici CPU’larıyla karşılaştırıldığında geçerli
      4 çekirdek çağında fena değildi, ama modern çekirdek sayıları için mantıklı değil
      GPU’ların bellek ölçeklenebilirliği tüketici tarafında bile çok daha iyi
  • Mac M1’de Whisper çalıştırmak kolay, ancak varsayılan durumda MLX kullanmıyor
    MLX kullanmasını sağlamak için neyi kurup ayarlamam gerektiğini anlamaya bir iki saat harcadım; anlaşılmaz Python hataları ve Torch hataları aldım
    Sonunda vazgeçip GPU’lu bir VM kiraladım ve Whisper’ı birkaç dakika içinde çalıştırabildim

  • X işi için mutlak olarak hangi seçimin en iyi olduğu konusunda çok tartışma olur, ama bu kadar düşük güç tüketimiyle bu seviyede performans elde edilmesi hoşuma gidiyor

  • Bunun yerine bu Whisper türevi depoyu kullanırsanız, çoğu GPU’da 1 saatlik ses bile 1 dakikanın altında yazıya dökülüyor: https://github.com/Vaibhavs10/insanely-fast-whisper

    • Bana göre ctranslate2, insanely-fast-whisper’dan daha hızlı bile olabiliyordu
      L4’te ctranslate2’yi batch size 4 gibi düşük bir değere ayarlasanız bile, flash attention 2 kullanan A100 hariç oradaki tüm benchmark’ları geçiyor
      faster-whisper’a batch mode’un bir türlü eklenmemesi üzücü; bu yüzden insanlar ctranslate2’yi kolayca deneyemiyor gibi
    • Bunun nasıl mümkün olduğunu ve orijinaline kıyasla kalite farkı olup olmadığını ayrıntılı bilmek isterim
      https://github.com/SYSTRAN/faster-whisper gibi depoların neden özgün implementasyondan hızlı olduğunu hemen anlıyorsunuz; diğerleri de kuantizasyon hassasiyetini düşürüp hızlanıyor ama sonuçlar kötüleşiyor
      Fakat bunun neden daha hızlı olduğu özellikle net değil
      Çok daha hızlı olduğu düşünüldüğünde daha da merak uyandırıyor
  • Apple’ın Vision Pro’su düşünüldüğünde özellikle ilginç
    Modelleri enerji verimli çalıştırabilmek dizüstülerde herkes için önemli olmayabilir, ama zaten çok güç tüketen bir başlık için büyük bir avantaj

  • Yardım almak istiyorum
    İyi bir açık kaynak transkripsiyon ve konuşmacı ayrıştırma uygulaması ya da iş akışı var mı?
    https://github.com/thomasmol/cog-whisper-diarization ve https://about.transcribee.net/’e baktım; ikisi de çökme gibi nedenlerle düzgün çalışmadı

    • Kendi çözümümü yaptım ve oldukça basit
      MP3’ü Whisper’ın işleyebileceği parçalara bölüyor, sonra API’ye tek tek gönderip transkripsiyon yaptırıyorum
      Şimdiye kadar beklendiği gibi çalışıyor ve birkaç satır Python kodu yeterli