1 puan yazan GN⁺ 2023-12-17 | 1 yorum | WhatsApp'ta paylaş
  • ML modelleri büyüdükçe çalışma verimliliği yalnızca donanıma değil, derleyici optimizasyonuna da büyük ölçüde bağlı hâle gelir; Google Research ve Google DeepMind bu alanı yine ML ile iyileştiren bir yaklaşımı paylaştı
  • TensorFlow, JAX, PyTorch gibi framework’lerin altında alınan derleyici kararları, aynı model için bile çalışma süresini ve kaynak kullanımını önemli ölçüde değiştirebilir
  • TpuGraphs, TPU’ya yönelik ML programlarının hesaplama grafiklerini, derleme ayarlarını ve çalışma sürelerini içeren; öğrenme tabanlı maliyet modeli araştırmalarında kullanılabilecek bir veri kümesidir
  • Büyük hesaplama grafiklerini tek seferde öğrenmenin zorluklarını azaltmak için Graph Segment Training, grafiği segmentlere bölerek bellek kullanımını düşürür ve eğitim süresini 3 kat kısaltır
  • Kaggle yarışmasında 66 ülkeden 616 takım ve 792 kişi yer alarak grafik sıkıştırma, padding değerini ayarlama, düğüm özellikleri ekleme ve ayarlar arası attention gibi gerçek maliyet tahmin modeli iyileştirme tekniklerini doğruladı

ML derleyicilerinin çalışma performansını belirlemesinin nedeni

  • Modern ML modelleri doğal dili anlama, sohbet, görüntü üretimi ve video üretimi gibi görevleri yerine getirir; TensorFlow, JAX, PyTorch gibi ML programlama framework’leri ile yazılır ve eğitilir
  • Framework’ler matris çarpımı, konvolüsyon gibi lineer cebir işlemlerini ve 2D konvolüsyon katmanları, transformer katmanları gibi sinir ağı katmanlarını sağlar
  • Kullanıcıların modeli donanım üzerinde verimli çalıştırmanın ayrıntılı yöntemleriyle doğrudan uğraşması gerekmez; framework’lerin altındaki derleyici modeli otomatik olarak optimize eder
  • Ancak derleyiciler karmaşık optimizasyon problemlerini çoğu zaman sezgisel yöntemlerle çözdüğünden, her zaman en iyi performansı sağlamak zor olabilir

Hesaplama grafikleri ve iki aşamalı optimizasyon

  • ML derleyicileri, kullanıcının yazdığı matematiksel komutları gerçek donanımda çalıştırılabilecek komutlara dönüştürür
  • Bir ML programı hesaplama grafiği olarak ifade edilebilir
    • Düğümler matrix multiplication gibi tensör işlemlerini temsil eder
    • Kenarlar, bir düğümden diğerine akan tensörleri temsil eder
  • Derleyici optimizasyonu genel olarak iki türe ayrılır
    • Grafik düzeyi optimizasyon: Tüm grafiğin bağlamını dikkate alarak kararlar verir ve grafiğin tamamını dönüştürür
    • Kernel düzeyi optimizasyon: fused subgraph olan tek bir kernel’i diğer kernel’lerden bağımsız olarak dönüştürür

Bellek yerleşiminin performans takasları

  • Matris gibi 2D tensörler bellekte [A B C a b c] veya [A a B b C c] biçiminde saklanabilir; bunlar sırasıyla row-major ve column-major yerleşimlere karşılık gelir
  • ML derleyicilerinin önemli optimizasyonlarından biri, programdaki tüm ara tensörlere bellek yerleşimi atamaktır
  • Belirli bir yerleşim tekil bir işlem için en verimli seçenek olabilir; ancak add ile convolution arasında yerleşim uyumsuzsa derleyicinin ek copy işlemleri eklemesi gerekir
  • Buna karşılık, tekil işlem performansı biraz daha düşük olsa bile yerleşim dönüşümü gerektirmeyen bir yapılandırma toplam çalıştırmada daha iyi olabilir
  • XLA benchmark suite’inde, varsayılan derleyici ayarları yerine en iyi yerleşim yapılandırması seçildiğinde en fazla %32 hız artışı gözlemlendi

TpuGraphs veri kümesi

  • TpuGraphs, Google’ın özel TPU’larında çalışan programlar için öğrenme tabanlı maliyet modeli veri kümesidir
  • Amaç, girdi programı ve derleyici ayarlarını alıp programın çalışma süresini tahmin eden bir maliyet modeli eğitmektir
  • Veri kümesi iki XLA derleyici ayarını hedefler
    • layout: Matrislerdeki row-major·column-major kavramını yüksek boyutlu tensörlere genelleyen ayar
    • tiling: Tile boyutu ayarı
  • Her örnek, bir ML iş yükünün hesaplama grafiğini, derleme ayarını ve bu ayarla derlendiğinde ortaya çıkan çalışma süresini içerir
  • Grafikler açık kaynak ML programlarından toplanmıştır ve ResNet, EfficientNet, Mask R-CNN, Transformer gibi model mimarilerini içerir
  • İndirme yöntemi ve başlangıç kodu TpuGraphs GitHub’da sunulur
  • TpuGraphs, benzer grafik boyutuna sahip mevcut en büyük graph property prediction veri kümesinden 25 kat daha fazla grafik içerir ve ortalama grafik boyutu mevcut ML programı performans tahmini veri kümelerinden 770 kat daha büyüktür

Referans maliyet modeli ve GNN yapısı

  • TpuGraphs, referans bir öğrenme tabanlı maliyet modeliyle birlikte gelir; girdi programı grafik olarak temsil edildiği için GNN kullanılır
  • Düğüm özellikleri iki bölümden oluşur
    • opcode id: Tensör işlemi türünü gösteren en önemli düğüm bilgisi
    • Diğer düğüm özellikleri
  • Referans model, opcode id’yi bir embedding lookup table aracılığıyla opcode embedding’e dönüştürür
  • Opcode embedding ile diğer düğüm özellikleri birleştirilerek GNN girdisi olarak kullanılır
  • GNN’nin ürettiği düğüm embedding’leri, sum ve mean gibi basit graph pooling reduction işlemleriyle sabit boyutlu bir grafik embedding’inde birleştirilir
  • Son grafik embedding’i, feedforward layer’dan geçirilerek tek bir scalar çıktıya dönüştürülür

Büyük grafiklerin Graph Segment Training ile eğitilmesi

  • Graph Segment Training, sınırlı bellek kapasitesine sahip cihazlarda büyük grafikleri ele almaya yönelik bir GNN eğitimini ölçekleme tekniğidir
  • Bu yöntem, tahmin hedefinin düğüm veya kenar değil tüm grafik olduğu graph-level prediction durumlarını hedefler
  • Hesaplama grafikleri yüz binlerce düğüm içerebilir; bu nedenle tüm grafiği tek seferde kullanan Full Graph Training hesaplama açısından imkânsız olabilir
  • GST, büyük grafiği küçük segmentlere böler ve modeli güncellemek için segmentlerin yalnızca rastgele bir alt kümesini seçer
  • Kalan segmentler ara activation’ları saklamadan embedding üretir ve bellek kullanımını azaltır
  • Tüm segment embedding’leri birleştirilerek özgün büyük grafiğin embedding’i oluşturulur ve tahmin için kullanılır
  • Historical embedding table ve segment dropout birlikte kullanılarak historical embedding’in staleness sorununu hafifletir
  • Yöntemin tamamı end-to-end eğitim süresini 3 kat kısaltır

Kaggle yarışmasında doğrulanan iyileştirme teknikleri

  • Fast or Slow? Predict AI Model Runtime Kaggle yarışması TpuGraphs veri kümesine dayanarak düzenlendi; 66 ülkeden 616 takım ve 792 kişi katıldı
  • Gönderim sayısı 10.507 oldu; 153 kişi için bu ilk Kaggle yarışmasıydı ve bunların 47’si ilk 100’e girdi
  • Katılan ekipler çeşitli teknikler denedi
    • Grafik pruning·compression: GST yerine büyük grafikleri sıkıştırma yöntemleri denendi; ayarlanabilir düğümleri ve onların doğrudan komşularını içeren yalnızca subgraph’ı tutan yaklaşım kullanıldı
    • Padding değerini değiştirme: Varsayılan padding değeri 0, geçerli feature değerleriyle çakıştığından -1 kullanmak model doğruluğunu önemli ölçüde artırabildi
    • Düğüm özellikleri ekleme·kodlamayı değiştirme: dot general’ın contracting dimensions gibi ek düğüm özellikleri önemlidir; düğüm özelliklerini kodlama yöntemi de sonuçları etkileyebilir
    • Cross-configuration attention: Kazanan ekip, modelin ayarları açıkça karşılaştırabilmesini sağlayan basit bir layer tasarladı; bu, her ayarı ayrı ayrı çıkarsatan yönteme göre çok daha iyi sonuç verdi
  • Yarışma sonuçları ve kazanan çözüm, 16 Aralık 2023’te NeurIPS’in ML for Systems workshop yarışma oturumunda ele alınacak

NeurIPS Expo ile ilgili oturum

  • Yapılandırılmış veriler ve yapay zeka araştırmalarıyla ilgilenen okurlar için NeurIPS Expo paneli Graph Learning Meets Artificial Intelligence 9 Aralık 2023’te düzenleniyor
  • Bu panel, öğrenme tabanlı maliyet modellerindeki gelişmeler gibi konuları ele alıyor

1 yorum

 
GN⁺ 2023-12-17
Hacker News yorumları
  • ML derleyicileri abartılıyor. Geleneksel derleyicilerle aynı türden bir ödünleşim: uzman performans programcıları işe almaya kıyasla çok daha fazla üretim/çıktı elde edersiniz; ama ikincisi genelde çok daha hızlıdır ve bazı durumlarda birkaç basamak fark atabilir.
    Birçok düzeyde eksikler. Algoritma düzeyinde, ağı daha hızlı hâle getirecek püf noktalarını insana geri besleyemiyor; yalnızca çok temel sinyaller veriyor. Niyet de kayboluyor. ML ağı tasarımcısı yapıyı Python ile belirtir, ama birkaç aşamalı aşağı dönüştürmeden geçince tamamen alakasız bir sonuç çıkabilir. Geçenlerde bir derleyicinin slice update yaparken dizinin olası tüm indeks aralıklarını oluşturduğunu, sonra güncellenecek indeksleri elde etmek için bunu dilimleyip scatter yaptığını gördüm; bunu tek bir memcpy çağrısıyla değiştirdim. Kernel’lar da verimsiz. Bu tür derleyici çıktısı ne zaman deneyimli bir assembly programcısıyla karşı karşıya gelse derleyici kaybediyor; genelde fark %30’dan fazla oluyor. Çözmesi kolaymış gibi görünüyor, ama son 50 yılda kimse bunu doğru düzgün çözememişse, demek ki söylendiği kadar basit değil.

    • Satranç motoru Stockfish’e bakınca, tahta değerlendirmesinde yıllarca insanlar tarafından yazılmış sezgiselleri atıp küçük bir sinir ağıyla değiştirdiler ve daha iyi çalıştı.
      Derleyicilerde de inline etme, döngü açma, vektörleştirme gibi çok sayıda sezgisel var; bu yüzden sinir ağları yardımcı olabilir ve insanlar tarafından yazılmış çok sayıda sezgiselden bakımı daha kolay olabilir.
    • Geleneksel derleyicilerle aynı ödünleşim dediniz; o geleneksel derleyicilerin inanılmaz derecede faydalı olmuş olması ilginç.
    • Fazla kesin ve kapalı fikirli bir tutum gibi görünüyor.
    • Doğru. Elle assembly yazacak birini işe almak varken kim neden gcc/clang kullansın ki?
    • Asıl mesele o üretim/çıktı kapasitesi. Her ML işi için bir performans uzmanı görevlendiremezsiniz.
      Bu tür optimizasyonların hiç olmamasındansa hâlâ çok daha iyi.
  • Bunu biraz gerçekçi biçimde açıklayabilir misiniz? Mevcut ML derleyicilerinin pratikteki durumu nasıl, yakın vadede ne bekleyebiliriz merak ediyorum.

    • En kolay yaklaşımlardan biri torch.compile. PyTorch derleyicisinin en yeni yinelemesi; önceki yöntemler arasında TorchScript ve FX Tracing vardı.
      Sadece model = torch.compile(model) yazmanız yeterli. “Bu 163 açık kaynak model genelinde torch.compile vakaların %93’ünde çalıştı ve NVIDIA A100 GPU’da eğitimi %43 hızlandırdı. Float32 hassasiyetinde ortalama %21, AMP hassasiyetinde ortalama %51 hızlanma sağladı.”[1] Google, bu tür yöntemlerin Ar-Ge’sine daha fazla kişinin katılmasını sağlamaya çalışıyor gibi görünüyor.
      [1] https://pytorch.org/get-started/pytorch-2.0/
    • Yakın vadeli beklenti, modelin geliştirildiği framework için açık bir tedarikçi desteği olmasa bile AMD, CUDA, TPU, CPU vb. kullanabilmek.
      Gerçeklik karmaşık olduğu için epey basitleştirerek söylersek, hesaplama grafiğini bir ara temsile derleyip buna uygun backend’ler uygulama yaklaşımı. İlgili projeler olarak stableHLO, IREE ve openXLA’ya bakılabilir. Jax’in jit derleyicisi de bu tür derleyicilerin bir biçimi sayılabilir. İzlenen işlemleri XLA’ya indiriyor, XLA da backend’de çalışması için çeşitli sihirler yapıyor. Sonuçta aşağı indikçe her şey sürekli dönüşüm ve soyutlama.
    • torch.compilea bakın.
  • Özetle bu, hesaplama grafiğinin çalışma zamanı performans tahminini graf sinir ağı (GNN) ile iyileştirme işi. Her düğümün opcode’u için bir embedding sözlüğü ile shape, bit sayısı, window size gibi diğer düğüm özellikleri birlikte kullanılıyor([1]).
    Farklı XLA derleme ayarlarını ve TPU’daki sonuç performanslarını içeren büyük bir grafik veri kümesini [2]’de yayımladılar; grafiği bölme yöntemiyle (METIS graph partition’ı ilk kez görüyorum) ve çeşitli öğrenme teknikleriyle [3]’te daha önceye göre daha büyük grafiklerin tahminini iyileştirdiler. Bu, verilen bir grafiğin performansını tahmin etmekle ilgili; eşdeğer yeni bir grafiği iyileştirmek, önermek ya da değiştirmekle ilgili değil. FunSearch’te olduğu gibi, tahmin gücü fena olmayan bir model evrimsel aramayla birlikte kullanılabilir.
    [1] https://github.com/google-research-datasets/tpu_graphs#featu...
    [2] TpuGraphs: A Performance Prediction Dataset on Large Tensor Computational Graphs https://arxiv.org/abs/2308.13490
    [3] Learning Large Graph Property Prediction via Graph Segment Training https://arxiv.org/abs/2305.12322

  • Şu grafikte konvolüsyonun nasıl çalıştığını açıklayabilir misiniz? Shape’i [2,4,16] olan bir tensöre shape’i [4,16,8] olan bir kernel ile konvolüsyon uygulanıyor ve [2,8] tensörü çıkıyor; bu nasıl mümkün?

    • Yardımcı olur mu bilmiyorum ama giriş tensörü [2,4,16] içinde 2 batch boyutu, 4 giriş özellik boyutu, 16 ise giriş kanal boyutu olarak görülebilir.
      Kernel [4,16,8] içinde 4 filtre penceresinin boyutu, 16 giriş kanal boyutuyla eşleşen değer, 8 ise çıkış kanal boyutudur. Çıkış [2,8] içinde 2 batch boyutu olarak korunur, 8 de kernel’ın çıkış kanal boyutuyla eşleşir. Dışarıdan bakınca boyutlar uyuşmuyor gibi görünse de grafikteki konvolüsyon komşuluk yapısından yararlanır. Kernel graf üzerinde hareket ederek mevcut düğüme ve belirli bir yarıçap içindeki komşu özelliklere ağırlık uygular; bu ağırlıklı toplamları bir araya getirip her çıkış kanalı için yeni özellikler oluşturur. Graf yapısı ve kenar ağırlıkları, padding ve stride gibi uygulama ayrıntıları da çıkış shape’ini etkileyebilir.
  • Gemini ne durumda?

    • GPT-4’ün hâlâ üstün olması ilginç: https://twitter.com/lmsysorg/status/1735729398672716114
      Aklıma gelenler bile Llama, Claude, Gemini, Falcon, Mistral gibi en az beş temel model; birbirlerini geçip duruyorlar ama GPT hâlâ bir seviye yukarıda ve bir yıldır böyle. Transformer tabanlı büyük dil modellerinin, GPU zamanına yaklaşık bir milyon dolar harcayabilen herkesin yapabileceği kadar basit olduğu ortaya çıktı; yine de OpenAI’ı tamamen yakalayamıyorlar. Onların özel sırrı ne acaba?
  • Transformerın kendisi nasıl? Herhangi bir anlamda optimal olduğuna dair bir ipucu var mı?

  • İlk paragrafta asıl noktayı gömmüşsünüz gibi geldi, ama geri kalanı harika.

  • Şu an ML’nin gelişim hızı şaşırtıcı. Tekilliğe inanmıyorum ama yazılımı ve toplumu kimsenin öngöremeyeceği biçimde değiştiriyor.

    • Buna ve FunSearch’e bakınca tekillik eli kulağında gibi görünüyor.
      https://deepmind.google/discover/blog/funsearch-making-new-d...
    • Bana dot-com, mobil, bulut, VR’dan sonra gelen bir başka altına hücum gibi görünüyor.
    • Beş yıl sonra insanların bugün olduğu gibi programlama yapacağını sanmıyorum.
    • Önce tedavisi zor hastalıklar için tedaviler ortaya koyduğunu görmek isterim. Tekilliğin kendisi insana fayda sağlamıyorsa anlamlı değil; bu fayda da esas olarak sağlığın iyileşmesi ve acının azalması olmalı.