13 puan yazan GN⁺ 2025-09-30 | 1 yorum | WhatsApp'ta paylaş
  • Bu yazı, saf Python kodunu önceden derleme (AOT) ile çapraz platform çalıştırılabilir dosyalara dönüştürmeye yönelik bir girişim ve tasarımı, örnekler üzerinden anlatıyor
  • Temel fikir; yeni bir JIT geliştirmek ya da her şeyi C++ ile baştan yazmak yerine, sembolik izleme → IR → C++ kod üretimi → çoklu hedef derleme hattıyla optimize edilmiş çekirdekler üretmek
  • PEP 484 tip notasyonları ile tip yayılımı başlatılıyor, yapay zeka kod üretimi ile yüzlerce C++ operatörü otomatik uygulanarak Numpy, OpenCV, PyTorch gibi geniş kütüphane çağrıları kapsanıyor
  • Aynı Python fonksiyonu için farklı uygulama yolları büyük ölçekte üretilip dağıtılıyor ve gerçek ölçüm telemetrisi ile en hızlı varyantı seçen ampirik performans optimizasyonu stratejisi benimseniyor
  • Amaç, konteynere bağımlı olmayan küçük, hızlı ve taşınabilir ikili dosyalar sağlayarak bunları sunucu, masaüstü, mobil ve web dahil her yerde çalışabilen bir dağıtım birimi haline getirmek

Foreword

  • Python'ın sadeliği ve üretkenliği güçlü yanları olsa da, yüksek yük işlerinde performans ve taşınabilirlik sınırları bulunuyor
  • Konuk yazar Yusuf Olokoba'nın bu yazısı, orijinal Python'u koruyarak hızlı ve taşınabilir çalıştırılabilir dosyalar üreten bir derleyici tasarımını tanıtıyor
  • Yaklaşım, JIT eklemeden veya her şeyi C++'a yeniden yazmadan bir hat kurup çekirdek optimizasyonu sağlamayı amaçlıyor

Introduction

  • Hedef, değiştirilmemiş Python'u tam AOT ile derleyip yorumlayıcı olmadan çalışan, C/C++'a yakın hızda ve tüm platformlarda çalışabilen hale getirmek
  • Mevcut girişimlerden (Jython, RustPython, Numba, PyTorch, Mojo vb.) farklı olarak yaklaşım, dil veya çalışma zamanı değiştirmek yerine kod dönüştürme ve çekirdek üretimini seçiyor
  • Bu şekilde derlenmiş Python fonksiyonları halihazırda her ay binlerce cihazda kullanılıyor

Containers Are the Wrong Way to Distribute AI

  • Gerçek dağıtım senaryolarında konteynerler, yorumlayıcı, paketler ve OS anlık görüntüleri gibi aşırı yük taşıyarak başlatma gecikmesi ve taşınabilirlik kısıtları yaratıyor
  • Alternatif, yalnızca modeli içeren kendi kendine yeterli çalıştırılabilir dosyalar; bu yaklaşım daha küçük boyut, daha hızlı açılış ve sunucu, masaüstü, mobil, web genelinde çalışabilme sunuyor
  • Temel fikir, dağıtım birimini bir OS anlık görüntüsünden kendi başına çalışan bir ikiliye dönüştürmek

Arm64, Apple, and Unity: How It All Began

  • Apple'ın arm64 geçişi sırasında Unity'nin CIL'i C++'a çeviren IL2CPP yaklaşımı sayesinde tüm hedeflere derleme yapabilmesi örnek alınıyor
  • Aynı fikir Python'a uygulanarak, her yerde çalışabilen kod yolları elde etme vizyonu kuruluyor

Sketching Out a Python Compiler

  • Üst düzey tasarım, Python girişi → sembolik iz (IR) → C++ üretimi → çoklu hedef derleme adımlarından oluşuyor
  • IR'den doğrudan nesne koduna gitmek yerine C++'ın ara çıktı olarak seçilmesinin nedeni, CUDA, MLX, TensorRT, AMX gibi hızlandırma yollarını azami ölçüde kullanabilmek
  • Hedef, donanıma özgü en iyi yolların kolayca eklenebildiği genişletilebilir bir tasarım kurmak

Building a Symbolic Tracer for Python

  • İlk PyTorch FX tabanlı izleme yaklaşımı, çalıştırma gereksinimi ve yalnızca PyTorch işlemleriyle sınırlı kalması nedeniyle yetersiz kaldı
  • Bunun yerine AST ayrıştırma tabanlı bir sembolik izleyici kurularak kontrol akışı ve çağrı çözümleme IR'ye dönüştürülüyor
  • Mevcut izleyici şu anda statik analiz, kısmi değerlendirme ve sandbox tabanlı canlı değer gözlemi gibi yetenekler sunuyor

Lowering to C++ via Type Propagation

  • Python'ın dinamik tip sisteminden, C++'ın statik tip sistemine köprü kurmak için tip yayılımı kullanılıyor
  • Girdi bağımsız değişkenlerinin tipleri verildiğinde, ara değişken tipleri operatör tanımlarına göre deterministik olarak çıkarılabiliyor
  • Her Python işlemi, karşılık gelen C++ uygulamasına eşleniyor ve fonksiyon genelinde tipler yayılıyor

Seeding the Type Propagation Process

  • Tip yayılımını başlatmak için PEP 484 tip notasyonları kullanılıyor
  • Bu, orijinal kodu değiştirmeme ilkesiyle çelişse de, özlü arayüz ve uyumluluk adına kabul edilebilir bir ödün olarak görülüyor
  • Ayrıca fonksiyon imzasındaki tip sayısını sınırlamak gibi kısıtlarla basit bir tüketici arayüzü garanti ediliyor

Building a Library of C++ Operators

  • Tüm fonksiyonları doğrudan C++ ile yazmak yerine, yalnızca izlenemeyen yaprak işlemler için elle/otomatik uygulama gerekiyor
  • Pek çok Python kodu, az sayıdaki temel işlemin bileşiminden oluştuğu için, kapsanması gereken operatör kümesi görece küçük kalıyor
  • LLM tabanlı kod üretimi ile birlikte kısıtlama, test ve koşullu derleme altyapısı kullanılarak Numpy, OpenCV, PyTorch gibi ekosistemler için yüzlerce fonksiyon uygulaması otomatikleştiriliyor

Performance Optimization via Exhaustive Search

  • Performans optimizasyonunun her zaman ampirik olduğu kabul edilerek, farklı uygulama varyantlarının tamamı üretiliyor ve gerçek ölçüm karşılaştırmasıyla en iyisi seçiliyor
  • Örneğin Apple Silicon'da yalnızca resize işlemi için bile Accelerate, vImage, Core Image, Metal gibi birden çok yol üretiliyor ve aynı işlevin çoklu ikilileri dağıtılıyor
  • Ayrıntılı telemetri ile yol bazlı gecikmeler toplanıyor, ardından istatistiksel modellerle en hızlı varyant tahmin edilip seçiliyor
  • Kullanıcı açısından sonuç, zaman geçtikçe kendiliğinden hızlanan bir çalışma deneyimi sunmak

Designing a User Interface for the Compiler

  • Geliştirici deneyimini neredeyse sıfır öğrenme eğrisiyle sunmak için arayüz olarak PEP 318 dekoratörü @compile seçiliyor
  • CLI, dekoratörü giriş noktası kabul edip bağımlı kod grafiğini tarıyor ve derliyor
  • Dekoratör parametreleri olarak tag, description, sandbox, metadata alınıyor; böylece ortamın yeniden üretimi ve arka uç seçimi (ONNXRuntime, TensorRT, CoreML, IREE, QNN vb.) destekleniyor

Closing Thoughts

  • İstisnalar, lambda, özyineleme ve sınıflar gibi özelliklerde kısmi destek veya destek eksikliği var; özellikle bileşik tipler ve yüksek mertebeden tiplerde tip yayılımının genişletilmesi gerekiyor
  • Hata ayıklama deneyimi, optimize derleme nedeniyle sembol bilgisinin azalmasıyla iz sürmeyi zorlaştıran bir sorun olmaya devam ediyor
  • C++20 içindeki std::span, concepts ve coroutines temel yapı taşları; C++23 içindeki std::generator, <stdfloat>, <stacktrace> ise akış işleme, half/bfloat16 ve istisna izleme tarafında katkı sağlayacak
  • Nihai hedef, konteynersiz, küçük, hızlı ve güvenli çalıştırılabilir dosyalarla gömme ve algılama gibi yapay zeka iş yüklerini her yerde çalıştırılabilir bir dağıtım birimi haline getirmek

1 yorum

 
secret3056 2025-09-30

APE gibi bir şey sanmıştım ama o değilmiş.